contrib/undumprevlog
author Nikita Slyusarev <nslus@yandex-team.com>
Thu, 07 Feb 2019 18:57:54 +0300
changeset 41616 2c13e91ede6e
parent 39947 a063b84ce064
child 43659 99e231afc29c
permissions -rwxr-xr-x
convert: handle empty intial commits while converting to svn Svn commit generation code skips empty commits, returning the parent. Skipping the root commit must return None instead. Added test to check skipping of empty commits.

#!/usr/bin/env python
# Undump a dump from dumprevlog
# $ hg init
# $ undumprevlog < repo.dump

from __future__ import absolute_import, print_function

import sys
from mercurial import (
    encoding,
    node,
    pycompat,
    revlog,
    transaction,
    vfs as vfsmod,
)
from mercurial.utils import (
    procutil,
)

for fp in (sys.stdin, sys.stdout, sys.stderr):
    procutil.setbinary(fp)

opener = vfsmod.vfs(b'.', False)
tr = transaction.transaction(sys.stderr.write, opener, {b'store': opener},
                             b"undump.journal")
while True:
    l = sys.stdin.readline()
    if not l:
        break
    if l.startswith("file:"):
        f = encoding.strtolocal(l[6:-1])
        r = revlog.revlog(opener, f)
        pycompat.stdout.write(b'%s\n' % f)
    elif l.startswith("node:"):
        n = node.bin(l[6:-1])
    elif l.startswith("linkrev:"):
        lr = int(l[9:-1])
    elif l.startswith("parents:"):
        p = l[9:-1].split()
        p1 = node.bin(p[0])
        p2 = node.bin(p[1])
    elif l.startswith("length:"):
        length = int(l[8:-1])
        sys.stdin.readline() # start marker
        d = encoding.strtolocal(sys.stdin.read(length))
        sys.stdin.readline() # end marker
        r.addrevision(d, tr, lr, p1, p2)

tr.close()