[PATCH 2 of 4] Save a few opens on the map file

Edouard Gomez ed.gomez at free.fr
Tue Feb 6 15:14:07 CST 2007


# HG changeset patch
# User Edouard Gomez <ed.gomez at free.fr>
# Date 1170773210 -3600
# Node ID d9d0d9f3db675624e4f4308a0d732592eec703f7
# Parent  01c8007ecedc200615702f81d837cea3fd0f2edc
Save a few opens on the map file

Save a few opens on the map file adding a class attribute

diff -r 01c8007ecedc -r d9d0d9f3db67 contrib/convert-repo
--- a/contrib/convert-repo	Tue Feb 06 00:36:20 2007 +0100
+++ b/contrib/convert-repo	Tue Feb 06 15:46:50 2007 +0100
@@ -471,15 +471,18 @@ class convert:
 
         self.source = source
         self.dest = dest
-        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
 
@@ -555,6 +558,16 @@ class convert:
 
         return s
 
+    def mapentry(self, src, dst):
+        if self.mapfilefd is None:
+            try:
+                self.mapfilefd = open(self.mapfile, "a")
+            except IOError, (errno, strerror):
+                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)
@@ -570,8 +583,8 @@ class convert:
 
         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):
         status("scanning source...\n")
@@ -603,7 +616,11 @@ class convert:
             # 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 command(src, dest=None, mapfile=None, **opts):
     srcc = converter(src)
@@ -627,7 +644,10 @@ def command(src, dest=None, mapfile=None
             mapfile = os.path.join(destc, "map")
 
     c = convert(srcc, destc, mapfile, opts)
-    c.convert()
+    try:
+        c.convert()
+    finally:
+        c.cleanup()  
 
 options = [('q', 'quiet', None, 'suppress output'),
            ('', 'datesort', None, 'try to sort changesets by date')]


More information about the Mercurial-devel mailing list