mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 00:14:35 +03:00
53a1a60278
The goal is to allow access to file outside ofthe store directory from the transaction. The obvious target are the `bookmarks` file. But we can envision usage for cache too. We keep passing a main opener explicitly because a lot of code rely on this default opener. The main opener (operating on store) is using an empty key ''.
39 lines
1.0 KiB
Python
Executable File
39 lines
1.0 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# Undump a dump from dumprevlog
|
|
# $ hg init
|
|
# $ undumprevlog < repo.dump
|
|
|
|
import sys
|
|
from mercurial import revlog, node, scmutil, util, transaction
|
|
|
|
for fp in (sys.stdin, sys.stdout, sys.stderr):
|
|
util.setbinary(fp)
|
|
|
|
opener = scmutil.opener('.', False)
|
|
tr = transaction.transaction(sys.stderr.write, opener, {'store': opener},
|
|
"undump.journal")
|
|
while True:
|
|
l = sys.stdin.readline()
|
|
if not l:
|
|
break
|
|
if l.startswith("file:"):
|
|
f = l[6:-1]
|
|
r = revlog.revlog(opener, f)
|
|
print f
|
|
elif l.startswith("node:"):
|
|
n = node.bin(l[6:-1])
|
|
elif l.startswith("linkrev:"):
|
|
lr = int(l[9:-1])
|
|
elif l.startswith("parents:"):
|
|
p = l[9:-1].split()
|
|
p1 = node.bin(p[0])
|
|
p2 = node.bin(p[1])
|
|
elif l.startswith("length:"):
|
|
length = int(l[8:-1])
|
|
sys.stdin.readline() # start marker
|
|
d = sys.stdin.read(length)
|
|
sys.stdin.readline() # end marker
|
|
r.addrevision(d, tr, lr, p1, p2)
|
|
|
|
tr.close()
|