view contrib/undumprevlog @ 49764:e300f445ca77

delta-find: add a test checking various simple behavior There are enough work happening in this area that it is worth having a dedicated test for it. So far we add to small test checking that the "best" parent is picked as the delta base and that this behavior can be controlled during commit and unbundle.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 05 Dec 2022 03:23:46 +0100
parents 6000f5b25c9b
children
line wrap: on
line source

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


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

from mercurial.revlogutils import (
    constants as revlog_constants,
)

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])
        assert f.endswith(b'.i')
        r = revlog.revlog(
            opener,
            target=(revlog_constants.KIND_OTHER, b'undump-revlog'),
            radix=f[:-2],
        )
        procutil.stdout.write(b'%s\n' % f)
    elif l.startswith("node:"):
        n = bin(l[6:-1])
    elif l.startswith("linkrev:"):
        lr = int(l[9:-1])
    elif l.startswith("parents:"):
        p = l[9:-1].split()
        p1 = bin(p[0])
        p2 = 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()