The Hackerlab at regexps.com

新規ソースツリーの開始

up: arch Meets hello-world
next: プロジェクトツリーのインベントリ (inventory)
prev: 新規プロジェクトの開始

前章の例をたどると、あなたは新しいアーカイブと, そのアーカイブ内に新しい hello-world プロジェクトを持つはずです.

この章では、そのプロジェクトの一部として, ソースツリーを準備する段階を見ていきます.

最初のソース

例題として、最初の、ちょっとバグっぽい hello-world の実装があるとしましょう:

        % cd ~/wd

        % ls
        hello-world

        % cd hello-world

        % ls
        hw.c    main.c
        
        % cat hw.c
        
        #include <stdio.h>
        
        void
        hello_world (void)
        {
          (void)printf ("hello warld");
        }
        
        
        % cat main.c
        
        extern void hello_world (void);
        
        int
        main (int argc, char * argv[])
        {
          hello_world ();
          return 0;
        }

プロジェクトツリーを初期化する

ソースを準備する第一歩は、ふつうのソースツリーを プロジェクトツリー にすることです:

        % cd ~/wd/hello-world

        % tla init-tree hello-world--mainline--0.1

        % ls
        hw.c    main.c  {arch}


注目してほしいことは, init-tree に渡したのは, これから作業するアーカイブでのバージョンの名前であることです. init-tree はツリーのルートに新しいサブディレクトリ ({arch}) を作りました.

{arch} サブディレクトリは、 ここがプロジェクトツリーのルートであることを示します:

        % tla tree-root
        /usr/lord/wd/hello-world

tla は、このツリーがどのアーカイブバージョンに対応するかを知ってます:

        % tla tree-version
        lord@emf.net--2003-example/hello-world--mainline--0.1

最後に, archパッチログ (patch log)と呼ばれるものを作りました. これは init-tree に渡されたバージョンに対するものです:

        % tla log-versions
        lord@emf.net--2003-example/hello-world--mainline--0.1

パッチログが何のためのものかは後の章で説明します。

ツリーの初期化はアーカイブを変更しません

これまでのところ、私たちはソースとしてこのプロジェクトツリーに 印を付けただけです: まだ, アーカイブには何も新しいものは格納してません. やがてそうしますが, その前に, 最初に扱うべき重要な話題があります: それは ソースインベントリ (source inventories)です (訳注: inventory は在庫目録の意). それは次章で論じます.

もし init-tree で間違えたらどうなる?

上の例で、次のようなタイプミスをしたら:

        % tla init-tree hello-world--mainlin--0.1

"乱暴な"解決策は、 単に, {arch} サブディレクトリを削除して最初からやり直すことです。 しかし、この策は望ましくないです: {arch} サブディレクトリは、あなたが削除したくないデータも 含んでるかもしれません. そこで, この機会にもう少し進んだコマンドを紹介しましょう。

init-tree を間違って起動した後は、二つ問題があります. 以下のコマンドの出力は両方とも, 私たちが望むものでは無いです:


        % tla tree-version
        lord@emf.net--2003-example/hello-world--mainlin--0.1

        % tla log-versions
        lord@emf.net--2003-example/hello-world--mainlin--0.1


ツリーの tree-version はいつでも変更できます:

        % tla set-tree-version hello-world--mainline--0.1
        
        % tla tree-version
        lord@emf.net--2003-example/hello-world--mainline--0.1


パッチログは少しややこしくなります。 不必要なログを削除し, 必要なものを追加しなければなりません:

        % tla add-log-version hello-world--mainline--0.1

        % tla log-versions
        lord@emf.net--2003-example/hello-world--mainlin--0.1
        lord@emf.net--2003-example/hello-world--mainline--0.1

        % tla remove-log-version hello-world--mainlin--0.1

        % tla log-versions
        lord@emf.net--2003-example/hello-world--mainline--0.1


警告: remove-log-version は危険なコマンドです: あなたが必要かもしれないパッチログであっても, あなたが求めれば, 削除します. remove-log-version を使うのは, 上述のように, 消されるものが 必要なものでは無いことが確実なときだけにすべきです.

どのように動作するのか -- 新規ツリーの初期化

init-tree は、ソースツリーのルートに {arch} サブディレクトリを作成しました。 そこには何があるでしょう?

        % ls {arch}
        ++default-version       =tagging-method         hello-world

        % cat {arch}/++default-version
        lord@emf.net--2003-example/hello-world--mainline--0.1

        % cat {arch}/=tagging-method
        [... 長い出力 ...]


{arch}/hello-world はかなり深いツリーのルートです。 パッチログはこのツリーに格納されます。

{arch}/=tagging-methodは設定ファイルで、 このツリーに適用する命名規則を設定するために使えます. これについては後の章で説明しています。 (インベントリ命名規則のカスタマイズを参照)

注意: もちろん、{arch}の内容を直接, 手で編集すべきではありません.

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