[PATCH] convert: automatically regenerate '.hg/shamap' if missing
Dan Villiom Podlaski Christiansen
danchr at gmail.com
Fri Aug 14 13:43:48 CDT 2009
# HG changeset patch
# User Dan Villiom Podlaski Christiansen <danchr at gmail.com>
# Date 1250085414 -7200
# Node ID a1dc369ffd49fc1e3081a98c5f5d493e1613296e
# Parent 46524d942ae7937154595b3facea5d34df55c0e3
convert: automatically regenerate '.hg/shamap' if missing.
diff --git a/hgext/convert/hg.py b/hgext/convert/hg.py
--- a/hgext/convert/hg.py
+++ b/hgext/convert/hg.py
@@ -23,7 +23,7 @@ from mercurial.i18n import _
from mercurial.node import bin, hex, nullid
from mercurial import hg, util, context, error
-from common import NoRepo, commit, converter_source, converter_sink
+from common import NoRepo, commit, mapfile, converter_source, converter_sink
class mercurial_sink(converter_sink):
def __init__(self, ui, path):
@@ -65,7 +65,27 @@ class mercurial_sink(converter_sink):
self.wlock.release()
def revmapfile(self):
- return self.repo.join("shamap")
+ revmapfile = self.repo.join("shamap")
+
+ if (self.filemapmode and len(self.repo)
+ and not os.path.exists(revmapfile)):
+ self.ui.status(_('regenerating revision map...\n'))
+ revmap = mapfile(self.ui, revmapfile)
+ try:
+ for rev in self.repo:
+ if rev and not rev % 10000:
+ self.ui.status('%i revisions read...\n' % rev)
+ context = self.repo[rev]
+ extra = context.extra()
+ if 'convert_revision' in extra:
+ revmap[extra['convert_revision']] = context.hex()
+ revmap.close()
+ except KeyboardInterrupt:
+ revmap.close()
+ os.remove(revmapfile)
+ raise
+
+ return revmapfile
def authorfile(self):
return self.repo.join("authormap")
More information about the Mercurial-devel
mailing list