tla サブコマンド

ヘルプコマンド

ユーザコマンド

この節ではすべてのユーザコマンドについて説明します。それぞ れのコマンドは、アーカイブ(CVSで言うリポジトリ)、プロジェクトツ リー(CVSで言う作業コピー)、そして設定管理領域(~/.arch-param)に対 して読み書きすることがあります。これらの領域に対してアクセスが発 生しないか、読み込みアクセスしか発生しない場合には '-'、書き込み が発生する場合 'w' でこの順に示すことにします。たとえば 'w--' と 書けば、アーカイブに対する書き込みは発生しますが、プロジェクトツ リー、設定管理領域に対する読み書きは発生しません。

プロジェクトツリーコマンド

GNU arch は他のオーソドックスなバージョン管理システムと同 様に、二つのデータが主な役割を演じます。ひとつはアーカイブ、もう ひとつは作業コピーです。アーカイブは、CVS で言うリポジトリのこと です。作業コピーは GNU arch の世界ではプロジェクトツリーと呼ばれ ます。アーカイブには確定した情報が次々と蓄積されていきます。一度 追加された情報を後で修正したり削除したりするコマンドはありません。 一度アーカイブにデータを追加すると、それは永続的に残ります。プロ ジェクトツリーはアーカイブから取り出した情報を加工するための、ま さに作業領域です。作業が一段落したらその結果をアーカイブに追加し ます。これがコミットです。ここでのコマンドは主にプロジェクトツリー の内容を参照したり、その内容を変化させるためのコマンドです。

プロジェクトツリーインベントリコマンド

ここでは GNU arch 独自の概念であるインベントリを扱うための コマンド群を説明します。インベントリは CVS など他のバージョン管 理システムでは、少なくとも明示的には存在しない概念です。インベン トリとは一言で言うと「ファイルの名称が変更されてもその変化 を追跡し続けるためのしくみ」のことです。この仕組みを実現す るためにバージョン管理対象となるファイルのすべてにインベントリid と呼ばれるお互いを区別するキーが割り当てられます。GNU arch はこ のキーを手がかりにして、マージ処理などで名前の違う二つのファイル が同一起源のものであるかどうかを判別します。

パッチセットコマンド

この節のコマンドはある意味で GNU arch コマンドの中でもっと 基本的で、もっとも原始的なコマンドです。いわば GNU arch の心臓と もいうべきコマンド群です。その内容は、二つのツリーの差分を計算し チェンジセットとして求めること、逆にそのように得たチェンジセット を元のツリー、あるいは別の任意のツリーに対して適用するコマンドで す。GNU diff, GNU patch を一般化したコマンドであると考えればよい でしょう。単にツリーと書いたことに注意してください。ここにはまだ 「プロジェクトツリー」の概念も、「リポジトリ 」のような概念も現れません。あるのは生のツリーだけです。こ の節のコマンドは任意のツリーに対して適用することができるものなの です。

アーカイブトランザクションコマンド

このグループのコマンドはアーカイブに新しいバージョン用の場 所を確保したり、そこに実際のデータを初期インポートしたり、その後 におきた修正点をコミットしたりするような、アーカイブに対する書き 込み処理と、逆にすでにアーカイブにある特定のリビジョンの内容をプ ロジェクトツリーの形に取り出したり、あるリビジョンと次のリビジョ ンの差分であるチェンジセットをその固有のディレクトリ形式で抽出し たりするコマンドです。

アーカイブコマンド

このグループのコマンドはアーカイブの構成内容をさまざまな形 で表示させるためのものです。いくつかの例外をのぞいて、基本的には 参照のみのコマンドで、アーカイブに対する書き込みは発生しません。 カテゴリ、ブランチ、バージョンなど、GNU arch の名前空間の中間で 利用される名前に関するコマンドがたくさんありますが、これらは新た に作られた tla abrowse コマンドですべて同じことができます。この ような意味で、tla abrowse コマンドが最も良く利用されます。

パッチログコマンド

このグループは、二つの分岐した開発ライン間でマージする時に 重要になる「パッチログ」というデータ構造を扱うための コマンド群です。マージの際にパッチログを考慮することによって一度 マージしたチェンジセットをもう一度マージしてしまう、いわゆる重複 マージ問題を解決することができます。GNU arch のような分散型のバー ジョン管理システムではさまざまな分岐関係を経由して、同じチェンジ セットが別の道筋で再び現れることがあるので、パッチログは重要なデー タになります。このグループのコマンドはプロジェクトツリーに対する 書き込みを発生するものもありますが、アーカイブに対する書き込みを するものはありません。このためプロジェクトツリーの最後のコミット 後の変更点さえ保存しておけば[19]、実験的に実行してもアーカイブが おかしな状態になることはありません。

マルチプロジェクト設定用コマンド

GNU arch には複数のプロジェクトを組み合わせて一つのまとまっ た大きなプロジェクトを構成する機能があります。これをマルチプロジェ クト機能と言います。たとえば tla や、pika と呼ばれる schema の方 言もこのようなマルチプロジェクトとして管理されています。両方とも hackerlab というライブラリが必要なので、これが一つのバージョンを 構成し、tla も pika もマルチプロジェクトの構成要素の一つとしてこ れを利用しています。

ブランチとマージに関するコマンド

このグループのコマンドは、ある一つの開発ライン [21]を 二つの開発ラインに分岐したり、そのように分岐された起源を同じくす る開発ライン同士の一部分を相手から取り込んだりするためのコマンド です。このグループのコマンドが書き込む対象は基本的にはプロジェク トツリーです。アーカイブに対する書き込みは例外的なものを除いてあ りません。そのため、コミット前にマージの結果を常に確認することが できます。[22]

ローカルキャッシュ関連コマンド

プロジェクトツリーに加えた変更点を元に戻したい場合、アーカ イブに対して最後のリビジョンを再ロードする必要がありますが、これ だとアーカイブとプロジェクトツリーは常にネットワークで接続された 状態になければなりません。これではプロジェクトツリーだけを用意し たコンピュータ上でオフライン開発する場合には不便なので、通常最後 のリビジョンをプロジェクトツリー内の {arch} 領域にもう一セット保 存しておきます。このコピーのことをプリスティンコピーと言います。 このグループのコマンドはプリスティンコピーに対する操作です。ここ でのコマンドもアーカイブに対する書き込みは発生しません。また基本 的にはプロジェクトツリーに対する参照のみですが、add-pristine だ けは書き込みが発生します。しかしこの場合でもキャッシ領域に対する 書き込みなので、作業中のデータが変更されることはありません。

リビジョンライブラリコマンド

チェンジセット指向の GNU arch には一つの大きな欠点がありま す。それは、特定のリビジョンをアーカイブから高速に取り出すことが できないということです。あるリビジョンを得るためにはそのベースリ ビジョン base-0 に対して、引き続くチェンジセットを適用した結果を 計算しなければなりません。リビジョンの数が増えてベースリビジョン からの距離が通るなるにつれてこの処理には時間がかかるようになるか らです。ここでのコマンドは、リビジョンの取得を高速化するためのリ ビジョンライブラリと呼ばれるキャッシュに関するコマンドです。リビ ジョンライブラリは大きな領域が必要になりそうな気がしますが、実際 には Unix のハードリンクの考え方を利用して効率よくリビジョンデー タ内容を表現しています。

このグループのコマンドは既存のアーカイブに対してキャッシュ を計算することが主ですので、もとのアーカイブに対しての書き込みは 発生しません。またプロジェクトツリーに対しても同様です。リビジョ ンライブラリは指定した専用のリビジョンライブラリ用のディレクトリ に保存されるので、その領域の配下には書き込みがおこります。

公開用リビジョンコマンド

GNU arch はアーカイブ名とアーカイブ位置とを独立に定義しま す。これは論理的なアーカイブ名を変更せずにアーカイブ位置のみを変 更することで別の物理的なアーカイブにアクセスできるようにするため です。これはたとえば、あるマスターアーカイブが現在ダウンしていて、 そのかわりにミラーサイトにアクセスするような場合に役立ちます。アー カイブ位置を変更するためのコマンドを使って[23]アーカイブ位置のみを変更すれば、 アーカイブ名を含む、tla を内部で呼び出すような既存のスクリプトに は一切修正を加えることなく作業を継続できます。

アーカイブ位置からアーカイブ名を自動的に求め登録してくれる 仕組みがあると便利です。tla grab はこれを実行してくれます。

スクリプト支援コマンド

GNU arch のアーカイブは複雑な名前空間を持つので、A/C--B--V のような文字列からアーカイブ名、カテゴリ名、ブランチ名、バージョ ン名を抽出したり、そもそも指定された文字列がこの形式になっている かどうかをチェックが必要となる場面が現れます。GNU arch の tla コ マンドを呼び出し結果を利用する高レベルのスクリプトを支援するため にこのアーカイブ名の解析をするためのコマンドを用意しています。こ のグループのコマンドはアーカイブ領域、プロジェクトツリー領域いず れにたいしても書き込みをしません。



[19] tla undo を利用すれ ばよいのでした

[21] 開発ラインとはあるバージョンのことを言います。 A/C--B--V のようなものを思い浮かべてください

[22] tla changes --diffs を利用します

[23] tla register-archive