convert: acquire/release locks periodically
authorBryan O'Sullivan <bos@serpentine.com>
Thu, 26 Jul 2007 13:34:36 -0700
changeset 5014 914054ca532e
parent 5013 6c1029aacc9a
child 5015 cb100605a516
convert: acquire/release locks periodically
hgext/convert/__init__.py
hgext/convert/hg.py
--- a/hgext/convert/__init__.py	Thu Jul 26 13:34:36 2007 -0700
+++ b/hgext/convert/__init__.py	Thu Jul 26 13:34:36 2007 -0700
@@ -217,6 +217,7 @@
 
     def convert(self):
         try:
+            self.dest.before()
             self.source.setrevmap(self.map)
             self.ui.status("scanning source...\n")
             heads = self.source.getheads()
@@ -257,8 +258,9 @@
             self.cleanup()
 
     def cleanup(self):
-       if self.revmapfilefd:
-           self.revmapfilefd.close()
+        self.dest.after()
+        if self.revmapfilefd:
+            self.revmapfilefd.close()
 
 def _convert(ui, src, dest=None, revmapfile=None, **opts):
     """Convert a foreign SCM repository to a Mercurial one.
--- a/hgext/convert/hg.py	Thu Jul 26 13:34:36 2007 -0700
+++ b/hgext/convert/hg.py	Thu Jul 26 13:34:36 2007 -0700
@@ -8,8 +8,9 @@
 
 
 import os, time
+from mercurial.i18n import _
 from mercurial.node import *
-from mercurial import hg, revlog, util
+from mercurial import hg, lock, revlog, util
 
 from common import NoRepo, commit, converter_source, converter_sink
 
@@ -21,6 +22,16 @@
             self.repo = hg.repository(self.ui, path)
         except:
             raise NoRepo("could not open hg repo %s as sink" % path)
+        self.lock = None
+        self.wlock = None
+
+    def before(self):
+        self.lock = self.repo.lock()
+        self.wlock = self.repo.wlock()
+
+    def after(self):
+        self.lock = None
+        self.wlock = None
 
     def revmapfile(self):
         return os.path.join(self.path, ".hg", "shamap")
@@ -72,6 +83,7 @@
             p2 = parents.pop(0)
             a = self.repo.rawcommit(files, text, commit.author, commit.date,
                                     hg.bin(p1), hg.bin(p2), extra=extra)
+            self.repo.dirstate.invalidate()
             text = "(octopus merge fixup)\n"
             p2 = hg.hex(self.repo.changelog.tip())