convert-repo
author mpm@selenic.com
Fri, 03 Jun 2005 12:43:16 -0800
changeset 224 ccbcc4d76f81
parent 111 2c80f6f8fc08
permissions -rw-r--r--
fix bad assumption about uniqueness of file versions -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 fix bad assumption about uniqueness of file versions Mercurial had assumed that a given file hash could show up in only one changeset, and thus that the mapping from file revision to changeset was 1-to-1. But if two people perform the same edit with the same parents, we can get an identical hash in different changesets. So we've got to loosen up our uniqueness checks in addgroup and in verify. manifest hash: 5462003241e7d071ffa1741b87a59f646c9988ed -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCoMDkywK+sNU5EO8RAg9PAJ9YWSknfFBoeYve/+Z5DDGGvytDkwCgoMwj kT01PcjNzGPr1/Oe5WRvulE= =HC4t -----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")