>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
-~----------~----~----~----~------~----~------~--~---

Reply via email to