mirror of
https://github.com/facebook/sapling.git
synced 2025-01-06 04:43:19 +03:00
Add script for doing conversion of repo from oldstyle to newstyle
This commit is contained in:
parent
c60581071a
commit
cb09188319
43
convert-repo
Normal file
43
convert-repo
Normal file
@ -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")
|
Loading…
Reference in New Issue
Block a user