>From the scripts below I was able to dump a text version of the SAGE repo and recover it to make another hg repo out of it. This requires: - mercurial 1.0 - a change in the layout of the sage repo. It's not too hard: hg clone --pull $SAGE_REPO will create an exact copy of the repository in the new format.
Here's what I did: $ pwd # old repo old-hg/ $ find .hg/store/ -name "*.i" | xargs dumprevlog > repo.dump $ cd ~/new-hg # new repo $ hg init $ undumprevlog < ~/old-repo/repo.dump [stuff happens...] $ hg tip dfdeshom <at> sage:~/new-hg$ hg tip changeset: 8962:211b127eab5d tag: tip user: William Stein <wstein <at> gmail.com> date: Mon Mar 17 16:03:46 2008 -0700 files: sage/rings/polynomial/multi_polynomial_element.py sage/version.py description: 2.10.4 And doing hg co will re-populate this directory. And it looks like these scripts will be incorporated in the new version of hg (in /contribs/ I guess). Thanks to Matt for his quick response! didier ---------- Forwarded message ---------- From: Matt Mackall <[EMAIL PROTECTED]> Date: Thu, Mar 27, 2008 at 1:49 PM Subject: Re: mercurial --> plain text --> mercurial To: didier deshommes <[EMAIL PROTECTED]> Cc: [EMAIL PROTECTED] 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() Tested on the Mercurial repo. ps: making this work on systems that have braindead notions about text vs binary files is an exercise left to the reader -- Mathematics is the supreme nostalgia of our time. --~--~---------~--~----~------------~-------~--~----~ To post to this group, send email to sage-devel@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~----------~----~----~----~------~----~------~--~---