名前¶
VCS::Lite - 最低限のバージョンコントロールシステム
概要¶
use VCS::Lite;
# diff
my $lit = VCS::Lite->new($fh1);
my $lit2 = VCS::Lite->new($fh2);
my $difftxt = $lit->diff($lit2);
print OUTFILE $difftxt;
# patch
my $lit3 = $lit->patch($fh3);
$lit3->save('~me/patched_file');
# merge
my $lit4 = $lit->merge($lit2,$lit3);
$lit4->save('~me/merged_file');
説明¶
このモジュールは、バージョンコントロールシステムと、一般に関連のある機能を提供します。 ですが、バージョンコントロールシステムを必要も、実装もしません。 用途は、wiki や、ドキュメントマネージメントシステムや設定マネージメントを含みます。
VCS::Lite は、Algorithm::Diffモジュールを使います。 Algorithm::Diffは、基本的な、diffing、pathing、merging の機能を提供します。
new¶
The underlying object of VCS::Lite is an array. The members of the array can be anything that a scalar can represent (including references to structures and objects). The default is for the object to hold an array of scalars as strings corresponding to lines of text. If you want other underlying types, it is normal to subclass VCS::Lite for reasons which will become apparent,
VCS::Lite の基礎をなすオブジェクトは配列です。 配列のメンバはスカラーが表現できるものなら何でもあり得ます(構造やオブジェクトへのリファレンスを含みます)。 デフォルトでは、オブジェクトは、テキストの行に一致する文字列としてのスカラーの配列です。 もし、他の基礎をなす型がいいなら、VCS::Lite のサブクラスにするのが普通です。 そうすれば、一目瞭然になるからです。
new が取り得るパラメタの形式のリストです。
my $lite = VCS::Lite->new( \@foo); #Array ref
my $lite = VCS::Lite->new( '/users/me/prog.pl',$sep); #File name
my $lite = VCS::Lite->new( $fh1,$sep); #File handle
my $lite = VCS::Lite->new( \&next, $p1, $p2...); #Callback
DWIM の Perl魂では、new は配列リファレンスを想定します。 あなたが、何でもリストを作る仕事を終えているなら(訳註:you have already done all the work of making your list of whatevers.)。 文字列(ファイル名)か、ファイルハンドルであれば、 ファイルは音を立てて食べられ、テキストの行ごとに読んで、配列のメンバに入ります。 コールバックであれば、ルーチンは、引き続いた、引数 $p1、 $p2 ...と一緒に、呼ばれます。 そして、ルーチンは配列に加えられた(push された)スカラーを返すことが期待されます。 $sep は、オプショナルな入力レコードセパレータ正規表現です。デフォルトでは、$/ を使います。
text¶
my $foo = $lite->text;
my $bar = $lit2->text('|');
my @baz = $lit3->text;
スカラーコンテキストでは、食べられたファイル内容と等しいものを返します。 (オプショナルなセパレータパラメータは、文字列を一緒に繋げるのに使われます)。 リストコンテキストでは、行か、レコードのリストを返します。
save¶
$lit3->save('~me/patched_file');
save は、new の逆戻し操作です。ファイルネームかファイルハンドルを与えます。 ファイルは、連続するメンバのために、オブジェクトのシリアライズメソッドの呼出を全部書き出します。 もし、サブクラスであれば、自分自身のシリアライザーを供給できます。
(訳註:未実装のようです)。
diff¶
my $difftxt = $lit->diff($lit2);
2つの、VCS::Lite オブジェクトの間の違いを取ります。
出力されるのは、普通の diff の形式です。たとえば:
827c828
< my ($id, $name) = @_;
---
> my ($id, $name, $prefix) = @_;
patch¶
my $lit3 = $lit->patch($fh3);
VCS::Lite オブジェクトへパッチを適用します。 ファイルハンドルか、ファイル名の文字列を受け取ります。 diff フォーマットでファイルを読み、それを適用します。 パッチのあたったソースとして VCS::Lite オブジェクトを返します。
merge¶
my $lit4 = $lit->merge($lit2,$lit3,\&confl);
"平行四辺形のマージ"を行います。3つの VCS::Lite オブジェクト - 基礎のオブジェクトと2つの変更ストリーム - を取ります。 変更の組の両方でマージされた、VCS::Lite オブジェクトが返ります。
メソッドへ渡す3番目のパラメタは、マージのコンフリクトが起こったときに いつでも呼ばれるサブルーチンです。このサブルーチンは、コンフリクトを解決するか、 必要なテキストを挿入して、コンフリクトをハイライトする必要があります。
著者¶
(原文まま)
I. P. Williams, <Ivor dot williams (at) tiscali dot co dot United Kingdom>