regexps.com
この章と後の章で, arch
を使った簡単なプロジェクトを, 立ちあげ運営する方法を示します. 例題は
hello
world
プログラムです.
第一歩として, プロジェクトの名前となる, 一般的なカテゴリを選びます. この例では次の名前を使います:
hello-world
arch
で勧めることは, 一つのプロジェクトでの作業を別々の
ブランチ (branches)
に分けることです.
大まかにいえば, ブランチは一つのプロジェクトの作業を複数の大きく独立した作業に分割するためのからくりです。
例えば, hello-world
プロジェクトに二つの要求があるとします:
1) 第一の要求は, 古き良き風情の hello-world
を定期的にリリースすることです. そこでは, 単純なバグの修正, プログラムの移植, 小規模の機能追加をします.
2) もう一つの要求は, hello-world
用のグラフィカルユーザインタフェースの作業を始めることです. 完成まで一年くらいかかる見込みです.
これら二つの作業は並行に進めたいですが, お互いを割り込み合わないようにしたいです. 例えば, GUI用のコードは, 安定するまで, 定期的なリリースに入れたくないです.
このような場合, ブランチを使います: ひとつは正規リリース用 (mainline ブランチ), そしてもう一方は GUI 機能用 (gui ブランチ)です.
ブランチの使途は他にも色々あり, そのいくつかはあとで説明するでしょう.
いまのところ, 私たちは一つのブランチだけが必要です:
hello-world
の正式な最新版ソースのブランチで, 次のように呼びます:
hello-world--mainline ^^^^^^^^^^^ ^^^^^^^^ | | | ブランチ名 カテゴリ名
カテゴリとブランチの名前が二つのダッシュ (--) によって分離されることに注意して下さい。 一般的に, カテゴリとブランチ名の必須条件は次のとおりです: 文字, 数字, そしてダッシュからのみ構成されること; 文字から始まること; それ自身が二つのダッシュを含まないこと; そして, ダッシュで終わらないこと.
最後に, あなたが作業する hello-world
のバージョンの, バージョン番号を選択しなければなりません。
そして, そのバージョンをアーカイブに作成する必要があります.
arch
でのバージョン番号は, プロジェクトでの
特定の"スナップショット"やリリースの名前ではありません.
しかし, その概念と関係します.
代わりに, バージョン番号は
開発ライン (development line)
の名前です: これは特定のリリースを作成する間に作成した一連の更新のことです.
この例では, 次の名称を使います:
hello-world--mainline--0.1 ^^^ | バージョン番号
バージョン番号は常に, ピリオドを挟んだ正の数であることに注意してください.
名前を選んだので, この名前で使うためのアーカイブを準備する番です:
% tla archive-setup hello-world--mainline--0.1
上のコマンドの後で, アーカイブに問い合わせて, 何をしたかを確認できます:
% tla categories hello-world
% tla branches hello-world hello-world--mainline
% tla versions hello-world--mainline hello-world--mainline--0.1
arch
に不慣れな人はアーカイブの名前空間の厳格さに時折驚かされます.
よく尋ねられる二つの質問は次のものです:
なぜカテゴリ, ブランチ, バージョンがあるのか?
なぜ自分のプロジェクトの名前を任意の文字列にできないのか?
これに答えるのに大事な点は, リビジョン管理システムは司書であることです.
その職務の一つは, プロジェクトとソースコードの非常に大きな集合物のなかを, 人々が遊泳し探索するのを助けることです.
そのような検索を実際に行なうために, arch
は目録生成 (cataloging) のシステムを定義します:
すなわちカテゴリ, ブランチ, バージョンです.
(リビジョン管理とはなにかを参照)
これは図書館の本の目録生成システム, 例えば, 図書館のあらゆるものを階層的にカテゴリ付けする, デューイ十進分類法に似ています. これは与えられた要素がどこに格納されているかを記述する一貫した方法であり, さまざまな要素の関連を示すことで検索を支援します。 例えば, あるブランチは同じカテゴリにある別のブランチに密接な関係を持つのは 確からしいことでしょう. より高いメジャーバージョン番号を持つバージョンは, 恐らく, より低いメジャーバージョン番号と同じブランチ内のものより新しい作業内容を含みます.
この類推は完全ではありません:
デューイのような文献分類システムがカテゴリやサブカテゴリについて公式のリストに基づく一方で, arch
では利用者自身がカテゴリ名を決めます.
それでも, デューイのように, arch
の命名規則は, 関連する項目をひと括りにする考えを基本として, それらを探索し遊泳することを容易にします.
また, デューイが, 人々が本をどのように捜すかの最も一般的なパターンを捕えることを意図したように,
arch
は, 人々がソース・アーカイブをどのように捜すかの最も一般的なパターンを捕えることを意図しています。
archive-setup
コマンドが実際にすることは何でしょうか?
概念的には非常に単純です:
アーカイブの中に新しいディレクトリを作成します:
% tla whereis-archive lord@emf.net--2003-example /home/lord/{archives}/2003-example % cd `tla whereis-archive lord@emf.net--2003-example`
カテゴリはトップレベルのディレクトリです:
% ls =meta-info hello-world
ブランチはその次のレベルです:
% ls hello-world hello-world--mainline
バージョンは第三番目です:
% ls hello-world/hello-world--mainline hello-world--mainline--0.1
バージョンはそれ自体がディレクトリです:
% ls hello-world/hello-world--mainline/hello-world--mainline--0.1/ +revision-lock +version-lock
注意: ロックファイル (例えば +revision-lock
) は arch の内部で使用します。
新しいデータをアーカイブに加えるときに, arch
は単純に mkdir
するわけではありません。
代わりに, アーカイブを一貫性を保持しつつ注意深く変更します.
これは, たとえどんなコマンドが同時に発行されたとしても,
あるいはコマンドが実行中に kill されたとしてもです.
regexps.com