view contrib/undumprevlog @ 47051:de26b9a7ec29 stable

git: consistently use str for parents when rebuilding the index database The tests show no changes, but when these values are overwritten shortly after when a git commit object is available, that uses str. It seems better to use that for consistency. It does materially affect the database though, because the old value stored was `X'3030..3030'` and is now '00..00' when the changelog table is dumped in sqlite3. There is one query that specifies the parents, but it passes the non null hashes as str, so it worked as expected. That likely explains the lack of test changes. Differential Revision: https://phab.mercurial-scm.org/D10527
author Matt Harbison <matt_harbison@yahoo.com>
date Tue, 27 Apr 2021 18:39:59 -0400
parents 59fa3890d40a
children 4c041c71ec01
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

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])
        r = revlog.revlog(opener, f)
        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()