[PATCH] fix rewrite-log with recent API changes

Benoit Boissinot benoit.boissinot at ens-lyon.org
Mon Sep 8 18:02:51 CDT 2008


Since the datafile argument was removed from revlog(), rewrite-log is
broken (it was further broken by the API change from localrepo:
revlog.count() -> len(revlog)).

The patch below fixes it.

Matt, you did the changes in revlog.__init__(), do you think we can put
the datafile as an optional argument back ?

regards,

Benoit

diff --git a/contrib/rewrite-log b/contrib/rewrite-log
--- a/contrib/rewrite-log
+++ b/contrib/rewrite-log
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
-import sys, os
-from mercurial import revlog, transaction, node, util
+import sys, os, errno
+from mercurial import revlog, transaction, util
 
 f = sys.argv[1]
 
@@ -9,7 +9,7 @@
 
 tr = transaction.transaction(sys.stderr.write, open, "journal")
 
-for i in xrange(r1.count()):
+for i in xrange(len(r1)):
     n = r1.node(i)
     p1, p2 = r1.parents(n)
     l = r1.linkrev(n)
@@ -17,7 +17,15 @@
     n2 = r2.addrevision(t, tr, l, p1, p2)
 tr.close()
 
+# forcibly rename datafile, inline revlog don't have them
+def force_rename(a, b):
+    try:
+        os.rename(a, b)
+    except OSError, inst:
+        if inst.errno != errno.ENOENT:
+            raise
+
 os.rename(f + ".i", f + ".i.old")
-os.rename(f + ".d", f + ".d.old")
+force_rename(f + ".d", f + ".d.old")
 os.rename(f + ".i2", f + ".i")
-os.rename(f + ".d2", f + ".d")
+force_rename(f + ".d2", f + ".d")
diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -439,7 +439,7 @@
     remove data, and can use some simple techniques to avoid the need
     for locking while reading.
     """
-    def __init__(self, opener, indexfile):
+    def __init__(self, opener, indexfile, datafile=None):
         """
         create a revlog object
 
@@ -447,7 +447,9 @@
         and can be used to implement COW semantics or the like.
         """
         self.indexfile = indexfile
-        self.datafile = indexfile[:-2] + ".d"
+        if datafile is None:
+            datafile = indexfile[:-2] + ".d"
+        self.datafile = datafile
         self.opener = opener
         self._cache = None
         self._chunkcache = None

-- 
:wq


More information about the Mercurial-devel mailing list