mercurial --> plain text --> mercurial
didier deshommes
dfdeshom at gmail.com
Thu Mar 27 13:31:48 CDT 2008
Matt Mackall <mpm <at> selenic.com> writes:
>
> Alright, here's a pair of scripts that will do end-to-end:
>
> diff -r bc142ee1522c contrib/dumprevlog
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/contrib/dumprevlog Thu Mar 27 12:40:17 2008 -0500
> @@ -0,0 +1,21 @@
> +#!/usr/bin/env python
> +# Dump revlogs as raw data stream
> +# $ find .hg/store/ -name "*.i" | xargs dumprevlog > repo.dump
> +
> +import sys
> +from mercurial import revlog, node
> +
> +for f in sys.argv[1:]:
> + r = revlog.revlog(open, f)
> + print "file:", f
> + for i in xrange(r.count()):
> + n = r.node(i)
> + p = r.parents(n)
> + d = r.revision(n)
> + print "node:", node.hex(n)
> + print "linkrev:", r.linkrev(n)
> + print "parents:", node.hex(p[0]), node.hex(p[1])
> + print "length:", len(d)
> + print "-start-"
> + print d
> + print "-end-"
> diff -r bc142ee1522c contrib/undumprevlog
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/contrib/undumprevlog Thu Mar 27 12:40:17 2008 -0500
> @@ -0,0 +1,34 @@
> +#!/usr/bin/env python
> +# Undump a dump from dumprevlog
> +# $ hg init
> +# $ undumprevlog < repo.dump
> +
> +import sys
> +from mercurial import revlog, node, util, transaction
> +
> +opener = util.opener('.', False)
> +tr = transaction.transaction(sys.stderr.write, opener, "undump.journal")
> +while 1:
> + 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()
The undump script is doing something, but after it's done, I'm still left with
an empty directory. Here's what I did:
$ ls #original hg repo
build dumprevlog MANIFEST.in sage spkg-debian-maybe
bundle dumprevlog~ mercurial-howto.txt sage-push spkg-delauto
c_lib export pull setupnb.py spkg-dist
debian install README.txt setup.py spkg-install
$ mv repo.dum ~/hg-test
$ hg init # new hg repo
$ undumprevlog < repo.dump
[...]
$ ls # where are all the files?
repo.dump undumprevlog
$ ls .hg/data/
boring.i commit.i MANIFEST.in.i README.i setup.py.i
build config.i mercurial-howto.txt.i README.txt.i
spkg-debian-maybe.i
bundle.i debian new.i sage spkg-delauto.i
changes.i doc notes.txt.i sage-push.i spkg-dist.i
c_lib export.i PKG-INFO.i setupnb.py.i spkg-install.i
cmfcore.tailor.i install.i pull.i setup.py.d test_changed.i
$ hg tip
changeset: -1:000000000000
tag: tip
user:
date: Thu Jan 01 00:00:00 1970 +0000
All of this is in the repo which is great, but I was expecting all the relevant
files to be restored, not just the repo.
didier
More information about the Mercurial
mailing list