# HG changeset patch # User Bryan O'Sullivan # Date 1185482076 25200 # Node ID 914054ca532eaeed3eb5744319d5af726b17f6d8 # Parent 6c1029aacc9a6b7552d05f107b073e01c7706182 convert: acquire/release locks periodically diff --git a/hgext/convert/__init__.py b/hgext/convert/__init__.py --- a/hgext/convert/__init__.py +++ b/hgext/convert/__init__.py @@ -217,6 +217,7 @@ class convert(object): 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 @@ class convert(object): 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. diff --git a/hgext/convert/hg.py b/hgext/convert/hg.py --- a/hgext/convert/hg.py +++ b/hgext/convert/hg.py @@ -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 @@ class mercurial_sink(converter_sink): 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 @@ class mercurial_sink(converter_sink): 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())