[Charlie Vernon Smythe]
TortoiseCVS

楽しい バージョン管理ソフト

ダウンロード

TortoiseCVS
ユーザの声
サポート

目標
貢献者
開発

T-シャツ
Original: http://www.tortoisecvs.org/development.shtml
Latest: http://www.tortoisecvs.org/development.shtml

開発のための資料とTIPS

オープンソースソフトで作業したことはありませんか? Havoc Pennington's の記事、 Working on Free Software を 読んで、それがどういうものかをつかんでください。

ユーザインターフェースについての変更や、アイディアがある? それをやる前に、Havoc's の記事、 Free software and good user interfaces を読んでください。

SourceForge プロジェクト
ソースコードのオンライン閲覧
匿名での CVS アクセス
貢献者一覧 - ソースコードのどの部分について誰に聞けば 良いかを調べてください

テストリリース: 自分で TortoiseCVS をコンパイルできないか、したくないときには、テストリリースのどれかを 試してみることができます。これは現在 CVS にあるコードから、かなり頻繁に TortoiseCVS の開発者によってコンパイルされているものです。 ひとつの時点で、ひとつのテストリリースだけが管理されています: このサイトで 見つけることができます。

TortoiseCVS は面白いプログラムです。 ウィンドウズのプログラムとして、 いくつかの OLE クラスとして実装されたエクスプローラのシェル拡張に なっていますし、オープンソースとしては、wxWindows インターフェースを もち、GPL ライセンスであるような、CVS ツールです。

このため、コンパイルとデバッグには、すこし努力が必要になるかも知れません。 どうか、楽しくやりがいのある範囲でやってみてください。なにかでつまづいたら TortoiseCVS mailing list に助けを求めてください。ヒントがあると思います。

構造: TortoiseCVS はふたつのプログラムからなります。TrtseShl.dll は エクスプローラのシェル拡張DLLです。TortoiseAct.exe が実際に仕事をするプログラム です。TortoiseAct.exe はユーザが実行しようとするコマンドのそれぞれに対して、 シェル拡張DLLによって起動されます。 ソースコードの 依存関係グラフを見るのも 良いかも知れません。

コンパイラ: TortoiseCVS は付属のプロジェクトファイルを使って、Visual C++ 6Borland C++ Builderでコンパイルすることができます。 Mingw32用のMakefileもあり、多分Cygwinでも動作するはずです。 私は Linux 上で TortoiseAct をクロスコンパイルするのに使ったことが あるだけですが、メモリー確保時に STL クラッシュを引き起こす問題がある ようです。 TortoiseAct.exe はVisual C++ 5でもコンパイルできますが, TrtseShl.dll は、付属のヘッダーファイルにシェルインターフェースが欠けているため、コンパイル することができません。

別のコンパイラによる実行ファイル作成を改良するためのパッチは歓迎です。 従来よりもうまくやる方法を発見した人は charlie にメールしてください。

TrtseShl.dll 中の IColumnProvider をコンパイルするには、 プラットフォームSDKの最新バージョンも必要になります。この中に、Win32 API の ヘッダファイルがあります。これは Microsoft's SDK update siteからダウンロードすることができます。 新しいSDKを利用するように、Tools | Options | Directories | Library と、 Include の部分を変更してください。そうしないと、古くてあやふやな IID_IColumnProvider がリンクされてしまいます。

wxWindows: TortoiseAct をコンパイルするには、GUI ライブラリである、 wxWindowsをダウンロードする必要が あります。これはプラットフォームに依存しないライブラリですが、TortoiseCVS で利用しているのはそれが理由ではありません。生の Win32 あるいは MFC の ライブラリを呼び出すより、ずっとやさしくコーディングできるからです。 Tools|Options|Directories のページで、wxWindows のライブラリとヘッダファイル を大域的に設定するのか一番良い方法です。

ライブラリを作るには、wxWindows のソースコードをコンパイルする必要が ありますが、これは簡単です。 Visual C++ で wxWindows をコンパイルするには、以下の変数を設定してあること を確認してください。

wxUSE_DEBUG_NEW_ALWAYS を 0 に
wxUSE_IOSTREAMH を 0 に
wxUSE_MEMORY_TRACING を 0 に
wxUSE_GLOBAL_MEMORY_OPERATORS を 0 に

そうしないと wxWindows はテンプレートと互換性がなくなり、Visual C++ がすでに もっているメモリデバッグ機能を付け加えることになってしまいます。これらの値を 設定するには、wxWindows インストール手順に書いてある設定ファイルを編集してください。

私は wxWindows の CVS 用のバージョンを使っていますが、それ以前のリリース では修正されていないいくつかのバグが修正されているからです。古いバージンでも TortoiseCVS はコンパイルできますが、私が作ったものほど良くないかも知れません。 もちろん、ほかの方法でも動かすことができます。CVS のバージョンにはもっとバグが あるかも知れません。

Flex/Bison: flex と bison を使った構文解析のコードが cvstree フォルダに いくつかあります。TortoiseCVS をコンパイルしインストールするのにこれらのプログラム は不要です。CVS リポジトリには、すでに生成結果の parser.cpp と lexer.cpp が含まれて いるからてす。しかし、Rebuild All する場合には、同じディレクトにある cygwin の flex と bison のバイナリが必要になります。Visual C++ はこの二つを使って再構築 するからです。

"shared region is corrupted" とか "shared region version mismatch" とかいうエラーが出る場合 cygwin バイナリと、すでにインストールされているものとが 衝突していることによって起こります。 こういうことが起こらないことを願っています。 もしおきてしまったら私たちに emailして ください。また ここを読んでみてください

TortoiseAct の引数: TortoiseAct.exe はいくつかの引数をとります。 デバッガから起動するときには、これを使うことができます。 最初の引数は、実行内容を示す動詞で、たとえば、CVSCheckOut, CVSDiff などです。 残りの引数は、その処理の対象となるファイル名称です。あるいは、-f オプションを 使ってファイルで指定することもできます。そのファイルの内容は、処理対象のファイルの リストで、一行にひとつのファイルを書きます。ウィンドウハンドルを、-h オプションで 渡すこともできます。これは変更後のエクスプローラビューを再描画するために使われ たり、プロパティーダイアログの更新に使われたりします。

DLLの実行: シェル拡張DLLを実行するのは簡単ではありません。 できるだけ、すべてのデバッグをTortoiseAct.exe の中でやるようにしてください。 TrtseShl.dll を変更する場合、それを直接 TortoiseCVS がインストールされている 場所にリンクしたいと思いまが、残念なことに、エクスプローラがすでにロードされて いる場合、その DLL を上書きすることはできません。これについて、いくつかの 方法があります。

  • マイクロソフトの記事、Debugging with Shellを読んでください. DesktopProcess と AlwaysUnloadDll のレジストリ設定についての説明があります。 AlwaysUnloadDll は単なるキーで、値を持たないことに注意してください。 キーが存在すればいいです。わたしのマシンでは、NT 4.0 下で DesktopProcess キーは エクスプローラに不具合をおこし、どこでダブルクリックしても、Visual Studio Dependency Walker が起動されてしまいます。
  • Ctrl+Alt+Del か Task Manager でエクスプローラを終了し再起動してください。 それから、DLL ファイルを上書きして、エクスプローラをもう一度起動します。 これはいくつかのシステムでだけうまくいきます。- それは最初にエクスプローラを開いたときに TrtseShl.dll をロードする場面でだけです。スタートバーが見えているときにはうまく いきません。
  • シェルを変更してください。systein.ini ファイルを編集して "shell=Explorer.exe" を "shell=winfile.exe" か "shell=progman.exe" で置き換えてください。 再起動すると、古い 3.1 のシェルが起動します。その状態で、エクスプローラを、File|Run メニューで起動することができます。通常のプログラムと同様にエクスプローラを削除できる ので、その後 DLL を変更します。
  • Windows NT/2000: タスクマネージャを使ってエクスプローラを終了し、再起動しないように することができます。こうやってから、DLL を Visual Studio でコンパイルします。 エクスプローラをデバッガ(以下を参照)か、タスクマネージャの File|Run メニューから再起動することが できます。 Shift+Ctrl+Escape で簡単にタスクマネージャを起動することができます。
  • NT/2000 の場合、まだロードされている DLL をどのプロセスがつかんでいるかを調べるのに、 HandleEx を使うことができます。 アプリケーションの File|Open ダイアログで起動されていることがよくあります。
  • Windows 2000 で私が使った別のウラワザがあります。TrtseShl.dll を何かが つかんでいました。多分 DLL ローダのキャッシュの仕組みが怪しいと思って います。これは、ファイル名前を変更することで解決することができます。 Cygwin か DOS 窓を開いて、エクスプローラを終了し、 mv TrtseShl.dll not.dllのようなことをやってみてください。 他の標準的なファイルシステムと同様 NTFS でも、ファイルが使用中であっても 名称を変更することができます。それから新しい TrtseShl.dll を作ってから エクスプローラを再起動してください。このワザはひどく fiddly で、net*.dll のような名前をファイルがたくさんできてしまうので、適当なタイミングで削除 する必要があります。ときどき間違ったバージョンの DLL を実行している エクスプローラのインスタンスをつかんでしまうことがありますが、一度終了して 再起動すれば解決します。 Persevere though, after a bit it becomes second nature.

ショートカットキーに関するコツ: Windows NT/2000/XP では、 Shift+Ctrl+Escape を押せばタスクマネージャを直接起動できます。 そのあとキーボードだけを使ってでエクスプローラを選択し、終了することができます。

DLL のデバッグ: DLL をデバッグするには、いま書いたどれかの方法で 実行中のエクスプローラを完全に終了することが必要です。 エクスプローラが走っていな状態で Visual Studio から直接エクスプローラを起動 してください。それには: Project|Settings|Debug メニューでデバッグセッションでの実行ファイルに explorer.exe を選んでください。するとデバッグセッションが始まり エクスプローラが起動し、DLL はデバッガにロードされます。あとは通常どおり ブレークポイントを設定しデバッグしてください。

Visual C++ での別のトリックは、デバッグをはじめたいと思う行の近くに、ASSERT(false) の分を追加することです。 ダイアログがポップアップしたら再実行を押して、キャンセル を押します。これでデバッガーがアタッチします。もしうまくいかない場合は、再実行を 押す前に、デバッガをそのプロセスに明示的にアタッチしてみてください。

CVSGlue: CVSGlue フォルダには、独立したCVSGlue プロジェクトがあります。 これは TortoiseAct または、エクスプローラに関連したつまらない問題にわずらわ されずに TortoiseCVS の多くの場所をテストするためのものです。main.cpp を編集 して、必要なテストを実行してください。

Localisation: TortoiseCVS は GNU の gettext マーカを使ってどの部分に 翻訳が必要かを示しています。文字列定数をソースコードに追加するときはいつでも 以下のどれかの方法でマークしてください。

  • つねに翻訳が必要なものについては、_ マクロでラップしてください。 たとえば _("This is some funky text")のような感じです。
  • CVS が出力し、解析するようなテキストの場合は、CVSPARSE マクロでラップして ください。たとえば、 CVSPARSE("No CVSROOT specified!")。 このテキストが翻訳される言語は利用している cvs.exe のバージョンに依存していて、 さらに cvs.exe 中で、等しく翻訳されなくてはなりません。
  • それ以外の文字列はマークせずにおいてください。

やるべきこと: やるべきことはたくさんあります。 プログラムのおかしな場所を見つけるのに、ソースコード中のTODOを検索するか、 SourceForge プロジェクトサイト上の Bugs & Feature trackers を読んでください。

パッチ: 機能拡張や、バグ修正はどれも歓迎です! ただ、TortoiseCVS はシンプルなインターフェースをもっていることを忘れないで ください。オプションはできるだけ地味で本質的でなくてはなりません。

コーディングスタイルの問題: TortoiseCVS のコードは、さまざまな貢献者に由来しているので、コーディングスタイルは違っているも知れません。以下は、私(Torsten)が勧めようとしている約束ですが:

  • 字下げは、スペース 3 文字で(タブ文字は使わない)。
  • ifのようなキーワードと、その後のカッコのあとにはスペースをひとつ入れる。ただし、関数呼び出し中のカッコの前や後にはペースを入れない。
  • ハンガリー記法は使わない
  • ポインタ型の中の、* 記号は、型の一部と考える。つまり、int* pint *pと書かない。
  • 変数は、最初に使う場所で宣言し初期化する。
  • NULLを使うかわりに、単に0を使う。
メーリングリスト: TortoiseCVS

Email: charlie@tortoisecvs.org

SourceForge Logo