--- a/contrib/compress.py Sun Aug 22 18:23:32 2010 +0200
+++ b/contrib/compress.py Sun Aug 22 18:29:30 2010 +0200
@@ -8,46 +8,59 @@
from mercurial import hg, changegroup, localrepo
+from mercurial.lock import release
+import weakref
def compress(ui, repo, dest):
dest = hg.localpath(ui.expandpath(dest))
target = localrepo.instance(ui, dest, create=True)
- tr = target.transaction("compress")
- src_cl = repo.changelog
- tar_cl = target.changelog
- changedfiles = set()
- mmfs = {}
- collect = changegroup.collector(src_cl, mmfs, changedfiles)
- total = len(repo)
+
+ tr = lock = tlock = None
+ try:
+ lock = repo.lock()
+ tlock = target.lock()
+ tr = target.transaction("compress")
+ trp = weakref.proxy(tr)
- for r in src_cl:
- p = [src_cl.node(i) for i in src_cl.parentrevs(r)]
- nd = tar_cl.addrevision(src_cl.revision(src_cl.node(r)), tr,
- src_cl.linkrev(r), p[0], p[1])
- collect(nd)
- ui.progress(('adding changesets'), r, unit=('revisions'),
- total=total)
+ src_cl = repo.changelog
+ tar_cl = target.changelog
+ changedfiles = set()
+ mmfs = {}
+ collect = changegroup.collector(src_cl, mmfs, changedfiles)
+ total = len(repo)
+
+ for r in src_cl:
+ p = [src_cl.node(i) for i in src_cl.parentrevs(r)]
+ nd = tar_cl.addrevision(src_cl.revision(src_cl.node(r)), trp,
+ src_cl.linkrev(r), p[0], p[1])
+ collect(nd)
+ ui.progress(('adding changesets'), r, unit=('revisions'),
+ total=total)
- src_mnfst = repo.manifest
- tar_mnfst = target.manifest
- for r in src_mnfst:
- p = [src_mnfst.node(i) for i in src_mnfst.parentrevs(r)]
- tar_mnfst.addrevision(src_mnfst.revision(src_mnfst.node(r)), tr,
- src_mnfst.linkrev(r), p[0], p[1])
- ui.progress(('adding manifest'), r, unit=('revisions'),
- total=total)
+ src_mnfst = repo.manifest
+ tar_mnfst = target.manifest
+ for r in src_mnfst:
+ p = [src_mnfst.node(i) for i in src_mnfst.parentrevs(r)]
+ tar_mnfst.addrevision(src_mnfst.revision(src_mnfst.node(r)), trp,
+ src_mnfst.linkrev(r), p[0], p[1])
+ ui.progress(('adding manifest'), r, unit=('revisions'),
+ total=total)
- total = len(changedfiles)
- for cnt, f in enumerate(changedfiles):
- sf = repo.file(f)
- tf = target.file(f)
- for r in sf:
- p = [sf.node(i) for i in sf.parentrevs(r)]
- tf.addrevision(sf.revision(sf.node(r)), tr, sf.linkrev(r),
+ total = len(changedfiles)
+ for cnt, f in enumerate(changedfiles):
+ sf = repo.file(f)
+ tf = target.file(f)
+ for r in sf:
+ p = [sf.node(i) for i in sf.parentrevs(r)]
+ tf.addrevision(sf.revision(sf.node(r)), trp, sf.linkrev(r),
p[0], p[1])
- ui.progress(('adding files'), cnt, item=f, unit=('file'), total=total)
-
- tr.close()
+ ui.progress(('adding files'), cnt, item=f, unit=('file'),
+ total=total)
+ tr.close()
+ finally:
+ if tr:
+ tr.release()
+ release(tlock, lock)
cmdtable = {
"compress" : (compress, [], "DEST")