GNU CVS Client と MacCVS Proの技術的な差異
注意して下さい: このドキュメントは、MacCVS Pro 2.5 がリリースされると、大幅に変更される可能性があります。
注意:このドキュメントは、読み手がGNU CVS の操作やそのアルゴリズム、バージョンコントロールを維持するためのデータ構造などに十分精通していることを想定して作られています。CVS に関する情報は http://www.cyclic.com.
を参照して下さい。
はじめに
MacCVS Pro は、単にマッキントッシュ上で操作できるCVS として設計された訳ではなく、操作がより簡単で、マッキントッシュらしいものになるように設計されました。加えて我々は新しいCVSクライアントに現存する開発ツール(例えば、Metrowerks CodeWarrior 、Projector、MPW等) を反映させたいと考えました。 これらの全ての要素を開発しようとすることはたやすいことではなく、GNU CVS clientと比較して、クライアントの動作の仕方を変える他ありませんでした。
こういった話題は一般的なMacCVS Pro のユーザーにはどちらでも良いことかも知れませんが、他のマッキントッシュCVSツールからMacCVS Pro に乗り換えたいという人には、問題を提起するかも知れません。
CVSのエントリー情報の格納に関して
エントリーの情報はレポジトリにあるファイルの名前や、ユーザーディスクでの現在のバージョン、チェックアウトされた日付、そしてタグとコンフリクトの情報から成ります。GNU CVS client では、エントリーの情報は、"CVS"ディレクトリ内のそれぞれのソースディレクトリにある、"Entries"ファイル、"Entries.Static"ファイル、"Entries.Log"ファイルに格納されます。
CVS "Entries"ファイルの一例 :
/friends.html/1.1.1.1/Tue Mar 24 22:03:46 1998//
/index.html/1.1.1.1/Tue Mar 24 22:03:46 1998//
/links.html/1.1.1.1/Tue Mar 24 22:03:46 1998//
/morepix.html/1.1.1.1/Tue Mar 24 22:03:46 1998//
/pgpkey.txt/1.1.1.1/Tue Mar 24 22:03:46 1998//
/pictures.html/1.1.1.1/Tue Mar 24 22:03:46 1998//
/projects.html/1.1.1.1/Tue Mar 24 22:03:46 1998//
/resume.html/1.1.1.1/Tue Mar 24 22:03:46 1998//
MacCVS Pro はこの情報を格納するためにそれぞれのファイルのマッキントッシュリソースフォークを利用しています。これを行えたということは、マッキントッシュのソースコードコントロールの基礎となっている、MPW Projector の'ckid'リソースを利用できたということです。これにより、情報をより早く格納できるようになります。更に、移動したり名前が変わってしまったりしたファイルがあるときにはそれを見つけやすくします。
MacCVS Pro はエントリー情報をリソースフォークの二つの場所に格納しています。(リソースというのは、MPW Projector の'ckid'リソースと、私たちの'mcvs'リソースのことです。)あるファイルがソースコントロールの元にあるということを知らせるためには、主に'ckid'リソースを使います。このリソースの、状態だけを読みとるように修正された特徴のために、ほとんど全てのソースコードエディターが正確に作動します。 MPW Projector 'ckid' リソースのドキュメンテーションがきちんとしたものでないので、このリソースの進歩的な部分を試みに利用することは避けています。
事実上のCVSエントリー情報は 'mcvs'リソース(ID 128) に、二つの特別なアイテムと共に格納されています。 'ckid' や'mcvs'のフォーマット は このドキュメンテーションの下部で見ることができます。
CVSディレクトリ内部の差異
上記で触れたように、GNU CVS client では、全てのエントリー情報と"CVS" ディレクトリの他の資料をそれぞれのソースディレクトリに格納しています。MacCVS Pro もそれと似たような事をしていて、それぞれのソースディレクトリに画面に表示されない"CVS"フォルダを作成しています。しかし、そこにどんなファイルを格納したのかと、どんなデータをそのファイルに格納したのかという事に関しては少し違っています。ここにざっと紹介してみましょう。
ファイル名:Repository
目的: 特定のソースディレクトリがリポジトリに格納されている場所の、リモートパスを格納する。
MacCVS Proとの違い: MacCVS Proもこれを使っていますが、CVSROOTに関係したパス名を格納するだけで、全てのパス名を格納している訳ではありません。どんなパス名を格納しているのかもまた、多少違います。特にあなたが他の特性を持つモジュールをチェックアウトする時はそうです。このファイルを正確に書く方法を説明しているドキュメンテーションが無いので、どうすればうまく機能するかについて「推量」してみなければなりませんでした。
ファイル名 :Root 目的: ユーザーがある特定のソースディレクトリをそこからチェックアウトする、リポジトリのCVSROOTパスを格納する。 MacCVS Proとの違い: MacCVS Proはこのファイルを"CVS"全てのディレクトリに作っていますが、しかし我々はこれを今のところ使っていません。
ファイル名: Tag
目的: あるソースディレクトリのタグを格納する。
MacCVS Proとの違い: 全くありません。これは全く同じように使えます。
MacCVSのリソースデータフォーマット
'ckid'リソースフォーマット
以下が'ckid'リソース用のフォーマットです。これは、MPW ドキュメンテーションにドキュメント化されています。
UInt32 fChecksum;
UInt32 fLocation;
UInt16 fCurrentVersion;
UInt16 fCheckedOutBySomeone;
UInt8 fBranch;
UInt8 fModifyReadOnly;
UInt32 fUnused;
UInt32 fCheckoutTime;
UInt32 fFilesModificationDate;
UInt32 fProjectID1;
UInt32 fProjectID2;
UInt16 fUserID;
UInt16 fFileID;
UInt16 fRevisionID;
次にあげるヘッダーは、5つのPascalスタイルの文字列です。 それぞれの文字列はNULL (0x00) バイトで分けられています。文字列はデフォルトでは、255バイトで格納されているわけではありません。テキストの総計分のバイト(と、文字列の長さを示すバイト)で、リソースに格納されているのです。
PString fRemotePathPStr;
(EOS)
PString fUserNamePStr;
(EOS)
PString fRevisionPStr;
(EOS)
PString fFileNamePStr;
(EOS)
PString fTaskPStr;
(EOS)
Pascal文字列が16ビット幅の整数でないので、チェックインコメントデータの長さを記述できません。長さの値の後にすぐ、チェックインコメントのテキストが続いています。
UInt16 fCommentLen;
char[] fCommentData;
'mcvs'リソースフォーマット
以下が、'mcvs'リソース用のフォーマットです。これはMacCVS ProがCVSのエントリー情報を格納するために使う、特別なリソースです。
UInt32 fVersion;
UInt32 fFlags;
UInt32 fRefCon;
次にあげるヘッダーは、9つのPascalスタイルの文字列です。 それぞれの文字列はNULL (0x00) バイトで分けられています。文字列はデフォルトでは、255バイトで格納されているわけではありません。テキストの総計分のバイト(と、文字列の長さを示すバイト)で、リソースに格納されているのです。
PString fFileNamePStr;
(EOS)
PString fRevisionPStr;
(EOS)
PString fConflictsPStr;
(EOS)
PString fOptionsPStr;
(EOS)
PString fTagPStr;
(EOS)
PString fUnused1PStr;
(EOS)
PString fUnused2PStr;
(EOS)
PString fUnused3PStr;
(EOS)
PString fUnused4PStr;
(EOS)
Pascal文字列が16ビット幅の整数でないので、チェックインコメントデータの長さを記述できません。長さの値の後にすぐ、チェックインコメントのテキストが続いています。
UInt16 fRemotePathLen;
char[] fRemotePath;
'mcvs' フィールドインフォメーション:
- fVersion これは、いつでも0xFABB0003です。
- fFlags 現在は、ただひとつのフラグしかありません。:もし、ビット1がセットされているならば、それはこのファイルがリポジトリにあるAppleSingle のファイルだということを意味します。
ドキュメンテーションのページに戻る
|