Mercurial > hg
annotate convert-repo @ 190:3dd5ce2fddb6
merge: short-circuit search for merge into empty repo
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
merge: short-circuit search for merge into empty repo
We should have 3 cases for merge:
- - we have no changesets
- - we have less than half the changesets
- - we have more than half the changesets
For no changesets, we can immediately tell that we need everything.
This happens when we initially branch from a remote repo, so we simply shortcircuit the search and grab everything from the root
When we're actually tracking a project, we should generally have most
of the changesets, so the current search algorithm should minimize
searching.
It should rarely occur that upstreams gets far ahead of us, in which
case, we suffer a longer search.
manifest hash: eabd55841b03225176ea72b985aad36431a438a9
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.0 (GNU/Linux)
iD8DBQFCmfajywK+sNU5EO8RAuyKAKCf7Nw6XSK5HEzbrZae7Q06e3dk4wCgjbK6
YUTEfkpPP1h3mNHIHRKz+aI=
=eGMq
-----END PGP SIGNATURE-----
author | mpm@selenic.com |
---|---|
date | Sun, 29 May 2005 09:06:43 -0800 |
parents | 2c80f6f8fc08 |
children |
rev | line source |
---|---|
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") |