[PATCH 3 of 6] Save a few opens on the map file
Edouard Gomez
ed.gomez at free.fr
Thu Jun 7 16:50:20 CDT 2007
# HG changeset patch
# User Edouard Gomez <ed.gomez at free.fr>
# Date 1181250962 -7200
# Node ID 8b4f7b0f7b0d92883ef7063e8b164f2564cd1716
# Parent ae8e8b8507aaac03d101829fb8e51cad73cd4edf
Save a few opens on the map file
Save a few opens on the map file adding a class attribute
diff --git a/hgext/convert/__init__.py b/hgext/convert/__init__.py
--- a/hgext/convert/__init__.py
+++ b/hgext/convert/__init__.py
@@ -536,15 +536,18 @@ class convert(object):
self.source = source
self.dest = dest
self.ui = ui
- self.mapfile = mapfile
self.opts = opts
self.commitcache = {}
+ self.mapfile = mapfile
+ self.mapfilefd = None
self.map = {}
try:
- for l in file(self.mapfile):
+ origmapfile = open(self.mapfile, 'r')
+ for l in origmapfile:
sv, dv = l[:-1].split()
self.map[sv] = dv
+ origmapfile.close()
except IOError:
pass
@@ -620,6 +623,16 @@ class convert(object):
return s
+ def mapentry(self, src, dst):
+ if self.mapfilefd is None:
+ try:
+ self.mapfilefd = open(self.mapfile, "a")
+ except IOError, (errno, strerror):
+ raise util.Abort("Could not open map file %s: %s, %s\n" % (self.mapfile, errno, strerror))
+ self.map[src] = dst
+ self.mapfilefd.write("%s %s\n" % (src, dst))
+ self.mapfilefd.flush()
+
def copy(self, rev):
c = self.commitcache[rev]
files = self.source.getchanges(rev)
@@ -635,8 +648,8 @@ class convert(object):
r = [self.map[v] for v in c.parents]
f = [f for f,v in files]
- self.map[rev] = self.dest.putcommit(f, r, c)
- file(self.mapfile, "a").write("%s %s\n" % (rev, self.map[rev]))
+ newnode = self.dest.putcommit(f, r, c)
+ self.mapentry(rev, newnode)
def convert(self):
self.ui.status("scanning source...\n")
@@ -668,7 +681,11 @@ class convert(object):
# write another hash correspondence to override the previous
# one so we don't end up with extra tag heads
if nrev:
- file(self.mapfile, "a").write("%s %s\n" % (c, nrev))
+ self.mapentry(c, nrev)
+
+ def cleanup(self):
+ if self.mapfilefd:
+ self.mapfilefd.close()
def _convert(ui, src, dest=None, mapfile=None, **opts):
'''Convert a foreign SCM repository to a Mercurial one.
@@ -715,7 +732,10 @@ def _convert(ui, src, dest=None, mapfile
mapfile = os.path.join(destc, "map")
c = convert(ui, srcc, destc, mapfile, opts)
- c.convert()
+ try:
+ c.convert()
+ finally:
+ c.cleanup()
cmdtable = {
"convert": (_convert,
More information about the Mercurial-devel
mailing list