[PATCH] contrib: fix binary file issues with dumprevlog on Windows

Adrian Buehlmann adrian at cadifra.com
Fri Apr 4 10:06:07 CDT 2008


With this patch, dumprevlog and undumprevlog (from contrib) would
work on Windows, also for non-printable files.

I've also tested this patch with:
http://selenic.com/pipermail/mercurial-devel/2008-April/005706.html
on FreeBSD 6.2


# HG changeset patch
# User Adrian Buehlmann <adrian at cadifra.com>
# Date 1207319984 -7200
# Node ID 1cf4f5d926acaac7b4156ee177f1bdc2927b1519
# Parent  6c4e12682fb985137f7e68dbaa9ee9444b1281b0
contrib: fix binary file issues with dumprevlog on Windows

* Fix traceback on dumprevlog: open revlog in mode 'rb' (binary)
* Set stdio to binary mode so that redirected data is not modified

References:
http://selenic.com/pipermail/mercurial/2008-March/018330.html
http://selenic.com/repo/index.cgi/hg/rev/a3fe91b4f6eb

diff --git a/contrib/dumprevlog b/contrib/dumprevlog
--- a/contrib/dumprevlog
+++ b/contrib/dumprevlog
@@ -3,10 +3,14 @@
 # $ find .hg/store/ -name "*.i" | xargs dumprevlog > repo.dump

 import sys
-from mercurial import revlog, node
+from mercurial import revlog, node, util
+
+for fp in (sys.stdin, sys.stdout, sys.stderr):
+    util.set_binary(fp)

 for f in sys.argv[1:]:
-    r = revlog.revlog(open, f)
+    binopen = lambda fn: open(fn, 'rb')
+    r = revlog.revlog(binopen, f)
     print "file:", f
     for i in xrange(r.count()):
         n = r.node(i)
diff --git a/contrib/undumprevlog b/contrib/undumprevlog
--- a/contrib/undumprevlog
+++ b/contrib/undumprevlog
@@ -5,6 +5,9 @@

 import sys
 from mercurial import revlog, node, util, transaction
+
+for fp in (sys.stdin, sys.stdout, sys.stderr):
+    util.set_binary(fp)

 opener = util.opener('.', False)
 tr = transaction.transaction(sys.stderr.write, opener, "undump.journal")




More information about the Mercurial-devel mailing list