# HG changeset patch # User Pradeepkumar Gayam # Date 2010-08-10 16:58:30 # Node ID 293afcfb66a837df6ffc61fcdda82a2ad7a713ff # Parent 01778673aab72d3abc3f3224b10d7ccde10dec61 contrib: simple extension to practically convert a repo from tip delta to parentdelta diff --git a/contrib/compress.py b/contrib/compress.py new file mode 100644 --- /dev/null +++ b/contrib/compress.py @@ -0,0 +1,57 @@ +# Copyright 2010 Pradeepkumar Gayam +# +# Author(s): +# Pradeepkumar Gayam +# +# This software may be used and distributed according to the terms of the +# GNU General Public License version 2 or any later version. + + +from mercurial import hg, ui, transaction, util, changegroup, localrepo, merge +import sys, os + +def compress(ui, repo, dest, **opts): + dest = os.path.realpath(util.expandpath(dest)) + target = localrepo.instance(ui, dest, create=1) + tr = transaction.transaction(sys.stderr.write, + util.opener('.', False), "compress") + src_cl = repo.changelog + tar_cl = target.changelog + changedfiles = set() + mmfs = {} + collect = changegroup.collector(src_cl, mmfs, changedfiles) + total = len(repo) + opener = target.sopener + + 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_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) + + 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)] + a = tf.addrevision(sf.revision(sf.node(r)), tr, sf.linkrev(r), + p[0], p[1]) + ui.progress(('adding files'), cnt, item=f, unit=('file'), total=total) + + tr.close() + +cmdtable = { + "compress" : (compress, [], "DEST") + }