contrib/undumprevlog
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Thu, 04 Oct 2012 01:24:05 +0900
changeset 17717 009db477c9fb
parent 14233 659f34b833b9
child 19022 cba222f01056
permissions -rwxr-xr-x
help: add information about recovery from corruption to help of "verify" Before this patch, there is no information about what users should (or can) do for recovery from corruption of repositories. This patch adds URL of the Mercurial Wiki page explaining about recovery from corruption.

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

import sys
from mercurial import revlog, node, scmutil, util, transaction

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

opener = scmutil.opener('.', False)
tr = transaction.transaction(sys.stderr.write, opener, "undump.journal")
while 1:
    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()