hgpushsvn.pyへursmさんのパッチを当ててみる

hgpushsvn.pyがWindows上で動作しない件。

Windowsではcommands.getstatusoutput()が動かないとのことで、
id:ursmさんが作成してくださった、パッチをあててみる。

http://gist.github.com/10884
hgpushsvn.py.diff

diff --git a/hgpushsvn.py b/hgpushsvn.py
--- a/hgpushsvn.py
+++ b/hgpushsvn.py
@@ -11,14 +11,18 @@
 
 
 def shell_quote(s):
- return "'" + s.replace('\\', '\\\\').replace("'", "'\"'\"'") + "'"
+ if os.name == "nt":
+ q = '"'
+ else:
+ q = "'"
+ return q + s.replace('\\', '\\\\').replace("'", "'\"'\"'") + q
 
 def run_command(cmd, args=()):
     cmd += "".join(" " + shell_quote(a) for a in args)
     print "*", cmd
- st, out = commands.getstatusoutput(cmd)
+ st = os.system(cmd)
     if st != 0:
- raise RuntimeError("command failed with non-zero return code (%d): %s:\n%s" % (st, cmd, out))
+ raise RuntimeError("command failed with non-zero return code (%d): %s" % (st, cmd))
     return out
 
 def map_svn_rev_to_hg(svn_rev, hg_rev="tip", local=False):

実行してみるが、エラーとなる。どうもos.system(cmd)の標準出力をrun_commandの返値としなければならないらしい。
さらに
st = os.system(cmd)

out = os.popen(cmd).read()
に変えてみる。
で実行するとエラーは出なくなったものの、

C:\work\test>hgpushsvn.py
* svn up
* hg log -q -r svn.507
* hg log -q -r 47caef99b58a
:tip
* svn up

となって、まったくコミットされる様子がない

または、コミットされても、編集していないファイルが延々とコミットされていく。

(略)
* svn: checking in...
* hg tag -l -r 8d7376ca1d22 svn.419
* hg up -C 80747623c1bb
* hg st -arm -X '.hg*' --rev 8d7376ca1d22
* svn add "Install.wiki"
* hg log -v -r 80747623c1bb
* svn: checking in...
* hg tag -l -r 80747623c1bb svn.420
* hg up -C 11df47dfc2f0
* hg st -arm -X '.hg*' --rev 80747623c1bb
* hg log -v -r 11df47dfc2f0
* svn: checking in...
(略)

うーむ、ちゃんと処理を追って見ていかないとだめそう…。