The Hackerlab at regexps.com

変更点のチェックイン

up: arch Meets hello-world
next: 以前のリビジョンの取得n
prev: 最初のリビジョンのインポート

もしこれまでの例題に習ってるなら, 新しいアーカイブを作成し, そのアーカイブ内で hello-world プロジェクトを作りました。 そして, hello-world の最初のバージョンをアーカイブへインポートしました.

リビジョン管理システムを使用したプログラム作業として最も一般的なものは、一組の変更を コミット (commit) することです。 本章では、その作業の最も基本的な方法を見ていくことになります。

warld != world\n

hello-world のソースを見ると、綴りの誤りと改行のバグに気づくかもしれません:

        % cat hw.c

        #include <stdio.h>

        void
        hello_world (void)
        {
          (void)printf ("hello warld");
        }


明らかに, これは hello warld ではなく, hello world のはずです. それに, もし規約に従うつもりならば, メッセージの後に改行が多分必要です. さて、これらのバグをいま直しましょう.

ログメッセージについてのフリーな助言

Free advice is worth what you pay for it. -- anonymous.

これらのバクを直す計画です: ソースを変更してバグを直します. そして arch に頼んでバグを直すのに必要な変更をアーカイブに記録します. 二番目の工程で新しいリビジョンをアーカイブに作ります.

前に注意したように、新しいリビジョンを作成する場合はいつも、 そのリビジョンに対してログメッセージを提供する必要があります (最初のログファイルの作成を参照)。

私たちのオモチャの例で修正しようとするバグは大変つまらないです. 一方, 現実の世界では, それらはもっと込み入ったものでしょう. あなたには選択肢があります: 全ての修正を終えるまで待ってから, 変更点を記述するログメッセージを書くことができます. あるいは, 作業しながらログメッセージを書くこともできます.

ここで, フリーな助言です: 作業しながらログメッセージを書きなさい. 言いかえれば、ハックするにつれノートをとりなさい. tla コマンドで言えば, これの意味するところは, バグを修正する工程を次のコマンドで始めなさい. ということです:

        % cd ~/wd/hello-world

        tla make-log
        ++log.hello-world--mainline--0.1--lord@emf.net--2003-example


そして新しいログファイルを編集するときは、こんな感じにしてください:

        Summary: Fix bugs in the "hello world" string
        Keywords: 

このように Summary: は来たる変更でのあなたの意図することを説明します. 作業を行うにつれ, ログメッセージの本体を埋めることができます.

編集/更新のログサイクル

これらのバグが実際よりももっと複雑なものであるとして, 作業をどのようにするかを述べます:

スペルの誤りの修正 warldworld へ変更します。

ログメッセージの更新 ログファイルへメモを追加します:

        Summary: Fix bugs in the "hello world" string
        Keywords: 

        Spell "world" correctly (not "warld").


改行の誤りを訂正 メッセージに改行を追加します.

再びログメッセージを更新 ログファイルへメモを追加します:

        Summary: Fix bugs in the "hello world" string
        Keywords: 

        Spell "world" correctly (not "warld").

        Add a newline to the hello world message.


しまった -- 何したんだっけ?

そして、これらの複雑なバグの修正の長く困難な作業を終えました. それを公開する前に作業をもう一度再検討することは、よい考えですよね?

ご心配なく、arch は助けになります:

        tla what-changed --diffs
        [....]
        *** patched regular files
 
        **** ./hw.c
        [....] 
             @@ -4,7 +4,7 @@
              void
              hello_world (void)
              {
             -  (void)printf ("hello warld");
             +  (void)printf ("hello world\n");
              }
        [....]



おー! これでよく分かります。アーカイブにその変更を記録する番です。

アーカイブへの変更点の格納

そこで、アーカイブにこれらの変更点を記録しましょう。

もし、あなたが私たちのフリーな助言 ( ログメッセージについてのフリーな助言 を参照 ) に従わなかったら, 今がログメッセージを書くときです (ヒント: tla make-log ).

アーカイブのあなたの変更点を保存するには, 単にこうします:

        % tla commit
        [....]

commit が完了したのち, アーカイブには、新しいリビジョンが存在します:

        % tla revisions hello-world--mainline--0.1
        base-0
        patch-1

または、もっと詳細に:

        % tla revisions --summary hello-world--mainline--0.1
        base-0
            initial import
        patch-1
            Fix bugs in the "hello world" string

プロジェクトツリーのパッチログは同様に更新されてます:

        % tla logs hello-world--mainline--0.1
        base-0
        patch-1

        % tla logs --summary hello-world--mainline--0.1
        base-0
            initial import
        patch-1
            Fix bugs in the "hello world" string


それはどのように動作するか -- 新しいリビジョンの commit

commit はアーカイブに対して何をするのでしょうか?

        # 作業しているバージョンのディレクトリに cd する:
        # 
        % cd ~/{archives}
        % cd 2003-example/
        % cd hello-world/
        % cd hello-world--mainline/
        % cd hello-world--mainline--0.1/
        % ls
        % ls
        +version-lock   =README         base-0          patch-1

patch-1 サブディレクトリは新しくできたものです:

        % cd patch-1

        % ls
        +revision-lock
        hello-world--mainline--0.1--patch-1.patches.tar.gz
        log


いつものように, ログファイルは、あなたが書いたもので, 付加的なヘッダが追加されてます:

        % cat log
        Revision: hello-world--mainline--0.1--patch-1
        Archive: lord@emf.net--2003-example
        Creator: Tom (testing) Lord <lord@emf.net>
        Date: Mon Jan 27 22:26:13 PST 2003
        Standard-date: 2003-01-28 06:26:13 GMT
        Summary: Fix bugs in the "hello world" string
        Keywords: 
        New-files: \
          {arch}/hello-world/ [....] /patch-log/patch-1
        Modified-files: hw.c
        New-patches: \
          lord@emf.net--2003-example/hello-world--mainline--0.1--patch-1

        Spell "world" correctly (not "warld").

        Add a newline to the hello world message.



.patches.tar.gz ファイルは チェンジセット (changeset) と呼ばれるものです。 それは、base-0patch-1 リビジョンの間の相異点としてあなたが変更した点を記述します. 後の章ではチェンジセットの性質に関してもっと習うでしょう。 今のところ, チェンジセットは次のように考えて良いです: もし最近の変更の前の base-0 リビジョンと, あなたの最近の変更の後の同じツリーを, 比較するのに使われるものならば, これは diff -r の出力と似たようなものです (または, ある arch の利用者に言わせれば, "ステロイド上のパッチセット (patch set on steroids)" です).

プロジェクトツリーの中では:

        % cd ~/wd/hello-world

commitコマンドは二つの作用がありました. まず, {arch}/hello-world の下にログファイルを追加しました。 次に、{arch}/++pristine-trees を変更して, base-0 リビジョンの代わりに patch-1 リビジョンのキャッシュコピーを格納しました.

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