Arch 入門

独りのプロジェクトで arch を使う.

(英語版 (オリジナル)) (ロシア語版) (ドイツ語版) (ブラジル系ポルトガル語版)

このミニガイドでは arch の基本的な機能を簡単に見渡します. これは arch tutorial (日本語訳) を補うものです. はじめにこれを読むことで, 他のミニガイドへ進んだり, arch tutorial へ進んだりする助けになるでしょう.

アーカイブ (archive) を作成する

arch を使い始める前に, アーカイブ (archive)を 準備する必要があります. これはファイルシステム上のディレクトリで, そこにプロジェクトのリビジョン (revision) を格納します. これはローカルなファイルシステム上に無くても構いません. よそにアーカイブを作成して, HTTP, FTP, SFTP 等でアクセスすることができます. ここでは話を簡単にするため, ローカルなアーカイブを使います.

CVSに慣れてる人なら, アーカイブは CVSROOTに似たようなものと考えてよいです.

アーカイブを準備するのは簡単です:

john@shell% tla make-archive john@doe.com--myarchive ~/myarchive
john@shell% tla my-default-archive john@doe.com--myarchive

この意味を説明します: まず, アーカイブ名 john@doe.com--myarchive に対応する アーカイブディレクトリ ~/myarchive を作成します. つぎに, これをデフォルトのアーカイブにします.

うまく行ったかどうかを確かめるため, arch に利用可能なアーカイブの一覧を 尋ねてみます:

john@shell% tla archives
lord@emf.net--2003b
    http://arch.quackerhead.com/~lord/archives/lord@emf.net--2003b
john@doe.com--myarchive
    /home/john/myarchive

アーカイブは john@doe--myarchive の他にもありますね. これは archの最新版が置いてあるとこです. こっちはこのガイドでは使いません.

アーカイブ名は次の形式です:

email@address--archive-name

電子メールアドレスは本物である必要はありません. 単にアーカイブを一意にするためのものです. アーカイブ名はこの規約に従わなければなりません.

ID を設定する

あなたの初めてのプロジェクトをインポート (import) できるようになる前の, 最後の段階です. ここで IDを設定する必要があります. このために my-id コマンドを使います:

john@shell% tla my-id "John Doe <john@doe.com>"

arch はこれを記憶します (デフォルトアーカイブを記憶してるのと同じです). IDは changelog等で使われます.

初めてのプロジェクトをインポートする

アーカイブを準備したので, あなたの初めてのプロジェクトをインポートする準備ができました. このために, ソースが置いてあるディレクトリで作業します. このディレクトリを作業ディレクトリ (working directory)とかプロジェクトツリー (project tree)と呼びます. ほんとに単純な, "hello world"プロジェクトが例題です:

john@shell% cd $wd/hello
john@shell% ls
hello.py  world.py

プロジェクトに名前を付ける

プロジェクトをインポートする第一歩は, それに名前を付けることです. このプロジェクトを次のように呼ぶことにします:

hello--dev--1.0

これは三つの部分からできていて, それらを二つのハイフン(--)で繋げたものです.

arch ではこの命名フォーマットが強制されます. これは始めはちょっとなじめないかもしれません. しかし, あなたの下で成長することになる, ソフトウェアの特定のリビジョン (revision)を参照するのに便利な方法になるでしょう.

プロジェクトに名前を付けるために, ディレクトリを, arch の作業ディレクトリとして初期化します. コマンドは init-tree を使います:

john@shell% tla init-tree hello--dev--1.0
john@shell% ls
hello.py  world.py  {arch}

{arch} ディレクトリが加わったことに注目してください. ここにプロジェクトの名前や, アーカイブについての情報等が格納されます.

ファイルに tag を付けて追加する

デフォルトでは, arch は 明示的なタグ付け法 (explicit tagging method) を使います. つまり, どのファイルをアーカイブに追加するかを arch に明示的に伝える必要があります. このためにファイルにタグを付け(tagging)ます. この例では, 全てのファイルを含めたいとします.

john@shell% tla add *.py

この操作が成功したかどうか確かめるには, ファイルの在庫目録 (inventory) を調べます:

john@shell% tla inventory
S ./hello.py
S ./world.py

ファイルがタグ付けされていると, S と印が付き (source の略), そうでなければ, U と印が付きます (unrecognised, つまり, 未認識の略) :

john@shell% tla inventory
U ./hello.py
U ./world.py

最初のリビジョンをインポートする

作業ディレクトリをアーカイブにインポートする準備ができました. これから二つの段階を踏む必要があります. まず, 関係する カテゴリ(category), ブランチ(branch), リビジョン(revisions) を, アーカイブに作成します. そして, import を実行します. ここでは, tla 1.1 の新機能を使って, 両者を同時に行います:

john@shell% tla import --setup
* creating category john@doe.com--myarchive/hello
* creating branch john@doe.com--myarchive/hello--dev
* creating version john@doe.com--myarchive/hello--dev--1.0
* imported john@doe.com--myarchive/hello--dev--1.0

おめでとう! 例題をなぞってきたならば, 難しいところは片づきました. 以下では, arch でどれだけ楽できるかがわかります.

普段の仕事

変更点は?

プロジェクトをインポートしたので, プロジェクトを変更し始めることができます. John Doe が hello.py に新しい機能 - 文字列 hello を, 1回ではなく5回印字する - を加えたとしましょう. アーカイブに変更をコミット (commit)する前に, 辺りを見回して, これが正しいか, そして, テスト用のコードを残してないかを確認したいとします.

このために, arch が提供するコマンドは what-changed です:

john@shell% tla what-changed
M  ./hello.py

これでわかることは, hello.py が変更 (M は modify の頭文字) されたことです. 変更点を正確に見渡すために, John はアーカイブにあるバージョンと変更後のものとの 差分を必要とします. このために, what-changed に引数を加えることができます:

john@shell% tla what-changed --diffs
M  ./hello.py

* modified files

--- orig/hello.py
+++ mod/hello.py
@@ -1,3 +1,4 @@
 #!/usr/bin/env python

-print "hello"
+for i in range(5):
+    print "hello"

この意味は, 一行が除去され, 二行が加えられた. ということです.

注意点は, これらのコマンドが最近のアーカイブ版の, キャッシュされたコピー - プリスティンツリー (pristine tree) と呼ばれます - を使ったことです (pristine (純粋な) というのは, 最近のバージョンで変更が加わってないからです). これはネットワークから切り離された環境での作業で特に有用です. 変更点を知るのに, アーカイブに接続する必要はありません.

急ぎのコミット

John は変更点が予想通りなので満足です. そこで変更点をアーカイブへコミットしたいとします. このために, arch が提供するコマンドは commit です:

john@shell% tla commit -L "print hello 5 times instead of 1"
M  ./hello.py
* update pristine tree (john@doe.com--myarchive/hello--dev--1.0--base-0
                        => hello--dev--1.0--patch-1)
* commited john@doe.com--myarchive/hello--dev--1.0--patch-1

注目点は, 引数 -L です. これを使うと, コマンドラインでログメッセージ (log message) を指定できます. これは急ぎの変更で便利です. しかし, 時には詳細なログメッセージが必要です. このため, コミットする前に ログメッセージを書く方法があります.

ログファイルを付けてコミットする

沢山の変更があって, 変更点を入念に記録する必要がある場合, コミットする前にログメッセージを作れると便利です. このために, arch の make-log コマンドがあります:

john@shell% tla make-log
/home/john/wd/hello/++log.hello--dev--1.0--john@doe.com--myarchive

john@shell% cat ++log.hello--dev--1.0--john@doe.com--myarchive
Summary:
Keywords:

これは空のログメッセージを作成し, そのファイル名を印字します. よくやるのは, ファイル作成と同時に編集することで, こんな具合にします:

john@shell% $EDITOR $(tla make-log)
Warning: not overwriting existing log file
<エディタが立ちあがる>

ファイルの冒頭にある summary の行に変更点を簡潔に記述します - 普通は 60字程度より短かくです. keywords の欄はあまり使われません. keywords 以降の部分は ログメッセージ本体として扱われます. いくら長くても構いません.

John がログメッセージを以下のように書いたとしましょう:

Summary: print hello 5 times instead of 1
Keywords:

Upon a request from a user, I have made hello print 5 times instead of 1. You
can still obtain the old functionality by running hello | tail -1. Comments
on this change are welcome.

変更を commit する場合, 引数 -L は省けます:

john@shell% tla commit
M  ./hello.py
* update pristine tree (john@doe.com--myarchive/hello--dev--1.0--base-0
                        => hello--dev--1.0--patch-1)
* commited john@doe.com--myarchive/hello--dev--1.0--patch-1

変更点一覧を入手する

アーカイブの変更点一覧を手に入れるために, revisions コマンドが使えます. arch は log-ls コマンドも提供しています. これは作業ディレクトリの変更点一覧を示します. 複数の人が同じブランチで作業してる場合, 作業ディレクトリ中の変更点がアーカイブでの変更点より少ないこともありえます. しかし, ここではその場合は考えません.

これらの変更点の記述は パッチログ (patch log) に含まれてます. パッチログは電子メールの文に似ていて, 内容は, 変更点の記述や日付等です. パッチログはアーカイブと作業ディレクトリ の両方に格納されてるので, もしラップトップ上で作業してて, アーカイブにアクセスできないときでも, ツリーに適用された変更点一覧の全てを入手できます.

revisions コマンドはこんな感じで使います:

john@shell% tla revisions --summary
base-0
    initial import
patch-1
    print hello 5 times instead of 1

独り開発者のブランチでは, log-ls は常に同じものを印字します. ここで, いろいろ引数を試してみます:

john@shell% tla log-ls --summary --creator
base-0
    John Doe <john@doe.com>
    initial import
patch-1
    John Doe <john@doe.com>
    print hello 5 times instead of 1

作者名を見てください. これは以前に my-id コマンドで与えたものです.

Changelog を生成する

上で説明した patch loglog-lsrevisions コマンド の出力よりも多くの情報を記述します. これらを取得するために, arch は changelog コマンド を 提供します:

john@shell% tla changelog
# do not edit -- automatically generated by arch changelog
# arch-tag: automatic-ChangeLog--john@doe.com--myarchive/hello--dev--1.0
#

2003-07-13 09:36:33 GMT John Doe <john@doe.com> patch-1

    Summary:
      print hello 5 times instead of 1
    Revision:
      hello--dev--1.0--patch-1

    Upon a request from a user, I  have made hello print 5 times instead of 1.
    You can  still obtain the  old functionality by  running hello |  tail -1.
    Comments on this change are welcome.

    modified files:
     ./hello.py


2003-07-13 08:58:18 GMT John Doe <john@doe.com> base-0

    Summary:
      initial import
    Revision:
      hello--dev--1.0--base-0

    
    (automatically generated log message)

    new files:
     ./hello.py ./world.py

changelog コマンドはリポジトリから変更点一覧を入手します. まだ全然作業をしてない場合でも, 完全な変更点一覧を表示します.

アーカイブからリビジョンを取得する

John による新しいバージョンの hello が, それを使ってた別のプログラムで壊れたと, John は報告を受けました. その問題を John の update したもので調べるため, 昔のリリースにアクセスしたいとします.

(すでに忘れてしまっている)変更点を確認することから始めます:

john@shell% cd
john@shell% tla revisions --summary hello--dev--1.0
base-0
    initial import
patch-1
    print hello 5 times instead of 1

revisions コマンドへのプロジェクト名の与え方に注意してください. これは, 作業ディレクトリを離れていて, 関係するプロジェクトが無いためです.

John は一覧を見て, base バージョンが必要だと気付きました (もし, もっと沢山のパッチを選ぶ余地があれば, より以前のパッチを選ぶかもしれません). base-0 リビジョンを取得するため, 以下のコマンドを使うことができます:

john@shell% tla get hello--dev--1.0--base-0
* from import revision: john@doe.com--myarchive/hello--dev--1.0--base-0
* making pristine copy
* tree version set john@doe.com--myarchive/hello--dev--1.0

これは hello--dev--1.0--base-0 という名前のディレクトリを作ります. 別の名前を指定することもできます:

john@shell% tla get hello--dev--1.0--base-0 mydir

最新のリビジョンが必要なら, てっとりばやい方法があります. バージョン指定子 (version specifier) (base-0, patch-1, 等)は次のように省けます:

john@shell% tla get hello--dev--1.0              

Damien Elmes -

邦訳: TANAKA Atushi -