Add script for doing conversion of repo from oldstyle to newstyle
authormpm@selenic.com
Fri, 20 May 2005 17:28:09 -0800
changeset 111 2c80f6f8fc08
parent 110 c37c7f784ee3
child 112 aea6562add6c
Add script for doing conversion of repo from oldstyle to newstyle
convert-repo
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/convert-repo	Fri May 20 17:28:09 2005 -0800
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+import sys, os, sha, base64, re
+from mercurial import hg
+
+ui = hg.ui()
+repo = hg.repository(ui=ui)
+known = {}
+
+def encodepath(path):
+    s = sha.sha(path).digest()
+    s = base64.encodestring(s)[:-3]
+    s = re.sub("\+", "%", s)
+    s = re.sub("/", "_", s)
+    return s
+
+for i in range(repo.changelog.count()):
+    n = repo.changelog.node(i)
+    changes = repo.changelog.read(n)
+    for f in changes[3]:
+        known[f] = 1
+
+try:
+    os.mkdir(".hg/data-new")
+except:
+    pass
+
+files = known.keys()
+files.sort()
+for f in files:
+    pb = ".hg/data/" + encodepath(f)
+    pn = ".hg/data-new/" + f
+    print f
+    try:
+        file(pn+".i", "w").write(file(pb+"i").read())
+    except:
+        os.makedirs(os.path.dirname(pn))
+        # we actually copy the files to get nice disk layout
+        file(pn+".i", "w").write(file(pb+"i").read())
+
+    file(pn+".d", "w").write(file(pb).read())
+
+os.rename(".hg/data", ".hg/data-old")
+os.rename(".hg/data-new", ".hg/data")