Mercurial > hg > mercurial-crew-with-dirclash
comparison convert-repo @ 111:2c80f6f8fc08
Add script for doing conversion of repo from oldstyle to newstyle
author | mpm@selenic.com |
---|---|
date | Fri, 20 May 2005 17:28:09 -0800 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
110:c37c7f784ee3 | 111:2c80f6f8fc08 |
---|---|
1 #!/usr/bin/env python | |
2 import sys, os, sha, base64, re | |
3 from mercurial import hg | |
4 | |
5 ui = hg.ui() | |
6 repo = hg.repository(ui=ui) | |
7 known = {} | |
8 | |
9 def encodepath(path): | |
10 s = sha.sha(path).digest() | |
11 s = base64.encodestring(s)[:-3] | |
12 s = re.sub("\+", "%", s) | |
13 s = re.sub("/", "_", s) | |
14 return s | |
15 | |
16 for i in range(repo.changelog.count()): | |
17 n = repo.changelog.node(i) | |
18 changes = repo.changelog.read(n) | |
19 for f in changes[3]: | |
20 known[f] = 1 | |
21 | |
22 try: | |
23 os.mkdir(".hg/data-new") | |
24 except: | |
25 pass | |
26 | |
27 files = known.keys() | |
28 files.sort() | |
29 for f in files: | |
30 pb = ".hg/data/" + encodepath(f) | |
31 pn = ".hg/data-new/" + f | |
32 print f | |
33 try: | |
34 file(pn+".i", "w").write(file(pb+"i").read()) | |
35 except: | |
36 os.makedirs(os.path.dirname(pn)) | |
37 # we actually copy the files to get nice disk layout | |
38 file(pn+".i", "w").write(file(pb+"i").read()) | |
39 | |
40 file(pn+".d", "w").write(file(pb).read()) | |
41 | |
42 os.rename(".hg/data", ".hg/data-old") | |
43 os.rename(".hg/data-new", ".hg/data") |