第26章 複数のツリーのあるプロジェクトと設定管理

archによって独立に管理される個別のプロジェクトの組み合わせである "メタプロジェクト"を定義することができます。これは大きな一つのプロジェクトをもっと 管理が簡単な部分に分割し、それぞれが他の部分とは独立に開発でき、それぞれが一つ以上の メタプロジェクトの一部になることができる、といった状況を認めます。

これは、"設定状況"を書き下すことによってできるようになります。設定状況は メタプロジェクトの内容を定義し、どのようにしてソースツリー中で編成することが できるか、を定義するものです。

たとえば arch 自身はメタプロジェクトです。そのソースツリー は以下のようなものが含まれています:

        dists/
          dists/src/
            dists/src/arch/
            dists/src/file-utils/
            dists/src/ftp-utils/
            dists/src/hackerlab/
            dists/src/shell-utils/

そのようなそれぞれのディレクトリはプロジェクトツリーのルートです (それは、"{arch}"という名前のサブディレクトリを持ちます。).

最上位ディレクトリ dists はまたconfigsという 名前のサブディレクトリを含みます。そのサブディレクトリ中に、メタプロジェクトの設定 ファイルがあります。たとえば:

        dists/
          dists/configs/
            dists/configs/regexps.com/  # Tom's configuration files
              dists/configs/regexps.com/devo.arch
              dists/configs/regexps.com/release-template.arch

ここにはdevo.archの内容があります:

     # 
     # Check out an arch distribution from the devo branches.  
     # Latest revisions.
     #

     ./src                   lord@regexps.com--2002/package-framework--devo
     ./src/arch              lord@regexps.com--2002/arch--devo
     ./src/file-utils        lord@regexps.com--2002/file-utils--devo
     ./src/ftp-utils         lord@regexps.com--2002/ftp-utils--devo
     ./src/hackerlab         lord@regexps.com--2002/hackerlab--devo
     ./src/shell-utils       lord@regexps.com--2002/shell-utils--devo
     ./src/text-utils        lord@regexps.com--2002/text-utils--devo

ファイル中の (非空白、非ブランクの) 行は以下の形式を持ちます:

        LOCATION             CONTENTS

それは、メタプロジェクトを作るためにCONTENTSによって示される リビジョンを取得し、それをLOCATIONにインストールする ことを意味します。CONTENTS フィールドはブランチで あっても(ブランチの最後のバージョンの最後のリビジョンを 取得することになります)、バージョンであっても(そのバージョンの最後のリビジョンを 取得することになります)、リビジョン名であっても(正確にそのリビジョンを取得 することになります)かまいません。

arch ツリーの全体をチェックアウトするため、最初に devoからdists をチェックアウトし、 次にbuild-configを使います:

        % larch get dists--devo dists
        [....]

        % cd dists

        % larch build-config regexps.com/dists.devo
        [....]

メタプロジェクトツリーを手にいれたあとでは、以下のような便利なコマンドが 使えるようになります:

               update-config : update a multi-project tree
               replay-config : replay a multi-project tree

これらのコマンドは、メタプロジェクトにあるサブツリーに対して再帰的にupdate または replay を実行します。

もう一つの設定管理コマンドがあります:

        % larch record-config GENERAL-CONFIG SPECIFIC-CONFIG

それは設定ファイル GENERAL-CONFIGを読み込みます。 それはプロジェクトツリーを調べて、実際にどのリビジョンがLOCATIONs にインストールされているかを調べます。それから、新しい設定ファイル SPECIFIC-CONFIG に書き込みますが、これは CONTENTS を含み、さらにそのファイルは REVISIONSを正確に指定 します。例えばこれはある配布に移ろうとしている特定のリビジョンの記録のために 便利です。