view contrib/undumprevlog @ 47170:6e0ee1810fbd

revlog: rename `versionflags` to header The variable is named as such because it contains "version" information and "flags" information. However you mostly needs to know the code to understand the name which is not great. The fact that this is the very first four bytes in all revlog seems more relevant, so we rename the variable "header". Differential Revision: https://phab.mercurial-scm.org/D10596
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 03 May 2021 12:26:06 +0200
parents 8d3c2f9d4af7
children 6000f5b25c9b
line wrap: on
line source

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

from __future__ import absolute_import, print_function

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()