contrib/compress.py
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
Sun, 22 Aug 2010 18:29:30 +0200
changeset 12018 fd206fabc14f
parent 12017 9182f434ec58
child 12019 456f0fed8f17
permissions -rw-r--r--
contrib/compress: proper lock handling Lock the src repo before beginning the compression and lock the destination repo before copying the revlogs. Proper handling of exceptions.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11933
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
     1
# Copyright 2010 Pradeepkumar Gayam <in3xes@gmail.com>
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
     2
#
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
     3
# Author(s):
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
     4
# Pradeepkumar Gayam <in3xes@gmail.com>
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
     5
#
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
     6
# This software may be used and distributed according to the terms of the
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
     7
# GNU General Public License version 2 or any later version.
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
     8
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
     9
12017
9182f434ec58 contrib/compress: use hg API to compute the destination path
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12016
diff changeset
    10
from mercurial import hg, changegroup, localrepo
12018
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    11
from mercurial.lock import release
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    12
import weakref
11933
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
    13
12015
73940fe84cbf contrib/compress: remove unused variables
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 11933
diff changeset
    14
def compress(ui, repo, dest):
12017
9182f434ec58 contrib/compress: use hg API to compute the destination path
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12016
diff changeset
    15
    dest = hg.localpath(ui.expandpath(dest))
9182f434ec58 contrib/compress: use hg API to compute the destination path
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12016
diff changeset
    16
    target = localrepo.instance(ui, dest, create=True)
12018
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    17
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    18
    tr = lock = tlock = None
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    19
    try:
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    20
        lock = repo.lock()
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    21
        tlock = target.lock()
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    22
        tr = target.transaction("compress")
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    23
        trp = weakref.proxy(tr)
11933
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
    24
12018
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    25
        src_cl = repo.changelog
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    26
        tar_cl = target.changelog
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    27
        changedfiles = set()
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    28
        mmfs = {}
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    29
        collect = changegroup.collector(src_cl, mmfs, changedfiles)
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    30
        total = len(repo)
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    31
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    32
        for r in src_cl:
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    33
            p = [src_cl.node(i) for i in src_cl.parentrevs(r)]
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    34
            nd = tar_cl.addrevision(src_cl.revision(src_cl.node(r)), trp,
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    35
                                     src_cl.linkrev(r), p[0], p[1])
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    36
            collect(nd)
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    37
            ui.progress(('adding changesets'), r, unit=('revisions'),
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    38
                        total=total)
11933
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
    39
12018
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    40
        src_mnfst = repo.manifest
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    41
        tar_mnfst = target.manifest
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    42
        for r in src_mnfst:
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    43
            p = [src_mnfst.node(i) for i in src_mnfst.parentrevs(r)]
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    44
            tar_mnfst.addrevision(src_mnfst.revision(src_mnfst.node(r)), trp,
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    45
                                   src_mnfst.linkrev(r), p[0], p[1])
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    46
            ui.progress(('adding manifest'), r, unit=('revisions'),
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    47
                        total=total)
11933
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
    48
12018
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    49
        total = len(changedfiles)
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    50
        for cnt, f in enumerate(changedfiles):
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    51
            sf = repo.file(f)
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    52
            tf = target.file(f)
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    53
            for r in sf:
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    54
                p = [sf.node(i) for i in sf.parentrevs(r)]
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    55
                tf.addrevision(sf.revision(sf.node(r)), trp, sf.linkrev(r),
11933
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
    56
                               p[0], p[1])
12018
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    57
            ui.progress(('adding files'), cnt, item=f, unit=('file'),
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    58
                        total=total)
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    59
        tr.close()
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    60
    finally:
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    61
        if tr:
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    62
            tr.release()
fd206fabc14f contrib/compress: proper lock handling
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 12017
diff changeset
    63
        release(tlock, lock)
11933
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
    64
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
    65
cmdtable = {
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
    66
    "compress" : (compress, [], "DEST")
293afcfb66a8 contrib: simple extension to practically convert a repo from tip delta to parentdelta
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
diff changeset
    67
    }