The Hackerlab at regexps.com

マルチツリープロジェクトとコンフィギュレーション管理

up: arch Meets hello-world
next: リビジョンライブラリの基本
prev: 変更点の慎重な選択 (cherrypicking)

メタプロジェクト (meta-projects) を定義できます. これは arch によってばらばらに追跡される個々のプロジェクトの組合せです. これでできることは, 大規模なプロジェクトを、より小さくて, より扱いやすい部分に分解することです. それぞれはお互い独立に開発することができます. また, それらは, 複数のメタプロジェクトの構成要素になれます.

これをするには, config specs を書きます. config specs はメタプロジェクトの内容と, それらをソースツリー下でどのように配置すべきかを定義します.

たとえば, 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 を使います:

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

        % cd dists

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

一旦メタプロジェクトツリーを持つ場合は, 他に便利なコマンドは:

     cat-config : マルチプロジェクトの設定 (config) についての情報を出力

そのコマンドを一回使うと、他のコマンドを繰り返して適用できる サブプロジェクトの一覧を生成します:

        % tla cat-config CFGNAME | awk '{print $1}' | xargs ...

さらに、オプション --snap は, リビジョンではなくバージョンでサブプロジェクトを指定する設定に適用するのに 便利です. それはプロジェクトツリーを調べて, 複数の LOCATION のそれぞれで実際にどのリビジョンが インストールされているかを確かめます. そして, これらの REVISION を正確に指定した新しい config を書きます。 これが有用なのは, 例えば, これから配布物にする特定のリビジョンを記録するのにです.

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