[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