Hatena::ブログ(Diary)

kokiyaの日記 http://www.visualpharm.com/

 | 

2008-09-15

Mercurial と Subversion を連携させる

00:19

[やりたいこと]


サーバー

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

<snip>, 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 <module>

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は動作している。

ursmursm 2008/09/16 01:00 Windows だと commands.getstatusoutput() が使えないみたいですね。
このパッチでどうでしょう。
http://gist.github.com/10884

kokiyakokiya 2008/09/18 02:12 ursmさん、どうもありがとうございます。
パッチまで用意していただいて、感激です。
ぜひとも、試させていただきます。

トラックバック - http://d.hatena.ne.jp/kokiya/20080915/1221491942
 |