convert-repo
author mpm@selenic.com
Mon, 23 May 2005 20:57:48 -0800
changeset 142 529bf610092e
parent 111 2c80f6f8fc08
permissions -rw-r--r--
Prettify the web interface Add header, footer templates Add null parent handling Combine files and directories Add parity flag for alternating line colors Add line numbers to filerevision
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
111
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
     1
#!/usr/bin/env python
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
     2
import sys, os, sha, base64, re
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
     3
from mercurial import hg
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
     4
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
     5
ui = hg.ui()
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
     6
repo = hg.repository(ui=ui)
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
     7
known = {}
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
     8
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
     9
def encodepath(path):
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    10
    s = sha.sha(path).digest()
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    11
    s = base64.encodestring(s)[:-3]
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    12
    s = re.sub("\+", "%", s)
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    13
    s = re.sub("/", "_", s)
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    14
    return s
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    15
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    16
for i in range(repo.changelog.count()):
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    17
    n = repo.changelog.node(i)
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    18
    changes = repo.changelog.read(n)
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    19
    for f in changes[3]:
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    20
        known[f] = 1
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    21
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    22
try:
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    23
    os.mkdir(".hg/data-new")
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    24
except:
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    25
    pass
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    26
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    27
files = known.keys()
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    28
files.sort()
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    29
for f in files:
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    30
    pb = ".hg/data/" + encodepath(f)
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    31
    pn = ".hg/data-new/" + f
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    32
    print f
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    33
    try:
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    34
        file(pn+".i", "w").write(file(pb+"i").read())
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    35
    except:
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    36
        os.makedirs(os.path.dirname(pn))
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    37
        # we actually copy the files to get nice disk layout
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    38
        file(pn+".i", "w").write(file(pb+"i").read())
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    39
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    40
    file(pn+".d", "w").write(file(pb).read())
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    41
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    42
os.rename(".hg/data", ".hg/data-old")
2c80f6f8fc08 Add script for doing conversion of repo from oldstyle to newstyle
mpm@selenic.com
parents:
diff changeset
    43
os.rename(".hg/data-new", ".hg/data")