The Hackerlab at regexps.com

プロジェクトツリーのインベントリ (inventory)

up: arch Meets hello-world
next: ソースのインベントリ Id
prev: 新規ソースツリーの開始

注意: 険しい学習曲線: 本章で紹介する概念とコマンドは, きっと馴染みがないでしょう. たとえ他のリビジョン管理システムの経験があったとしてもです. それらは, 最初の学習上の困難をいったん克服すれば、本当に全く単純です. そして, その後はとても役に立ちます.


名前に基づくインベントリ概念

プロジェクトツリーの中では、あるファイルやディレクトリは"ソースの一部"です。 これらは arch にとって重要なものです。 他のファイルとディレクトリは, スクラッチファイル、エディタのバックアップファイル、 それとプログラムによって生成された一時的な中間ファイルかもしれません。 これら他のファイルは、ほとんどの arch コマンドからは, 無視されたり特別に扱われるべきです.

本章は, どのファイルに注意を払ったり, 無視したりするかを, arch がどのようにして決めるかを議論します。


inventory コマンド

up: プロジェクトツリーのインベントリ (inventory)
next: arch 命名規約
prev: 名前に基づくインベントリ概念

コマンド tla inventory --names --source は、 命名規約に従って定まるソースファイルの一覧を印刷するのに使われます. これは多くのオプションを持ち, 他の種類のファイル一覧(エディタのバックアップファイル全ての一覧や, ソース以外の全ファイル一覧など)を印刷するオプションを含みます.

ある編集作業の後で, ソースツリーが次のようになるとします:

        % ls
        hw.c            hw.c.~1~        main.c          {arch}

hw.c.~1~ファイルはエディタのバックアップファイルです。 tlaはそのことを知っていて, ソースインベントリからそのファイルを抜きます:

        % tla inventory --names --source
        ./hw.c
        ./main.c

tlaはソース以外の, 他の一覧も表示できます:

        % tla inventory --names --backups
        ./hw.c.~1~


arch 命名規約

up: プロジェクトツリーのインベントリ (inventory)
next: 命名規約の解説
prev: inventory コマンド

本節で説明することは, ソースファイルを他の種類のものファイルから識別するために arch によって使われる, デフォルトの命名規約です. 後の章で、特定のツリーのための, これらの規約をカスタマイズする方法を述べます (インベントリ命名規約のカスタマイズを参照).

命名規約はファイルのいくつかの分類に基づきます:


        . と ..                 archでは単に無視されます

        excluded                除外された (excluded) ファイルは通常, 一覧から
                                省かれます. ただし, もし `--all'フラグ'が
                                `inventory'に渡されると, これらのファイルは
                                下記のカテゴリのどれかに入り, 一覧に入ります.

        source                  見かけ上はソースファイルです。

        precious                ソースファイルでは無いですが, 自動的に
                                削除されるべきではないものです.

        junk                    ソースファイルでは無いもので, 自動的に
                                削除されてもよいものです.

        backups                 ソースファイルでは無いもので, 自動的に
                                削除されてもよいものです. ただし, これらを
                                削除するプログラムは全て, これらを
                                エディタのバックアップファイルとして
                                扱うべきです (たとえば, 一番古いものと
                                新しいものを保持する等)

        unrecognized            arch が分類方法を知らないファイルです。
                                命名規約のいずれにも当てはまらないか、
                                もしくは, 名前が "怪し (suspicious)"く見えます.

ファイルを名前で分類するためのアルゴリズムは、いくつかのルールを持ちます. 個々のファイル名に対して, これらのルールがこの一覧順で, 該当する最初のルールに達するまで, 調べられます.

ドットファイルの除外 特別なファイル ... は常にインベントリの一覧から除外されます.

可搬性のない名前は認識されない (Unrecognized) ファイル名が 空白、印字されない文字, あるいは, "展開文字 (globbing character)"を 含むものは, 常に unrecognizedに分類されます。 展開文字は以下のものです:

        ? [ ] * \

除外 (Excluded) ファイルのテスト もし --all フラグが inventory に与えられない場合、 除外ファイルのパターンに一致する名前のファイルは一覧から落とされます. もしディレクトリ名が除外されれば、そのディレクトリの内容全体が省かれます. デフォルトでは, 除外ファイルのパターンは arch自身によって 生成されたコントロールファイルと一致します:

        ^(.arch-ids|\{arch\})$

ジャンク (Junk) ファイルのテスト この段階に達する, 二つのコンマ (,,)で始まる, 全てのファイル名は, junk に分類されます. arch自身が作る一時ファイルは二つのコンマで始まります. 加えて、ファイル名がジャンクパターンに一致するもの全ても junkに分類されます。 デフォルトでは、このパターンは(少なくとも)一つのコンマではじまる任意のファイル名と一致します:

        ^,.*$

たまたまですが, このデフォルトパターンで便利なトリックを使えます. スクラッチファイルをソースツリー内に作る必要があるなら、 ひとつのコンマから始まる名前を付けてください。

バックアップ (Backup) ファイルのテスト  デフォルトでは, バックアップファイルは、この段階に達し, かつ, 以下のパターンの一つと一致するファイルです:

        ^.*(~|\.~[0-9]+~)$
        ^.*\.bak|\.orig|\.rej|\.original|\.modified|\.reject)$

大事な (Precious) ファイルのテスト  デフォルトでは, 大事なファイルは、この段階に達し, かつ, 以下のパターンの一つと一致するファイルです:

     ^\+.*$
     ^(\.gdbinit|\.#ckpts-lock)$
     ^(=build\.*|=install\.*)$
     ^(CVS|CVS\.adm|RCS|RCSLOG|SCCS|TAGS)$

怪しい (Suspicious) ファイルのテスト (未認識 (Unrecognized))  この段階に達するファイルのいくつかは, これらがソースツリーの中に恐らく存在すべきではないという推測のもとで, unrecognizedとして明示的に扱われます. デフォルトでは、以下の拡張子のいずれかで終わる名前は unrecognizedとして扱われます:

        .o
        .a
        .so
        .core

加えて、ファイル名 core も(デフォルトで) unrecognizedとして扱われます。

ソース (Source) ファイルのテスト  この段階に達するファイルは、ソースファイルのパターンと比較されます。 デフォルトのパターンは以下に示します. このパターンが上述の excludedファイルのパターンと重なりがあることに注意してください。 もし --allフラグがインベントリに与えられると、 excludedパターンは使用されず、それと一致するファイルは、 代わりに, このアルゴリズムの後の段階へ"すり抜け"ます.

        ^([_=a-zA-Z0-9].*|\.arch-ids|\{arch\}|\.arch-project-tree)$

言い換えれば、デフォルトでは, arch のコントロールファイルとディレクトリはソースです(もし除外されなければ)。 文字、数字、アンダースコア, あるいは等号記号で始まるファイルはソースです。

未認識 (Unrecognized) ファイル  このステップに達したファイルはすべて unrecognized として扱われます。


命名規約の解説

up: プロジェクトツリーのインベントリ (inventory)
next: 命名規約のカスタマイズ
prev: arch 命名規約

私たちの例で、命名規約のうちのいくつかを説明できます。

私たちのプロジェクトツリーが次のように見えることを思い出してください:

        % ls
        hw.c            hw.c.~1~        main.c          {arch}

だから普通のソース一覧は:

        % tla inventory --names --source
        ./hw.c
        ./main.c

で, ソースファイルのすべて (一覧から何も除外しないとき)は:

        % tla inventory --names --source --all
        ./hw.c
        ./main.c
        ./{arch}/.arch-project-tree
        ./{arch}/=tagging-method

この一覧にディレクトリを含めることができます:

        % tla inventory --names --source --all --both
        ./hw.c
        ./main.c
        ./{arch}
        ./{arch}/.arch-project-tree
        ./{arch}/=tagging-method
        ./{arch}/hello-world
        ./{arch}/hello-world/hello-world--mainline
        [... 以下省略 ...]

ソースではないファイルの一覧も見ることができます:

        % tla inventory --names --backups
        ./hw.c.~1~

inventory コマンドは沢山のオプションを持ってます. あなたはこれらを調べてみたくなるかもしれません.


命名規約のカスタマイズ

up: プロジェクトツリーのインベントリ (inventory)
next: なぜそのようになっているか -- インベントリ命名規約
prev: 命名規約の解説

inventory コマンドで使われるパターンを変更して, ファイルを分類することができます. これは後の章で説明されます (インベントリ命名規約のカスタマイズを参照).


なぜそのようになっているか -- インベントリ命名規約

up: プロジェクトツリーのインベントリ (inventory)
prev: 命名規約のカスタマイズ

多くのシステムはソースファイルを認識するために命名規約を提供しますが, arch に慣れない人は, なぜ arch でこんなに多くのファイルの分類が必要なのかと, しばしば不思議に思います。 arch は以下の分類を持つことを思いだしてください:

        excluded
        source
        precious
        junk
        backups
        unrecognized

分類の根拠を説明します:

excluded は、単に, インベントリの一覧を簡潔にするためのものです. そこで省かれる archのコントロールファイルは, ふつうは見る必要が無いからです. これは ls の "ドットファイル" の扱いと同様す. inventory--all フラグは, ls-a フラグと同様です.

source は、単に, arch がこれらのファイルを他のと確実に区別できるように提供されます. 例えば、二つのソースツリーを比較する場合, archsource に分類されるファイルだけを比較します。

precious ファイルは, arch が保存するように努めるべきものです. 例えば、arch がプロジェクトツリーのコピーを作る必要があれば, sourceとともに preciousファイルをコピーします。 例として, あなたがソース上で作業中にノートを取ったと仮定します. あなたはノートのファイルをソースだと誤認されたくはないですが, それらを失いたくもありません。 役に立つ手段は、ファイルに precious名 (例えば +notes)を付けることです。

junk プロジェクトツリー上で作業するときにしばしば, "使い捨て"ファイルを作成するのは便利です。 簡単なテストプログラムをコンパイルしたり、あるコマンドの出力をとりあえず保存したいかもしれません. 使い捨てファイルがかなりたまってきたら、どのファイルを放り投げて, どれを保持するかを注意して分類しないでも, これらを一度に消せると便利です. junk名はこの目的に最適です. これらの使い捨てファイルを作成する場合、,fooのような名称を付けてください。 後で, 次のようなコマンドを使うのに, 自信に満ちて安全に感じることができます:


        % rm ,*

        % find . -name ',*' | xargs rm

        % tla inventory --junk | xargs rm


arch から見ると、ジャンクファイルは二つの重要な特性を持っています。 まず、ツリーをコピーする場合、ジャンクファイルはコピーされません。 次に、arch がジャンクファイルを上書きするのは安全であるとみなされます. 実際には、arch が実際にジャンクファイルを上書きするのは, ジャンクファイルの名前が ,,から始まるときのみです.

backups エディタのバックアップファイルと, patchのようなプログラムによって作成されたバックアップファイルは、 しばしば特別に扱うに値します. 例えば、あなたのエディタが"番号付バックアップ"を作成すれば, それらはほとんどジャンクファイルですが, それらをすべて削除するよりも, その一部だけを削除したいと思うでしょう。

arch にとって, 重要なことは, ツリーをコピーするとき, バックアップファイルはコピーすべきではないことです. 利用者にとっては, 最も有用と期待されるのは, 以下の技を使うことです:

        % tla inventory --junk | xargs rm

これはバックアップファイルを削除しないでしょう.

unrecognized どんな既知のパターンにも合わない (あるいは、怪しい名前を持つ)ファイルがソースツリーにも現れるのは, 大抵, 何かがうまく行かなかったことを示します. そのようなファイルを暗黙のうちに無視したり, preciousjunkとして扱ったりするよりもむしろ, archはこれらの例外に明示的にフラグを立てて, 利用者に 警告を出せるようにします.

結局, ファイルの命名規約を採用するのは, 多くのプログラマが慣れていない規律ですが, それは私が強く推めることの一つです. これらの規約に固執することや, inventorytree-lint (後で紹介します)のような道具は、あなたのソースが制御不能にならないように 助けてくれます.

arch Meets hello-world: A Tutorial Introduction to The arch Revision Control System
The Hackerlab at regexps.com