contrib/undumprevlog
author Matt Harbison <matt_harbison@yahoo.com>
Sun, 10 Dec 2017 22:45:35 -0500
changeset 35399 5feb782c7a95
parent 33891 5d9890d8ca77
child 37123 a8a902d7176e
permissions -rwxr-xr-x
check-code: drop the rules for adding (glob) for Windows paths I'll probably resurrect at least some of these as replacement patterns to switch '\' to '/' when creating tests at some point. But since this subset of globs isn't needed anymore after dfae14354660, and the rules are blocking the glob removal, just drop them for now. It probably isn't worth turning them into checks for unnecessary globs being present.

#!/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 (
    node,
    revlog,
    transaction,
    util,
    vfs as vfsmod,
)

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

opener = vfsmod.vfs('.', False)
tr = transaction.transaction(sys.stderr.write, opener, {'store': opener},
                             "undump.journal")
while True:
    l = sys.stdin.readline()
    if not l:
        break
    if l.startswith("file:"):
        f = l[6:-1]
        r = revlog.revlog(opener, f)
        print(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 = sys.stdin.read(length)
        sys.stdin.readline() # end marker
        r.addrevision(d, tr, lr, p1, p2)

tr.close()