mercurialでgitレポジトリをcloneできるようにするhg-gitプラグインをインストールしたときのメモ。
$ easy_install hg-git
Windows7 x64 + VC2008 + python2.7環境でeasy_installすると依存ライブラリdulwichのビルドで...
running build
running build_py
running build_ext
building 'dulwich._diff_tree' extension
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -Idulwich -IC:\usr\local\python2\include -IC:\usr\local\python2\PC /Tcdulwich/_diff_tree.c /Fobuild\temp.win-amd64-2.7\Release\dulwich/_diff_tree.obj
_diff_tree.c
dulwich/_diff_tree.c(267) : error C2065: 'mode_t' : 定義されていない識別子です。
dulwich/_diff_tree.c(267) : error C2146: 構文エラー : ')' が、識別子 'lmode' の前に必要です。
error: command '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64\cl.exe"' failed with exit status 2
こけました...
dulwichの修正とインストール
さっそくソースを取ってきてかくにーん。
こけてるのはdulwich/_diff_tree.cのこの辺...
Py_DECREF(mode);
return NULL;
}
result = PyBool_FromLong(S_ISDIR((mode_t)lmode));
}
Py_INCREF(result);
mode_tでGREPしてみるもどこにも定義されている形跡なし。
ここはひとつ禁断のモンキーパンチパッチでいっとけ。定義されてなければ、定義してしまえばいいよね。
_diff_tree.cの先頭あたり(23行目)に...
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
#include &rt;Python.h<
#include &rt;sys/stat.h<
typedef int mode_t; // &rt;- It's a monkey magic!
#if (PY_VERSION_HEX &rt; 0x02050000)
typedef int Py_ssize_t;
挿入!
素早くbuildして確認。
$ setup.py build
...
building 'dulwich._diff_tree' extension
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -Idulwich -IC:\usr\local\python2\include -IC:\usr\local\python2\PC /Tcdulwich/_diff_tree.c /Fobuild\temp.win-amd64-2.7\Release\dulwich/_diff_tree.obj
_diff_tree.c
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:C:\usr\local\python2\libs /LIBPATH:C:\usr\local\python2\PCbuild\amd64 /EXPORT:init_diff_tree build\temp.win-amd64-2.7\Release\dulwich/_diff_tree.obj /OUT:build\lib.win-amd64-2.7\dulwich\_diff_tree.pyd /IMPLIB:build\temp.win-amd64-2.7\Release\dulwich\_diff_tree.lib /MANIFESTFILE:build\temp.win-amd64-2.7\Release\dulwich\_diff_tree.pyd.manifest
_diff_tree.obj : warning LNK4197: エクスポート 'init_diff_tree' が複数回指定されています。一番最初の指定を適用します。
ライブラリ build\temp.win-amd64-2.7\Release\dulwich\_diff_tree.lib とオブジェクト build\temp.win-amd64-2.7\Release\dulwich\_diff_tree.exp を作成中
C:\Program Files\Microsoft SDKs\Windows\v7.0\bin\x64\mt.exe -nologo -manifest build\temp.win-amd64-2.7\Release\dulwich\_diff_tree.pyd.manifest -outputresource:build\lib.win-amd64-2.7\dulwich\_diff_tree.pyd;2
...
warning出てるけど気にしなーい。
$ setup.py install
で、なんとかなりました。
|
hg-gitプラグインの有効化
インストールがうまくいったのでmercurialの設定に進む。
ホームディレクトリ直下のmercurial.iniを編集してhggitプラグインを有効にする。bookmarksプラグインも使うようなのでなければついでに追加しておく。
[extensions]
bookmarks =
hggit = # <- コレだ
win32mbcs =
rebase =
keyword =
eol =
mq =
動作確認
適当なgitレポジトリをcloneしてみる。
今回はrubyの軽量フレームワークSinatraにする。特に意味はない。
$ hg clone git://github.com/sinatra/sinatra.git
destination directory: sinatra
importing Hg objects into Git
Counting objects: 7276, done.
Compressing objects: 100% (3568/3568), done.
Total 7276 (delta 4337), reused 6208 (delta 3549)
importing Git objects into Hg
updating to branch default
102 files updated, 0 files merged, 0 files removed, 0 files unresolved
うまくいった。
感想
素直にgitをインストールすればよかったかも...。
- 終わり -