>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 [email protected]
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
-~----------~----~----~----~------~----~------~--~---