view contrib/dumprevlog @ 48055:84e7a86e3a63

dirstate: simplify the ambiguity clearing at write time The serialization function is already doing this, so we don't need to do it manually. We just need to propagate the right definition of "now". Differential Revision: https://phab.mercurial-scm.org/D11501
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 22 Sep 2021 14:54:42 +0200
parents 5d5abfdc32d8
children 6000f5b25c9b
line wrap: on
line source

#!/usr/bin/env python3
# Dump revlogs as raw data stream
# $ find .hg/store/ -name "*.i" | xargs dumprevlog > repo.dump

from __future__ import absolute_import, print_function

import sys
from mercurial.node import hex
from mercurial import (
    encoding,
    pycompat,
    revlog,
)
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)


def binopen(path, mode=b'rb'):
    if b'b' not in mode:
        mode = mode + b'b'
    return open(path, pycompat.sysstr(mode))


binopen.options = {}


def printb(data, end=b'\n'):
    sys.stdout.flush()
    procutil.stdout.write(data + end)


for f in sys.argv[1:]:
    localf = encoding.strtolocal(f)
    if not localf.endswith(b'.i'):
        print("file:", f, file=sys.stderr)
        print("  invalid filename", file=sys.stderr)

    r = revlog.revlog(
        binopen,
        target=(revlog_constants.KIND_OTHER, b'dump-revlog'),
        radix=localf[:-2],
    )
    print("file:", f)
    for i in r:
        n = r.node(i)
        p = r.parents(n)
        d = r.revision(n)
        printb(b"node: %s" % hex(n))
        printb(b"linkrev: %d" % r.linkrev(i))
        printb(b"parents: %s %s" % (hex(p[0]), hex(p[1])))
        printb(b"length: %d" % len(d))
        printb(b"-start-")
        printb(d)
        printb(b"-end-")