[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

Third-Party Tools

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=Third-Party%20Tools"
"j-cvsbook/Third-PartyTools"へのコメント(無し)
検索全文Elisp

多くの人々が CVS を強化するプログラムを書いてきました。これらのプロ グラムは CVS 開発チームとは別にそれぞれメインテナが居るので、わたし はこれらをサードパーティツールと呼びます。いくつかを除き、これ らのプログラムの大半は CVS と一緒には配布されていません。この章では、 CVS と一緒には配布されていないけれども便利なサードパーティツールを説 明します。

とてもポピュラーで広く使われている、コマンドライン形式でない、または Unix ベースではない CVS のインタフェースがいくつかありますが (Repository Administration にダウンロードサイトの一覧がありま す)、この章ではそれら大半について議論しません。ポピュラーなので、メー リングリストやニュースグループでいろいろと情報が見つけやすいと思いま す。例外は Emacs pcl-cvs インタフェースで、これはとても便利なのです が、インストールにコツがいるのです。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.37 pcl-cvs -- An Emacs Interface To CVS

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=pcl-cvs%20--%20An%20Emacs%20Interface%20To%20CVS"
"j-cvsbook/A.37pcl-cvs--AnEmacsInterfaceToCVS"へのコメント(無し)
検索全文Elisp

Depends on: Emacs, Elib

URLs:

Authors: Per Cederqvist and Stefan Monnier (current maintainer)

pcl-cvs は、2つある Emacs/CVS インタフェースのうちのひとつで す。もうひとつは Emacs にビルトインされている、ネイティブVC(Version Control)インタフェースです。pcl-cvs は CVS 専用に書かれていて、CVSで いろいろするのにスムースに動作しますので、わたしは pcl-cvs のほうが 好きです。一方、VC はいくつかの違うバックエンドバージョン管理システ ム(RCS と SCCS、CVS もです)上で動くよう設計されているので、CVS 向け に調整されているわけではありません。例えば、VC はディレクトリベース ではなくファイルベースのリビジョン管理インタフェースを提供しています。

pcl-cvs の利点は、たくさんの人が VC を使うより pcl-cvs をダウンロー ドしてインストールする手間をかけているのを補って余りあります。残念な ことに、pcl-cvs には2つ欠点があります: インストールがちょっとややこ しいことと(この節の多くはインストールでつまづきそうなハードルを越え るために費されています)、最近のリリースが少し不安定なことです。

後者の問題は一時的なものではありますが、どのバージョンを使えばよいか という疑問がでてきます。Stefan Monnier は最近 pcl-cvs の保守を引き継 ぎました; 最新のリリース 2.9.6 (上記のリストの最初のURLからどうぞ)は わたしが試してみたときにはちょっとがたぴししている感じでした。すぐに スムーズに動くようになるとは思うのですが、さしあたっては古いバージョ ンを使いたいだろうと思います。バージョン1.05を毎日長い間使い続けて、 とてもよく動いてくれていたので、ここではそのバージョンを書いておこう と思います。幸い、インストール手順はバージョン間で違いはありません。 pcl-cvs を使うことを決めたら、Monnier のダウンロードサイトをチェック して 2.9.6 より新しいバージョンがでているかどうか見てみることをお勧 めします。もしあったら、1.05 に退行してしまう前に試してみてください。

2つのURLがバージョン1.05用であることに気づいたと思います。最初のほう は Per Cederqvist のサイトで、彼は pcl-cvs の古いアーカイブを入手で きるようにしてくれています。しかし、彼のアーカイブがいつまであるかは わからないので、1.05 ディストリビューションを ftp.red-bean.com でも 入手できるようにしておきました。

以降の手順ではバージョン1.05からの例を使用していますが、それより新し いバージョンでも同じように適用できると思います。

A.37.1 Installing pcl-cvs  
A.37.2 Using pcl-cvs  
A.37.3 Error Handling In pcl-cvs  
A.37.4 The Future Of pcl-cvs  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.37.1 Installing pcl-cvs

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=Installing%20pcl-cvs"
"j-cvsbook/A.37.1Installingpcl-cvs"へのコメント(無し)
検索全文Elisp

もし Emacs のインストールやサイトメンテナンスについて普段かかわって いなければ、pcl-cvs のインストール手順はちょっと気が遠くなるような感 じかもしれません。Emacs がどう動いているか、ちょっとした背景を知って いれば役に立つかもしれませんね。

Emacs の最も高レベルな機能は"Emacs Lisp"と呼ばれる言語で書かれていま す(Emacs はそれ自体この言語のインタプリタなのです)。人々は Emacs に 新しい機能を追加するために、Emacs Lisp コードのファイルを配布します。 pcl-cvs はこの言語で書かれており、Elib と呼ばれる、便利 で汎用的な Emacs Lisp 関数に依存しています(一部 Per Cederqvistが書き ましたが、pcl-cvs とは別に配布されています)。

Elib は通常の Emacs ディストリビューションには含まれていませんので (少なくとも FSF Emacs には; XEmacs のことはわたしにはわからないです)、 pcl-cvs を使う前にそれをダウンロードしてインストールする必要がありま す。ftp://ftp.lysator.liu.se/pub/emacs/elib-1.0.tar.gz から入 手できます。インストール手順はパッケージの中に同梱されています。

Elib がインストールできたら、pcl-cvs を作ってインストールする準備が できました。これらの手順はバージョン1.05にも2.xシリーズにも適用でき ます(新しいディストリビューションでは何か変わったことがないか、NEWS と INSTALL ファイルをチェックしてくださいね)。

まず、pcl-cvs をほどきます(バージョン1.05を使っていますが、2.9.6 で も同様です)

 
floss$ zcat pcl-cvs-1.05.tar.gz | tar xvf -
pcl-cvs-1.05/
pcl-cvs-1.05/README
pcl-cvs-1.05/NEWS
pcl-cvs-1.05/INSTALL
pcl-cvs-1.05/ChangeLog
pcl-cvs-1.05/pcl-cvs.el
pcl-cvs-1.05/pcl-cvs.texinfo
pcl-cvs-1.05/compile-all.el
pcl-cvs-1.05/pcl-cvs-lucid.el
pcl-cvs-1.05/pcl-cvs-startup.el
pcl-cvs-1.05/pcl-cvs.info
pcl-cvs-1.05/Makefile
pcl-cvs-1.05/texinfo.tex

次にソースツリーのトップレベルに移動してください:

 
floss$ cd pcl-cvs-1.05/

Makefile がありますね。INSTALL ファイル中の手順に従って、Makefile の 冒頭のパスをいくつか編集したとして、次を実行します:

 
floss$ make install

うまく動いたら、やったね。でも、エラーになることもあります(pcl-cvs のコード自体は移植性があるのですが、インストール手順はそうでないこと もあります)。エラーになったら、こうしてください:

 
floss$ make clean
floss$ make

すべてうまくいったら、これらのコマンドはインストールの重要な部分を達 成する Emacs Lisp ファイルすべてをバイトコンパイルすることによって。 (バイトコンパイルは人間に読める Emacs Lisp コードのファイル(.el ファ イル)を、コンパクトで実効性のある形式(.elc ファイル)に変換します。 Emacs は .elc ファイルをロード及び実行する、よりよい性能で、素の .el ファイルよりも。)

バイトコンパイルの段階が成功したとして話を進めます。バイトコンパイル が成功しなくても気にしなくて構いません: .elc ファイルは贅沢品であっ て、必須のものではありません。.elc だとちょっとパフォーマンスがよく なるだけで、生の .el を使っても pcl-cvs の実行には支障ありません。

make intall が失敗した場合、次のステップでは Emacs Lisp (.el でも .elc でもかまいません)を、自動的にロードされるディレクトリへ移します。 Emacs はローカルにインストールされた Lisp 用のディレクトリをシステム 上に持っています。そのディレクトリをみつけるには(そのディレクトリに は `default.el' があるはずです)、次の順で調べて下さい:

  1. /usr/share/emacs/site-lisp/
  2. /usr/local/share/emacs/site-lisp/
  3. /usr/lib/emacs/site-lisp/
  4. /usr/local/lib/emacs/site-lisp/

site-lisp ディレクトリを見つけたら、そこへ Lisp ファイルを全部コピー して下さい(root になる必要があります):

 
floss# cp -f *.el *.elc /usr/share/emacs/site-lisp/

最後のステップでは、pcl-cvs のエントリポイントについて Emacs に指示 し(主なエントリポイントは cvs-update 関数)、オンデマンドで pcl-cvs コードをロードできるようにします。Emacs は起動時にいつも default.el ファイルを読みますので、そこへ pcl-cvs のエントリポイントの一覧を書 きましょう。

pcl-cvs には幸い、default.el に書くべき内容が示してあります。単純に、 pcl-cvs-startup.el の内容を default.el にコピーして下さい(または自分 の .emacs でよいです、自分のためだけにインストールしたんなら)。そし て Emacs を再起動してください。

info ディレクトリに .info ファイルをコピーして、dir ファイルの目次に pcl-cvs を追加してもいいでしょう。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.37.2 Using pcl-cvs

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=Using%20pcl-cvs"
"j-cvsbook/A.37.2Usingpcl-cvs"へのコメント(無し)
検索全文Elisp

インストールさえ済めば、pcl-cvs は非常に使いやすいものです。 cvs-update 関数を実行すると、pcl-cvs はバッファをひとつ立ち上げ、作 業コピー内で変更または更新されたファイルを示すます。ここからコミット したり、 diff をとったりできます。

cvs-update が主なエントリポイントなので、何よりも先に、それに便利な キーシーケンスを割り当てることをお勧めします。わたしは .emacs で Ctrl+c v に割り当てるよう設定しています:

 
(global-set-key "\C-cv" 'cvs-update)

キーを割り当てないなら、M-x cvs-update (Esc-x cvs-update とも言います)とタイプして起動することもできます。

起動されると、cvs-update はカレントバッファのファイルのあるディレク トリにいるかのように cvs update を実行します。つまり、そのディレクト リ内においてコマンドラインで cvs update とタイプしたかのように、とい うことです。Emacs のなかでどのようなものが見えるかの例を示します:

 
PCL-CVS release 1.05 from CVS release $Name:  $.
Copyright (C) 1992, 1993 Per Cederqvist
Pcl-cvs comes with absolutely no warranty; for details consult the manual.
This is free software, and you are welcome to redistribute it under certain
conditions; again, consult the TeXinfo manual for details.
 Modified ci README.txt
 Modified ci fish.c
---------- End ----

ローカルに変更されたファイルが2つあります(pcl-cvs のバージョンによっ てはファイルのあるサブディレクトリが表示されることもあります)。理屈 から言うと次のアクションは、ファイルを1つまたは2つ両方ともをコミット することですが、各行に ci とあるのはそのことを指しています。1つだけ コミットする場合、その行にカーソルを移動して、c とタイプしてく ださい。ログメッセージバッファが出てきて、書きたければそこでログメッ セージをタイプすることができます(実際にログメッセージが編集できるの は、コマンドラインより pcl-cvs が優れている主な点です)。書けたら Ctrl+c Ctrl+c とタイプしてコミットを完了して下さい。

複数のファイルを共通のログメッセージで一度にコミットしたい場合、まず コミットしたいファイルに m でマークをつけてください。マークしたもの はファイルの隣にアスタリスクが表示されます。

 
PCL-CVS release 1.05 from CVS release $Name:  $.
Copyright (C) 1992, 1993 Per Cederqvist
Pcl-cvs comes with absolutely no warranty; for details consult the manual.
This is free software, and you are welcome to redistribute it under certain
conditions; again, consult the TeXinfo manual for details.
* Modified ci README.txt
* Modified ci fish.c
---------- End ----

どこでもかまいませんので c をタイプしてください、マークしたファイル すべてに(またはマークしたファイルのみに)適用されます。ログメッセージ を書き、前と同じように Ctrl+c Ctrl+c でコミットして下さい。

dをタイプするとファイルの(またはマークしたファイルの) cvs diff を実行します。f をタイプするとそのファイルを Emacs に読み込み、 編集できるようにします。コマンドは他にもあります; アップデートバッファ で Ctrl+h m とタイプすると、他にどんな事ができるかわかると思い ます。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.37.3 Error Handling In pcl-cvs

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=Error%20Handling%20In%20pcl-cvs"
"j-cvsbook/A.37.3ErrorHandlingInpcl-cvs"へのコメント(無し)
検索全文Elisp

pcl-cvs は歴史的に、 CVS から来たエラーやメッセージを扱うやりかたが ちょっと変です(最新のバージョンでは多分直してあります)。CVS から受け 取ったメッセージを pcl-cvs が知らないと、ヒステリーになって pcl-cvs の作者にバグレポートを送るメールバッファを立ち上げます。pcl-cvs の知 らない CVS メッセージは、コンフリクトの起こるマージ関連のもので、あ まり普通には起こりませんが、確実に時々起こるのです。

pcl-cvs が突然メールバッファを起こしてもパニックにならないでください。 バッファ内容を注意して読んで下さい、問題となった CVS からの出力がそ のバッファの中のどこかに書いてあります。マージのようであれば、メール バッファを削除して、cvs-update を再度実行してください。今度は多分う まくいくでしょう、なぜなら CVS はマージのメッセージを出力しないから です(マージは既に起こりましたからね)。

(Update: この問題は pcl-cvs の最近のバージョンでは解決されているよう なので、ここに書いてある注意は多分無視することになるでしょう)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.37.4 The Future Of pcl-cvs

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=The%20Future%20Of%20pcl-cvs"
"j-cvsbook/A.37.4TheFutureOfpcl-cvs"へのコメント(無し)
検索全文Elisp

pcl-cvs があんまりメンテされてなくて、リスキーな投資であるかのような 印象を与えてしまったかもしれませんが、不安定なのは一時的なことです。 Stefan Monnier は信頼できるメインテナです(この章を書いている間、彼と 何度か連絡を取りましたが、いつもすぐ答えてくれました; 彼はバージョン 2.9.6 のバグをいくつか、既に進捗させています)。これが出版される頃に は確信を持って 2.9.7 かそれ以降をダウンロードできるでしょう。

実際、今ちょうどこのトピックについて、pcl-cvs の元メンテナ Greg Woods から嬉しいメールが来ました、許可を得て引用します:

 
From: woods@most.weird.com (Greg A. Woods)
Subject: Re: pcl-cvs maintenance status, stability of recent "release"s?
To: kfogel@red-bean.com
Date: Sun, 29 Aug 1999 18:59:19 -0400 (EDT)

[...]
今 Stefan のリリースをしばらく使ってみて、わたし、自分のブランチを捨
ててしまいました。

2.9.6 バージョンの変なクセを除いて、彼は PCL-CVS において素晴らしい
仕事をたくさんしています。今わたしこれを毎日使っているんですが、かな
り使いやすいです(今の CVS と一緒に使うと、以前 CVS ディストリビュー
ションに入っていたのより、断然使いやすいです! ;-)。

わたしの FTP サイトに、pcl-cvs.README を置きました。そこに、そのへん
のファイルはえらい古いんだよ(少なくともインターネット時間ではね! ;-)、
と指摘して、Stefan の FTP サイトへのポインタを示しておきました。

[...]

この後のメールで Greg が言うには、FSF が Emacs の次のリリース(20.5) に pcl-cvs を含めることを検討しているから、上に書いたインストールア ドバイスの大半が obsolete になってしまうよね、ということでした。あー あ。フリーソフトについていくのって大変。時々ね。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.38 cvsutils -- General Utilities For Use With CVS

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=cvsutils%20--%20General%20Utilities%20For%20Use%20With%20CVS"
"j-cvsbook/A.38cvsutils--GeneralUtilitiesForUseWithCVS"へのコメント(無し)
検索全文Elisp

Depends on: Perl

URLs:

Authors: Tom Tromey (原作者), Pavel Roskin (現メインテナ)

普通(いつもではないです) cvsutils と呼ばれている一組の小さな プログラムは、CVS の作業コピー内でオフライン操作を行います。

オフライン操作とは、リポジトリにアクセスせずに行われる操作のことです。 次にリポジトリにアクセスするまで作業コピーの一貫性を保ったまま操作し ます。リポジトリまでのネットワーク接続が遅かったり、信頼性に欠けてい たりする場合には、オフラインでの動作は非常に便利です。

バージョン 0.1.4 の README ファイルには次のように書いてあります:

 
CVSU のホームページは
http://www.typhoon.spb.ru/~proski/cvsu/
です。

このアドレスは1999年の年末に変わる予定です。

この節の最初に並べてある red-bean.com FTP サイトに cvsutils のコピーを置いておきました。cvsutils の新しいホームページのアドレス が公開されたら、それも red-bean.com のほうに置きます。

cvsutils のプログラムの一覧を、だいたい便利な順(わたしの考えでですよ) に並べました。便利なほど最初に来ています。偶然ですが、これは安全な順 でもあります。

これらのユーティリティーのうちのいくつかは通常の操作において、作業 コピー中のローカルな変更やファイルを失うので、安全性が問題になります。 ですから、これらのユーティリティを使う前に説明をよく読んで下さい。

このドキュメントはバージョン 0.1.4 現在において正確です。それ以降の バージョンでは、README ファイルを読んで最新の情報をチェックしてくだ さい。

A.38.1 cvsu  
A.38.2 cvsdo  
A.38.3 cvschroot  
A.38.4 cvsrmadm  
A.38.5 cvspurge  
A.38.6 cvsdiscard  
A.38.7 cvsco  
A.38.8 cvsdate  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.38.1 cvsu

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=cvsu"
"j-cvsbook/A.38.1cvsu"へのコメント(無し)
検索全文Elisp

Danger level: None

Contacts repository: No

ディスク中のファイルのタイムスタンプと、CVS/Entries に記録されたタイ ムスタンプを比較することによって、オフラインの cvs update を実現しま す。どのファイルがローカルに変更されていて、どのファイルが CVS の管 理下にないかを知ることができます。 cvs update とは違って、 リポジトリから作業コピーへ変更を持ってきたりはしません。

いろんなオプションがありますが、cvsu はたいがいの場合オプションなし で起動されます:

 
floss$ cvsu
? ./bar
? ./chapter-10.html
M ./chapter-10.sgml
D ./out
? ./safe.sh
D ./tools

左側のコードは cvs update と同様です、D がディレクトリを意味 するところだけ違います。この例は chapter-10.sgml がローカルに変更さ れています。例には、cvsu が瞬間的に実行されたことは表示されていない ですね。わたしの遅いモデム回線では、通常の cvs update だと30秒くらい かかるのです。

次のようにタイプするとオプション一覧が見られます

 
floss$ cvsu --help



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.38.2 cvsdo

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=cvsdo"
"j-cvsbook/A.38.2cvsdo"へのコメント(無し)
検索全文Elisp

Danger level: Low to none

Contacts repository: No

このコマンドは cvs add と cvs remove の作業コピーへの効果をシミュレー トします。リポジトリにはアクセスしません。もちろん、リポジトリに更新 を反映させるには、コミットする必要がありますが、少なくとも add と remove コマンドに関してはこの方法でスピードアップできます。使い方は 次のとおり:

 
floss$ cvsdo add FILENAME

または

 
floss$ cvsdo remove FILENAME

To see a list of further options, run:

 
floss$ cvsdo --help



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.38.3 cvschroot

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=cvschroot"
"j-cvsbook/A.38.3cvschroot"へのコメント(無し)
検索全文Elisp

Danger level: Low

Contacts repository: No

このコマンドは作業コピーをいじって新しいリポジトリを指すようにするこ とにより、リポジトリの移動を処理します。リポジトリが新しい場所に大量 にコピーされたときに便利です。リビジョンに変化はなく、作業コピーの全 ての CVS/Root (と、もしかすると CVS/Repository) ファイルを変更して新 しいリポジトリを指すようにします。cvschroot を使うと、新しい作業コピー をチェックアウトし直すよりもだいぶ速いです。あと、ローカルの変更を失 わずに済むのも利点です。

Usage:

 
floss$ cvschroot NEW_REPOS

For example:

 
floss$ cvschroot :pserver:newuser@newhost.wherever.com:/home/cvs/myproj



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.38.4 cvsrmadm

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=cvsrmadm"
"j-cvsbook/A.38.4cvsrmadm"へのコメント(無し)
検索全文Elisp

Danger level: Low to medium

Contacts repository: No

作業コピー中の全ての CVS/ 管理サブディレクトリを削除します。あとには cvs export で作成したようなディレクトリツリーが残ります。

cvsrmadm を使ってもローカルの変更は失われませんが、その作業コピーは 作業コピーとは言えなくなります。

注意して使って下さい。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.38.5 cvspurge

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=cvspurge"
"j-cvsbook/A.38.5cvspurge"へのコメント(無し)
検索全文Elisp

Danger level: Medium

Contacts repository: No

作業コピー中の CVS 管理下にない全てのファイルを削除します。CVS の管 理下にあるファイルのローカルな変更を取り消したりはしません。

注意して使って下さい。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.38.6 cvsdiscard

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=cvsdiscard"
"j-cvsbook/A.38.6cvsdiscard"へのコメント(無し)
検索全文Elisp

Danger level: Medium to high

Contacts repository: Maybe

これは cvspurge の逆のコマンドです。未知のファイルを消してローカルな 変更をそのままにするのではなく、cvsdiscard はローカルな変更を全て取 り消して(リポジトリから取ってきた新鮮なコピーで置き換わります)、未知 のファイルはそのまま置いておきます。

特に注意して使って下さい。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.38.7 cvsco

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=cvsco"
"j-cvsbook/A.38.7cvsco"へのコメント(無し)
検索全文Elisp

Danger level: High

Contacts repository: Maybe

cvspurge と cvsdiscard のあわさったコマンドです。ローカルな変更を全 て取り消し、未知のファイルを作業コピーから削除します。

偏執狂のような注意をもって使って下さい。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.38.8 cvsdate

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=cvsdate"
"j-cvsbook/A.38.8cvsdate"へのコメント(無し)
検索全文Elisp

このスクリプトは明らかに未完成で、多分完成することはないでしょう。 (詳しくは README ファイルを参照してください。)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.39 cvs2cl -- Generate GNU-Style ChangeLogs

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=cvs2cl%20--%20Generate%20GNU-Style%20ChangeLogs"
"j-cvsbook/A.39cvs2cl--GenerateGNU-StyleChangeLogs"へのコメント(無し)
検索全文Elisp

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 はカレントディレクトリを暗黙の引数として取りま すが、ファイル名を指定すればそれらについて動作します。以下に最もよく 使われるオプションのうちいくつかについて説明します。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.40 cvslock -- Lock Repositories For Atomicity

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=cvslock%20--%20Lock%20Repositories%20For%20Atomicity"
"j-cvsbook/A.40cvslock--LockRepositoriesForAtomicity"へのコメント(無し)
検索全文Elisp

Depends on: C compiler for installation; nothing for runtime

URL: ftp://riemann.iam.uni-bonn.de/pub/users/roessler/cvslock/

このプログラムは CVS リポジトリをロックします(読みか書きかのいずれか)。 CVS にもロックを遵守させるため、CVS と同じやりかたでロックを行います。 このツールは例えば、リポジトリ全体のコピーを取る必要がある時に、コミッ トや他の人のロックファイルを受け付けたくないような場合に役立ちます。

cvslock のディストリビューションパッケージは非常によくできているので、 通常の GNU のインストール手続きに従ってインストールできます。インス トールセッションのログを示します:

 
floss$ zcat cvslock-0.1.tar.gz | tar xvf -
cvslock-0.1/
cvslock-0.1/Makefile.in
cvslock-0.1/README
cvslock-0.1/COPYING
cvslock-0.1/Makefile.am
cvslock-0.1/acconfig.h
cvslock-0.1/aclocal.m4
cvslock-0.1/config.h.in
cvslock-0.1/configure
cvslock-0.1/configure.in
cvslock-0.1/install-sh
cvslock-0.1/missing
cvslock-0.1/mkinstalldirs
cvslock-0.1/stamp-h.in
cvslock-0.1/cvslock.c
cvslock-0.1/cvslock.1
cvslock-0.1/snprintf.c
cvslock-0.1/cvslssh
cvslock-0.1/VERSION
floss$ cd cvslock-0.1
floss$ ./configure
 ...
floss$ make
gcc -DHAVE_CONFIG_H -I. -I. -I.   -g -O2 -c cvslock.c
gcc -g -O2  -o cvslock  cvslock.o  
floss$ make install
 ...
floss$ 

(make install のところでは root になる必要があることに注意して下さい)

さてこれで cvslock は /usr/local/bin/cvslock としてインストールされ ました。起動する際には通常の CVS と同様、 -d か $CVSROOT 環境変数で リポジトリを指定できます。そのディレクトリ及びその下のサブディレクト リすべてがロックされます。この例ではサブディレクトリはありませんので、 ロックファイルは1つだけ作成されます:

 
floss$ ls /usr/local/newrepos/myproj/b-subdir/
random.c,v
floss$ cvslock -d /usr/local/newrepos  myproj/b-subdir
floss$ ls /usr/local/newrepos/myproj/b-subdir/
#cvs.rfl.cvslock.floss.27378  random.c,v
floss$ cvslock -u -p 27378 -d /usr/local/newrepos  myproj/b-subdir
floss$ ls /usr/local/newrepos/myproj/b-subdir/
random.c,v
floss$ 

ロックのクリア時(-u は unlock という意味です)、-p 27378 を指定する必要があったことに注意して下さい。cvslock はロック ファイルの名前を作るときに Unix のプロセス ID を使用して、ロックがユ ニークであることを保証しているからです。たとえロックインスタンスが1 つしかなくても、アンロックの際にはどのインスタンスを削除するか指定し て下さい。-p フラグでどれが前のインスタンスかを指定し、あとでクリア できるようにします(-p フラグは -u つきでも -u なしでも指定できます)。

ちょっとリポジトリ内でファイルシステムを直接いじる作業をしたいなと思 う場合は、-s オプションを指定して cvslock に新しいシェルをさせること ができます。現在のシェル内の $SHELL 環境変数で、どのシェルを 起動するかが決まります:

 
floss$ cvslock -s -d /usr/local/newrepos myproj

シェルを抜けるまでロックがかかったままになり、そのロックは抜けたとき に自動的に削除されます。 -c オプションで、リポジトリをロックしてコマン ドを実行することもできます。-s と同様に、コマンドを開始する前にロッ クがかかり、コマンドが終了したら削除されます。以下の例では、全てのロッ クファイル一覧を表示する間だけ、リポジトリがロックされます。

 
floss$ cvslock -c 'find . -name "*cvslock*" ' -d /usr/local/newrepos myproj
cvslock: '/usr/local/newrepos/myproj' locked successfully.
cvslock: Starting 'find . -name "*cvslock*" -print'...
./a-subdir/subsubdir/#cvs.rfl.cvslock.floss.27452
./a-subdir/#cvs.rfl.cvslock.floss.27452
./b-subdir/#cvs.rfl.cvslock.floss.27452
./#cvs.rfl.cvslock.floss.27452
floss$ find /usr/local/newrepos/myproj -name "*cvslock*" -print
floss$ 

コマンド(-c オプションの引数)は、指定したリポジトリディレクトリを輪ー キングディレクトリとして実行されます。

デフォルトでは読みのロックを生成します。書きのロックを指定したい場合 には -W オプションを使って下さい。(-R で読みのロックを指定できますが、 デフォルトですからね。) 終わったら必ず全ロックを削除して、他のユーザ の CVS プロセスを必要もないのに待たせたりしないで下さい。

cvslock はリポジトリのあるマシン上で実行しなければならないことに注意 して下さい。リモートリポジトリは指定できません。(詳細については man cvslock を実行してください、これは make install でインストールされたマニュアルページです。)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.41 Other Packages

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=Other%20Packages"
"j-cvsbook/A.41OtherPackages"へのコメント(無し)
検索全文Elisp

CVS には他にもたくさんサードパーティのパッケージがあります。そのうち のいくつかへのポインタを下に記します。

CVSUp (Part Of The FreeBSD Project)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=CVSUp%20(Part%20Of%20The%20FreeBSD%20Project)"
"j-cvsbook/CVSUp(PartOfTheFreeBSDProject)"へのコメント(無し)
検索全文Elisp

CVSUp は CVS リポジトリのミラーに役立つ特別なビルトインサポートのあ る、有能で汎用性のあるミラリングツールです。FreeBSD オペレーティング システムではマスタリポジトリから変更を配布するためにこれを使用してい るので、ユーザは容易に最新を追いかけることができます。

CVSUp の一般的な情報については、 http://www.polstra.com/projects/freeware/CVSup/ を参照して下 さい。

FreeBSD に特化した使い方については、 http://www.freebsd.org/handbook/synching.html#CVSUP を参照して下さい。

CVSWeb: A Web Interface To CVS Repositories

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=CVSWeb:%20A%20Web%20Interface%20To%20CVS%20Repositories"
"j-cvsbook/CVSWeb:AWebInterfaceToCVSRepositories"へのコメント(無し)
検索全文Elisp

CVSWeb は CVS リポジトリを閲覧するためのウェブインタフェースです。正 確には "RCSWeb" というべきかもしれません、実際にはリポジトリ内のリビ ジョンを直接閲覧したり、ログメッセージを見たり diff を取るのですから。

わたしにとっては特に素晴しいインタフェースのようには思えないのですが、 にもかかわらず、これは十分直観的でたくさんのサイトがそれを使っている ということを認めなければなりません。

このソフトウェアの原作者は Bill Fenner ですが、現在最も活発に開発が 進んでいるバージョンは Henner Zeller のもの http://linux.fh-heilbronn.de/~zeller/cgi/cvsweb.cgi/ のようです。

Fenner の原作のサイトはこちら http://www.freebsd.org/~fenner/cvsweb/ 、Cyclic Software の CVSWeb 状況概要はこちら http://www.cyclic.com/cyclic-pages/web-cvsweb.html です。

最後に、活動中の CVSWeb を見たいなら、こちら http://sourceware.cygnus.com/cgi-bin/cvsweb.cgi/ が良い例になるでしょう。

The CVS contrib/ Directory

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=The%20CVS%20contrib/%20Directory"
"j-cvsbook/TheCVScontrib/Directory"へのコメント(無し)
検索全文Elisp

Repository Administration で述べたとおり、たくさんのサードパー ティツールが CVS とともに配布されており、それらは contrib/ ディレク トリに入っています。どのツールを CVS と一緒に配布するかを決定する正 式は規則は知らないのですが、広く使われているサードパーティツールの多 くを集め、見つけやすいように contrib/ に入れる努力は継続中だと思いま す。そういうツールを探すもっともよい方法は、contrib/ の中を見て、い ろいろな CVS のウェブサイトを見て、それからメーリングリストで聞くこ とです。



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

A.42 Writing Your Own Tools

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=j-cvsbook&node=Writing%20Your%20Own%20Tools"
"j-cvsbook/A.42WritingYourOwnTools"へのコメント(無し)
検索全文Elisp

CVS はときどき、即興で作られた標準のわけのわからないコレクションのよ うに見えるかもしれません。RCS 形式あり、さまざまな出力形式(history, annotate, log, update などなど)あり、リポジトリ管理ファイル形式いく つかあり、作業コピー管理ファイル形式あり、クライアント/サーバプロト コルありロックファイルプロトコルあり…(痺れてきた? まだ続けられるよ、 知ってると思うけど)。

幸い、これらの標準はリリース間で一貫したままですから、もしあなたが CVS とともに動くようなツールを書こうとするなら、動く標的に命中させな くちゃいかんようなことにはなりませんから御心配なく。

info-cvs@gnu.org メーリングリストに数人、すべての内部標準に 非常に詳しい人々がいます(この本を書くにあたり、2,3人に助けてもらいま した)。CVS ディストリビューションについてくるドキュメントもあります (とりわけ doc/cvs.texinfo, doc/cvsclient.texi, doc/RCSFILES)。実装や 動作についてのどんな質問に対しても最後の手段として CVS のソースコー ド自身があります。

これらすべて、あなたは自由に使えるのです。尻込みする理由はありません。 自分の CVS ライフを簡単にするようなユーティリティを考えついたら、さ あ書きましょう。他の人もそれを欲しがっている可能性が高いですよ。CVS 自身への変更とは違い、スタンドアロンの外部ユーティリティはとても素早 く広く配布でき、作者にすぐフィードバックが返ってきますし、より早くユー ザ全員にバグフィクスができます。


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]