view contrib/compress.py @ 12017:9182f434ec58

contrib/compress: use hg API to compute the destination path
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Sun, 22 Aug 2010 18:23:32 +0200
parents 705425f297a8
children fd206fabc14f
line wrap: on
line source

# Copyright 2010 Pradeepkumar Gayam <in3xes@gmail.com>
#
# Author(s):
# Pradeepkumar Gayam <in3xes@gmail.com>
#
# 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, changegroup, localrepo

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)

    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)]
            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")
    }