##// END OF EJS Templates
revlog: deal with special "postfix" explicitely...
revlog: deal with special "postfix" explicitely revlog usually use a straight forward '.i' and '.d' naming except for two cases "in-transaction" changelog, and censoring. Our goal is to let the revlog code deal with the internal of the file naming itself. To do so, we need to start dealing with these postfix explicitly. Differential Revision: https://phab.mercurial-scm.org/D10571

File last commit:

r47838:4c041c71 default
r47916:c6b8d5d9 default
Show More
undumprevlog
56 lines | 1.4 KiB | text/plain | TextLexer
#!/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])
r = revlog.revlog(
opener,
target=(revlog_constants.KIND_OTHER, b'undump-revlog'),
indexfile=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()