Mercurial と Subversion を連携させる

[やりたいこと]


サーバー
Subversionリポジトリ
メインリポジトリ


クライアント
Windows XP sp3
Mercurialリポジトリ
プライベートリポジトリ


普段は、プライベートリポジトリへこまめにコミットをして、キリの良いところでサーバのメインリポジトリへ一つのリビジョンにまとめてコミットしたい。
当然、メインリポジトリとプライベートリポジトリ間で同期(マージ)が行えないといけない。


[目論見]


http://d.hatena.ne.jp/ursm/20080219
http://d.hatena.ne.jp/ursm/20080307
http://d.hatena.ne.jp/ursm/20080308

を読むと、hgsvnをインストールすれば、やりたいことがすべてできそう。すばらしい。


[やったこと]<インストール>

1. クライアントへhgsvn開発版のインストール
http://pypi.python.org/pypi/hgsvn/0.1.6

    • -

Unstable (development) version

Just run hg clone http://hg.pitrou.net/public/hgsvn/main hgsvn and you'll get the contents of the development repository.

    • -

Install

, download and uncompress the source tarball, then type python setup.py install.

    • -

2.hgsvnの文字コードの変更

hgpullsvnを実行すると、日本語ログや日本語ファイル名で処理が中断してしまう。
そこで、以下のように文字コードを"utf-8"から"cp932"へ変更してみた。
これでなんとか動くようになった。

common.py

    • -

def run_hg(args=None, bulk_args=None):
"""
Run a Mercurial command, returns the (unicode) output.
"""
# default_args = ["--encoding", "utf-8"]
default_args = ["--encoding", "cp932"]
# output = run_command("hg", args=default_args + (args or ),
# bulk_args=bulk_args, encoding="utf-8")
output = run_command("hg", args=default_args + (args or
),
bulk_args=bulk_args, encoding="cp932")
# return output.decode('utf-8')
return output.decode('cp932')

    • -

3.hgpushsvnのインストール

hgsvn開発版からhgpushsvn.pyを、C:\TracLight\python\Scripts\ へコピーする。

4.pysvnのインストール

http://pysvn.tigris.org/

Windowsバイナリ版をインストール
http://pysvn.tigris.org/servlets/ProjectDocumentList?folderID=1768
py25-pysvn-svn150-1.6.0-975.exe<使用手順>

https://msofficesvn.googlecode.com/svn/trunk/
をインポート対象とした。

ローカルの作業コピーのフォルダは
c:\work\msofficesvn\

hgimportsvn https://msofficesvn.googlecode.com/svn/trunk/
を実行。

本当は、
https://msofficesvn.googlecode.com/svn/以下すべての作業コピーを
c:\work\msofficesvn\
へ作りたかったのだが、

hgimportsvn https://msofficesvn.googlecode.com/svn/

とすると、
c:\work\msofficesvn\svn
フォルダの下にtrunk,tags,branchesが作成されてしまって、意図したフォルダ構成とならないので、いたしかたなくtrunkだけを作成するようにした。

cd trunk
hgpullsvn

を実行。

これでMercurialのリポジトリと作業コピーが作成される。
この作業コピーはSubversionの作業コピーともなっているようだ。

作業コピーの編集
コミット

hg commit -m "Write commit log here" -u kokiya

-u を忘れるとWindowsへのログイン名から作成されたらしい適当なユーザ名が自動的に設定されてしまうので注意。

hgpushsvn.py

を実行。
ところが、以下のエラーが表示され動作しない。残念。

    • -

* svn up
Traceback (most recent call last):
File "C:\TracLight\python\Scripts\hgpushsvn.py", line 213, in
main()
File "C:\TracLight\python\Scripts\hgpushsvn.py", line 173, in main
run_command("svn up")
File "C:\TracLight\python\Scripts\hgpushsvn.py", line 21, in run_command
raise RuntimeError("command failed with non-zero return code (%d): %s:\n%s"
% (st, cmd, out))
RuntimeError: command failed with non-zero return code (1): svn up:
'{' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

    • -

コマンドプロンプトから"svn up"を実行すると、

    • -

C:\work\msofficesvn\wiki>svn up
At revision 399.

    • -

となるので、Subversionはちゃんとインストールされているし、hgimportsvn, hgpullsvnは動作している。