第22章 パッチログとプロジェクトツリー履歴

目次

プロジェクトツリーはパッチログを持っています
どのように動作するか — whats-missing
変更履歴とツリーAncestryの概念
変更履歴
ツリー Ancestry
自動化されたチェンジログ

前の章で、ブランチとマージについて学び始めました。どのようにしてプロジェクトの複数のブランチを 管理したり変更を適用するために whats-missing, update, そして replay のようなコマンドを使うことができるのかを見てきました。

この章では"パッチログ"について少し説明します: それはプロジェクトツリーの履歴 を管理するのに利用される仕組みです。それは複雑なマージに利用することが できる履歴の一部も含んでいます。

以前の章で最初にパッチログが出て来たことを思い出してください。 (たとえば、プロジェクトツリーを最初に初期化した時です。 第8章参照)。この章では パッチログについてより詳しく説明していきます。

プロジェクトツリーはパッチログを持っています

アーカイブ中の全ての最初のインポート、タグリビジョン、そしてチェンジセットリビジョン はそれに関連したログメッセージを持つことを思い出してください。そのメッセージは importcommitのようなコマンドに明示的に渡す ヘッダとボディー、そしてarchによって自動的に生成されるヘッダからなります。

プロジェクトツリーが最初にアーカイブにインポートされるとき、新しいリビジョンの ためのパッチログエントリがツリーに追加されます。 コミット処理全体の一部として、commitが起こると、新しいリビジョン のログエントリがツリーに追加されます。tagコマンドによって 作成されたリビジョンをgetする場合、そのタグリビジョンのための パッチログエントリを含んでいることがわかるでしょう。

パッチログエントリは蓄積されます。それで例えばそれぞれのコミット は新しいログエントリを追加し、以前のすべてのログエントリは保存されたままです。 それぞれのタグリビジョンはそのタグのためのエントリのみを含むのではなく、 タグづけされたリビジョンから受け付いたすべてのログエントリを含んでいます。

前の例に戻って、アリスとボブのpatch-2リビジョンを見てみましょう:

        % cd ~/wd

        [... remove directories from earlier examples ...]

        % larch get -A lord@emf.net--2003-example \
                    hello-world--mainline--0.1--patch-2 \
                    hw-AnB-2

        [...]

        % cd ~/hw-AnB-2

最初にパッチログは arch のバージョン名でソートされることに注意 してください。このツリーは一つのバージョンのみからのログを持っています:

        % larch logs
        lord@emf.net--2003-example/hello-world--mainline--0.1

そのログ中で、最初のインポートのログと、ふたつのチェンジセットがあります:

        % larch log-ls -A lord@emf.net--2003-example \
                       --summary \
                       hello-world--mainline--0.1
        base-0
            initial import
        patch-1
            Fix bugs in the "hello world" string
        patch-2
            commented return from main

特にこのようなログエントリの一つについて調べてみます:

        % larch cat-log -A lord@emf.net--2003-example \
                        hello-world--mainline--0.1--patch-2
        Revision: hello-world--mainline--0.1--patch-2
        Archive: lord@emf.net--2003-example
        Creator: Tom (testing) Lord <lord@emf.net>
        Date: Wed Jan 29 12:46:50 PST 2003
        Standard-date: 2003-01-29 20:46:50 GMT
        Summary: commented return from main
        Keywords: 
        New-files: \
          {arch}/[...]/hello-world--mainline--0.1/[...]/patch-log/patch-2
        Modified-files: main.c
        New-patches: \
          lord@emf.net--2003-example/hello-world--mainline--0.1--patch-2

        Added a comment explaining how the return from main
        relates to the exit status of the program.

例えば、patch-2チェンジセットはmain.cを修正し、 新しいファイルとログエントリ自身を追加しました。(上の出力中ではその名前は省略して あります)。

別の例はキャンディスのツリーからのものを考えると良いです。 彼女はpatch-1リビジョンでアリスとボブのツリーから分岐する ためにタグを使ったことを思い出してください。それで:

        % cd ~/wd

        % larch get -A lord@emf.net--2003-candice \
                    hello-world--candice--0.1--patch-2 \
                    hw-C-0

        [...]

        % cd ~/hw-C-0

        % larch logs
        lord@emf.net--2003-candice/hello-world--candice--0.1
        lord@emf.net--2003-example/hello-world--mainline--0.1

        % larch log-ls  -A lord@emf.net--2003-example \
                        --summary \
                        hello-world--mainline--0.1
        base-0
            initial import
        patch-1
            Fix bugs in the "hello world" string


        % larch log-ls  -A lord@emf.net--2003-candice \
                        --summary \
                        hello-world--candice--0.1
        base-0
            tag of \
              lord@emf.net--2003-example/hello-world--mainline--0.1--patch-1