mercurial --> plain text --> mercurial
Ondrej Certik
ondrej at certik.cz
Thu Mar 27 11:17:45 CDT 2008
On Thu, Mar 27, 2008 at 5:09 PM, Matt Mackall <mpm at selenic.com> wrote:
>
> On Thu, 2008-03-27 at 14:24 +0000, didier deshommes wrote:
> > Hi everyone,
> > Sage (http://www.sagemath.org/) uses hg for its source control and recently a
> > question has come up about the possibility of doing the following:
> >
> > (1) export everything in the .hg repo to something (perhaps a ton of
> > stuff) in plain text format,
> > (2) delete .hg/ directory
> > (3) do something that recovers the .hg/ directory from the output of (1).
>
> This will work for the export side:
>
> #!/usr/bin/env python
> 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(i)
> 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-"
>
> Then you can do something like:
>
> find .hg/store -name "*.i" | xargs ./dumprevlog > repo.dump
>
> This will make a nice flat, uncompressed file with everything you need
> to reconstruct a repo. But it'll be huge. The mercurial repo goes from
> 11MB to 435MB. Other projects will get -much- bigger; I've seen large
> revlogs with compression ratios of > 1000:1.
>
> I'm too busy to write the import side of this today, but it'll be about
> as long. And you shouldn't actually need that piece if you only need to
> scan the dump.
They also want to make sure, there are no "hidden" things in the
mercurial repo, so the reconstruction is needed too.
Thanks a lot for the patch.
Ondrej
More information about the Mercurial
mailing list