PythonベースインストールしたBazaarでTortoiseBzrを動かす。
Windowsの場合、スタンドアロンexeとして動作するBazaarか、Python.exeスクリプトとして動作するBazaarかのどちらを選択できます。
手軽なのはスタンドアロンexeの方で、インストーラを実行するだけで基本的な機能と主要なプラグイン、GUIクライアントなど一通り使えるようになります。
それとくらべるとPythonスクリプト版の方は色々と面倒はありますが、別のプログラムからBazaarのPython APIを利用できたり、Apache上でBazaarのサーバをホストできるようになるなど、色々とメリットもあります。
※Pythonスクリプト版のBazaarを動作させるための手順は、 WindowsでBazaarをビルドするためのメモ - wonderful_pandaの日記 にまとめてあります。
ただ、Pythonスクリプト版の場合、TortoiseBzrがそのままでは動作しません。これを動くようにするためにいくつかのステップがあるので、それを説明します。
事前準備
WindowsでBazaarをビルドするためのメモ - wonderful_pandaの日記を参考にして、Bazaar本体と、qbzr、bzr-explorerのセットアップをしておきます。
また、TortoiseOverlaysというコンポーネントもインストールする必要があるので、以下のURLからインストーラをダウンロードして、インストールします。(かわりに、TortoiseSVNかTortoiseHgがインストールするという手もあります。このどちらかがインストールされていれば、TortoiseOverlaysも一緒にインストールされているはずです。)
http://tortoisesvn.tigris.org/source/browse/tortoisesvn/TortoiseOverlays/
ソースの取得
Launchpadから、TortoiseBzrのソースを取得します。
$ bzr branch lp:tortoisebzr tortoisebzr
実行環境の準備
TortoiseBzrが動作する環境を作るためには、環境変数PYTHONPATHにダウンロードしたtortoisebzrフォルダのパスを設定する必要があります。
システムの環境変数に設定したくない場合は、以下のようにvirtualenvを使う方法などもあります。(Bazaar自体をSandBoxにインストールすることも可能です)
- virtualenvがインストールされていなければ、インストールする
$ easy_install virtualenv
- TortoiseBzr実行用のPython環境(SandBox)を作る
$ virtualenv path\to\sandbox --system-site-packages
- path\to\sandbox\Lib\site-packages フォルダに、sitecustomize.pyというファイルを作成し、以下の内容を記述する。
import os, sys # PYTHONPATHにtortoisebzrのフォルダを追加 sys.path[1:1] = [r'path\to\tortoisebzr'] # その他、環境変数を設定したければ以下の要領で追記 os.environ["BZR_PLUGIN_PATH"] = r'path\to\bazaar\plugin\dir' os.environ["HTTP_PROXY"] = r'http://proxy.exsample.com:8080' os.environ["HTTPS_PROXY"] = r'https://proxy.exsample.com:8080'
Bazaarの本体(bzrlib)と同じ階層に、(通常は、$PYTHONHOME\Lib\site-packages)Bazaarのアイコンを"bzr.ico"という名前で置きます。アイコンは、ここからダウンロードしてください。
http://wiki.bazaar.canonical.com/LogoOptions?action=AttachFile&do=view&target=bazaar.ico
bazaar.confと同じフォルダに、tbzr.confというファイルを作成し、以下の内容を記述します。
※bazaar.confのありかは、bzr versionコマンドで確認することができます。
# virtualenvを使った場合は、SandBox内のpython.exeのパスを指定してください。 [tbzrcache] command_prefix = path\to\python\exe path\to\tortoisebzr\scripts\tbzrcache.py
Shell Extensionのビルド
TortoiseBzrのShellエクステンションをビルドするためには、Visual Studio 2008が必要です(フリーのExpress Editionで構いません)。ここからダウンロードして、インストールしてください。
http://www.microsoft.com/japan/msdn/vstudio/2008/product/express/
shellext\tbzrshellext.slnをオープンして、Releaseでビルドします。
shellext\build\tbzrshellext_x86.dllというファイルが作成されるので、このファイルをレジストリに登録します。
Vista、7の場合は「管理者として実行」で実行する必要があるので注意してください。
$ regedit path\to\tbzrshellext_x86.dllこれで、ログオフしてログインしなおせば、TortoiseBzrが動くようになっているはずです。
既知の問題とその回避策
エクスプローラのコンテキストメニューからBazaar Explorerを起動することができますが、Pythonスクリプト版でTortoiseBzrを動かす場合には、Bazaar Explorerの一部機能が正しく動きません。(Bazaar Explorerから、コミットや差分表示などを行うと、処理終了後に「Bad file descriptor」というエラーが発生してしまいます。)
(真面目に修正しようと思うとBazaar Explorer側で修正が必要になりそうなのですが、Pythonスクリプト版でTortoiseBzrを動かす人がそもそもほとんどいないので、とりあえず放置しています ^^;)
以下のような内容のスクリプトをプラグインとして配置することで、このエラーを解消することができるので、参考にしてください。
import sys if getattr(sys.stdout, "fileno", lambda: -1)() < 0: sys.stdout = open('nul', 'wb') if getattr(sys.stderr, "fileno", lambda: -1)() < 0: sys.stderr = open('nul', 'wb')
※プラグインフォルダに適当な名前のサブフォルダ(avoid_bad_file_descriptorとか)を追加して、このスクリプトを__init__.pyとして保存してください。