hgpushsvn.pyをWindowsで動作するようにする

ある程度までは動作するようになった。

--- a/hgsvn/run/hgpushsvn.py    Sun Sep 21 01:11:16 2008 +0900
+++ b/hgsvn/run/hgpushsvn.py    Sun Sep 28 04:08:11 2008 +0900
@@ -43,7 +43,7 @@
     """
     Given a string identifying an hg revision, get the canonical changeset ID.
     """
-    s = run_command("hg log -q -r %s" % rev_string)
+    s = run_command("hg log -q -r %s" % rev_string).split('\n')[0]
     return s

 def get_hg_revs(first_rev, last_rev="tip"):
@@ -154,7 +154,7 @@
         details = get_hg_cset_details(end_rev)
         svn_client = pysvn.Client()
         print "*", "svn: checking in..."
-        svn_rev = svn_client.checkin(".", details['description'])
+        svn_rev = svn_client.checkin(".", unicode(details['description'], "cp93
2"))
         return svn_rev
     else:
         print "*", "svn: nothing to do"

[変更ポイント]

  • 取得したhgのチェンジセットIDから、余計なラインフィードを削除。ラインフィードのせいでコマンドが実行されなかった模様。
  • 日本語のコミットログが文字化けしていたが、pysvn.Client.checkin()に、コミットログをユニコードにして渡すようにしたら化けなくなった。

[現在わかっている問題点]
以下のようなファイルをhgでaddしたが、hgpushsvn.pyではsvnヘaddできなかった。

ファイル名: ソフト表現.txt
コミットログ: ソフト表現「・/〜」

C:\work\svntest\sally\svntest>hgpushsvn.py
* svn up
* hg log -q -r svn.522
* hg log -q -r eb3309f572e6:tip
* hg up -C ddfffacd3ea8
* hg st -arm -X '.hg*' --rev eb3309f572e6
* svn add "・ "ソ\フト・ "ソ\フト表\現.txt"
* hg log -v -r ddfffacd3ea8
* svn: checking in...
* svn up