convert-repo
author mpm@selenic.com
Wed, 01 Jun 2005 11:11:19 -0800
changeset 212 48398a5353e3
parent 111 2c80f6f8fc08
permissions -rw-r--r--
commands: better argument processing, per-command help -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 commands: better argument processing, per-command help This passes command line arguments as positional arguments rather than as a list and attempt to catch exceptions if the arguments don't match up. It also adds 'hg help [cmd]' which prints the syntax and docstring for the given command. manifest hash: cef3ac7076f99fce4265a5dc7acb57fb03d93270 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCnghXywK+sNU5EO8RAv+5AJ9MfCCRxE+pNu3i44v5I4IyQoRaiQCeNqEK wBzAiP+Q6F/9PL2xOrrZGHw= =EYdk -----END PGP SIGNATURE-----
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")