ノード: cvs2cl -- Generate GNU-Style ChangeLogs, 次: cvslock -- Lock Repositories For Atomicity, 前: cvsutils -- General Utilities For Use With CVS, 上: Third-Party Tools
Depends on: Perl
URL: http://www.red-bean.com/~kfogel/cvs2cl.shtml
cvs2cl.pl は cvs log の出力を圧縮し、GNU スタイルのChangeLog 形式に 変換します。ChangeLog とは、人間が読みやすいようデザインされた形式で、 プロジェクトの変更履歴を時系列順に並べたドキュメントです(以下の例を 参照のこと)。
cvs log
コマンドの問題は、ファイルごとの出力しかされなく
て、別々のファイルに同じログメッセージがあることや、ほぼ同じ時刻であ
ることとかがわからない、つまり、それらのリビジョンが一度にコミットさ
れたということがわからない、という点です。なので、プロジェクトの概要
を知るためにログ出力を読むのは絶望的な作業です。実質、同時にひとつの
ファイルの履歴しか見ることはできません。
cvs2cl.pl が生成した ChangeLog では各ログメッセージはひとつに統一さ れているので、一群のファイルを一度にコミットしたら、そのコミットは1 つのエントリとして示されます。例えば:
floss$ cvs2cl.pl -r cvs log: Logging . cvs log: Logging a-subdir cvs log: Logging a-subdir/subsubdir cvs log: Logging b-subdir floss$ cat ChangeLog ... 1999-08-29 05:44 jrandom * README (1.6), hello.c (2.1), a-subdir/whatever.c (2.1), a-subdir/subsubdir/fish.c (2.1): Committing from pcl-cvs 2.9, just for kicks. 1999-08-23 22:48 jrandom * README (1.5): [no log message] 1999-08-22 19:34 jrandom * README (1.4): trivial change ... floss$
最初のエントリは4つのファイルが "Committing from pcl-cvs 2.9, just for kicks." というログメッセージとともに一度にコミットされたことを示 しています。(-r はそのログメッセージに関連する各ファイルのリビジョン 番号を示すためのオプションです)
CVS と同様、cvs2cl.pl はカレントディレクトリを暗黙の引数として取りま すが、ファイル名を指定すればそれらについて動作します。以下に最もよく 使われるオプションのうちいくつかについて説明します。
h
, --Show
使い方を表示します(全オプション一覧含む)。
-r
, --revisions
出力にリビジョン番号を示します。-b とともに指定された場合、 BRANCHNAME.N という風にブランチが示されます。N はブランチ上のリビ ジョンです。
-t
, --tags
タグ(シンボル名)のあるリビジョンにはそのタグを示します。
-b
, --branches
ブランチ上のリビジョンにはそのブランチ名を示します。(-r も参照のこと)
-g OPTS
, --global-opts OPTS
OPT を cvs にグローバル引数として渡します。cvs2cl.pl は内部的に cvs を起動して生のログデータを取得しているのですが、OPTS はその時に cvs に渡されます。静かに動作させ、圧縮を使用したい場合、次のようにします:
floss$ cvs2cl.pl -g "-Q -z3"
-l OPTS
, --log-opts OPTS
-g と同様ですが、 OPTS はグローバルオプションではなくコマンドオプション として渡されます。6/26から8/15の間に発生したコミットの ChangeLog を 生成るには、次のようにします:
floss$ cvs2cl.pl -l "'-d1999-07-26<1999-08-15'"
二重にクオートされていることに注意して下さい。cvs2cl.pl 中で cvs log
を起動するシェルが、<
をリダイレクトと解釈してしまうので Unix
では必要なのです。従って、引数の一部としてクオートを渡さねばならず、
そうしようと思うと全体をもう一度クオートで囲まなければなりません。
-d
, --distributed
各サブディレクトリそれぞれに、そのサブディレクトリでのコミットのみを カバーする ChangeLog を生成します(cvs2cl.pl が起動されたディレクトリ とその下の全てのサブディレクトリをカバーする1つの ChangeLog を生成す るのに対し)。