Node: History -- A Summary Of Repository Activity, Next: , Previous: Getting Rid Of A Working Copy, Up: Advanced CVS



History - A Summary Of Repository Activity

Repository Administration で、cvs history コマンドについて少し 述べました。このコマンドはそのリポジトリで行われた全ての checkout, commit, update, rtag, release の概略を表示します(少なくとも CVSROOT/history ファイルが作成されてログの記録が始まって以降のものは)。 この概略の形式と内容は、いろいろなオプションによって変えることができ ます。

まずはリポジトリ中でログが記録できるようになっていることを確認します。 リポジトリ管理者は最初に history ファイルが存在することを確かめなく てはなりません:

     floss$ cd /usr/local/newrepos/CVSROOT
     floss$ ls -l history
     ls: history: No such file or directory
     floss$
     

ない場合には次のように作成して下さい:

     floss$ touch history
     floss$ ls -l history
     -rw-r--r--   1 jrandom   cvs           0 Jul 22 14:57 history
     floss$
     

この history ファイルはリポジトリを使用する人全員が書き込めるように なっていなければなりません。そうしないとそのファイルを変更する CVS コマンドを実行するたびにエラーが起きるようになってしまいます。ワール ドライタブルにするのが一番簡単でしょう:

     floss$ chmod a+rw history
     floss$ ls -l history
     -rw-rw-rw-   1 jrandom   cvs           0 Jul 22 14:57 history
     floss$
     

リポジトリが cvs init により作成されたのであれば history ファイルは既に存在しているはずですが、パーミッションの問題は解決する 必要があるかもしれません。

以降の例では、しばらくの間 hisotry ログ記録がされていたと仮定します。 history ファイルにデータが蓄積されるだけの時間がたっています。(?)

cvs history の出力は少々ぶっきらぼうです(これは多分、人間が読むため というよりはプログラムが解釈するためにこうなっているのでしょうけれど、 ちょっと勉強すれば読めます)。とりあえず走らせてみて出力を見てみましょ う:

     paste$ pwd
     /home/qsmith/myproj
     paste$ cvs history -e -a
     O 07/25 15:14 +0000 qsmith  myproj =mp=     ~/*
     M 07/25 15:16 +0000 qsmith  1.14 hello.c    myproj == ~/mp
     U 07/25 15:21 +0000 qsmith  1.14 README.txt myproj == ~/mp
     G 07/25 15:21 +0000 qsmith  1.15 hello.c    myproj == ~/mp
     A 07/25 15:22 +0000 qsmith  1.1  goodbye.c  myproj == ~/mp
     M 07/25 15:23 +0000 qsmith  1.16 hello.c    myproj == ~/mp
     M 07/25 15:26 +0000 qsmith  1.17 hello.c    myproj == ~/mp
     U 07/25 15:29 +0000 qsmith  1.2  goodbye.c  myproj == ~/mp
     G 07/25 15:29 +0000 qsmith  1.18 hello.c    myproj == ~/mp
     M 07/25 15:30 +0000 qsmith  1.19 hello.c    myproj == ~/mp
     O 07/23 03:45 +0000 jrandom myproj =myproj= ~/src/*
     F 07/23 03:48 +0000 jrandom        =myproj= ~/src/*
     F 07/23 04:06 +0000 jrandom        =myproj= ~/src/*
     M 07/25 15:12 +0000 jrandom 1.13 README.txt myproj == ~/src/myproj
     U 07/25 15:17 +0000 jrandom 1.14 hello.c    myproj == ~/src/myproj
     M 07/25 15:18 +0000 jrandom 1.14 README.txt myproj == ~/src/myproj
     M 07/25 15:18 +0000 jrandom 1.15 hello.c    myproj == ~/src/myproj
     U 07/25 15:23 +0000 jrandom 1.1  goodbye.c  myproj == ~/src/myproj
     U 07/25 15:23 +0000 jrandom 1.16 hello.c    myproj == ~/src/myproj
     U 07/25 15:26 +0000 jrandom 1.1  goodbye.c  myproj == ~/src/myproj
     G 07/25 15:26 +0000 jrandom 1.17 hello.c    myproj == ~/src/myproj
     M 07/25 15:27 +0000 jrandom 1.18 hello.c    myproj == ~/src/myproj
     C 07/25 15:30 +0000 jrandom 1.19 hello.c    myproj == ~/src/myproj
     M 07/25 15:31 +0000 jrandom 1.20 hello.c    myproj == ~/src/myproj
     M 07/25 16:29 +0000 jrandom 1.3  whatever.c myproj/a-subdir == ~/src/myproj
     paste$
     

There, isn't that clear?

出力を調べる前に、起動時のオプション(-e と -a)に注意して下さい。 history を実行するときには大抵、どのデータをどのように表示するか指定 するオプションをつけると思います。この点においてこのコマンドは他の CVS のコマンドとは違います。他のコマンドは普通、オプション無しでも役 に立ちます。この例の2つのフラグはそれぞれ、everything (起こったイベン トの全種類を表示) と all (全てのユーザについて) という意味です。

history コマンドが他のコマンドと違う点は他にもあって、普通このコマン ドは作業コピー内で実行しますが、コマンド出力はその作業コピーのプロジェ クトの情報に限定されません。リポジトリ内の全てのプロジェクトの全ての イベント履歴を表示します。作業コピーは履歴データをどのリポジトリから 取ってくればよいかを CVS に指定するために使われるだけです。(上の例で はリポジトリの履歴データは myproj プロジェクトのものしかない ので、これで全てなのです)

出力の形式は通常このようです:

     CODE DATE USER [REVISION] [FILE] PATH_IN_REPOSITORY ACTUAL_WORKING_COPY_NAME
     

コード文字は CVS のさまざまなオペレーションを指します Table 6.1 を参 照してください。

オペレーション(チェックアウトのような)は各ファイルではなくプロジェク ト全体についてのもので、リビジョンやファイル名は省略されています。イ コール記号の間にリポジトリ内パスが書いてあります。

history コマンドの出力はコンパクトなように、他のプログラムが解釈し易 いようにデザインされていますが、CVS still gives you a lot of control over its scope and content. Table 6.2 にあるオプションで、どんなタイ プのイベントを報告して欲しいかコントロールします。

     Table 6.1  コード文字の意味
     
     Letter	        Meaning
     ======          =========================================================
     O		チェックアウト
     T		タグ
     F		リリース
     W		アップデート(ユーザファイルがない、エントリファイルから削除)
     U		アップデート(変更されていないユーザファイルを上書き)
     G		アップデート(変更されたユーザファイルにマージ、成功)
     C		アップデート(変更されたユーザファイルにマージ、コンフリクト)
     M		コミット(ファイル変更)
     A		コミット(ファイル追加)
     R		コミット(ファイル削除)
     E		エクスポート
     
     Table 6.2  イベントタイプでフィルタリングするオプション
     
     Option	        Meaning
     ==========      =========================================================
     -m MODULE	MODULE に起こった履歴イベントを表示
     -c		コミットイベントを表示
     -o		チェックアウトイベントを表示
     -T		タグイベントを表示
     -x CODE(S)	CODE タイプのイベントを全て表示(OTFWUGCMARE から1つ以上)
     -e		全タイプのイベント表示。以上。レポートして欲しいイベン
     		トのタイプを選択したあと、Table 6.3 に示したオプション
     		でさらにフィルタリングすることもできます。
     
     
     Table 6.3  ユーザでフィルタリングするオプション
     
     Option	        Meaning
     ==========      =========================================================
     -a		全ユーザのアクションを表示
     -w		この作業コピー内のアクションのみ表示
     -l		ユーザが取ったそのアクションの最後の日付を表示
     -u USER 	USER の記録を表示