Mercurial > hg
view contrib/undumprevlog @ 51547:8e2a68e10f5c
stream: in v3, skip the "size" fast path if the entries as some unknown size
We are about to prefetch size during the lock less in the v3 case. So we need to
avoid trying to use that prefetched size when it is not available.
See next changeset for the motivation.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 26 Mar 2024 18:55:40 +0000 |
parents | 6000f5b25c9b |
children |
line wrap: on
line source
#!/usr/bin/env python3 # Undump a dump from dumprevlog # $ hg init # $ undumprevlog < repo.dump 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()