Mercurial > hg
annotate contrib/shrink-revlog.py @ 11320:e4274f9f97c8
keyword: pass context to kwtemplater.overwrite
Now that we have retrieved the context in every calling function
except commit, pass it as argument to kwtemplater.overwrite to
avoid looking it up twice.
Reorder arguments to kwtemplater.overwrite to reflect their
importance.
Turn node argument into a simple boolean and rename it to iswctx.
author | Christian Ebert <blacktrash@gmx.net> |
---|---|
date | Wed, 09 Jun 2010 12:45:48 +0100 |
parents | 3e46d76eaabf |
children | 44c7dfc2f6a3 |
rev | line source |
---|---|
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
2 |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
3 """\ |
10236
49a8625b8cac
shrink-revlog: help/doc tweaks
Greg Ward <greg-hg@gerg.ca>
parents:
10234
diff
changeset
|
4 reorder a revlog (the manifest by default) to save space |
49a8625b8cac
shrink-revlog: help/doc tweaks
Greg Ward <greg-hg@gerg.ca>
parents:
10234
diff
changeset
|
5 |
49a8625b8cac
shrink-revlog: help/doc tweaks
Greg Ward <greg-hg@gerg.ca>
parents:
10234
diff
changeset
|
6 Specifically, this topologically sorts the revisions in the revlog so that |
49a8625b8cac
shrink-revlog: help/doc tweaks
Greg Ward <greg-hg@gerg.ca>
parents:
10234
diff
changeset
|
7 revisions on the same branch are adjacent as much as possible. This is a |
49a8625b8cac
shrink-revlog: help/doc tweaks
Greg Ward <greg-hg@gerg.ca>
parents:
10234
diff
changeset
|
8 workaround for the fact that Mercurial computes deltas relative to the |
10216
843f6ee6d14b
contrib: small documentation fixes in shrink-revlog.py
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10215
diff
changeset
|
9 previous revision rather than relative to a parent revision. |
843f6ee6d14b
contrib: small documentation fixes in shrink-revlog.py
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10215
diff
changeset
|
10 |
843f6ee6d14b
contrib: small documentation fixes in shrink-revlog.py
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10215
diff
changeset
|
11 This is *not* safe to run on a changelog. |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
12 """ |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
13 |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
14 # Originally written by Benoit Boissinot <benoit.boissinot at ens-lyon.org> |
10216
843f6ee6d14b
contrib: small documentation fixes in shrink-revlog.py
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10215
diff
changeset
|
15 # as a patch to rewrite-log. Cleaned up, refactored, documented, and |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
16 # renamed by Greg Ward <greg at gerg.ca>. |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
17 |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
18 # XXX would be nice to have a way to verify the repository after shrinking, |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
19 # e.g. by comparing "before" and "after" states of random changesets |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
20 # (maybe: export before, shrink, export after, diff). |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
21 |
10542
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
22 import os, tempfile, errno |
10509
3e7e789d9494
shrink-revlog: remove unneeded imports and useless code
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10508
diff
changeset
|
23 from mercurial import revlog, transaction, node, util |
10009
69dca8574a6a
shrink-revlog: improve performance: use changegroup instead of revisions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9712
diff
changeset
|
24 from mercurial import changegroup |
10508
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
25 from mercurial.i18n import _ |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
26 |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
27 |
10627
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
28 def postorder(start, edges): |
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
29 result = [] |
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
30 visit = list(start) |
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
31 finished = set() |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
32 |
10627
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
33 while visit: |
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
34 cur = visit[-1] |
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
35 for p in edges[cur]: |
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
36 if p not in finished: |
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
37 visit.append(p) |
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
38 break |
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
39 else: |
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
40 result.append(cur) |
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
41 finished.add(cur) |
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
42 visit.pop() |
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
43 |
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
44 return result |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
45 |
10623
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
46 def toposort_reversepostorder(ui, rl): |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
47 # postorder of the reverse directed graph |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
48 |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
49 # map rev to list of parent revs (p2 first) |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
50 parents = {} |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
51 heads = set() |
10508
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
52 ui.status(_('reading revs\n')) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
53 try: |
10623
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
54 for rev in rl: |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
55 ui.progress(_('reading'), rev, total=len(rl)) |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
56 (p1, p2) = rl.parentrevs(rev) |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
57 if p1 == p2 == node.nullrev: |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
58 parents[rev] = () # root node |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
59 elif p1 == p2 or p2 == node.nullrev: |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
60 parents[rev] = (p1,) # normal node |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
61 else: |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
62 parents[rev] = (p2, p1) # merge node |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
63 heads.add(rev) |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
64 for p in parents[rev]: |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
65 heads.discard(p) |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
66 finally: |
10724
cb0a7faa29ea
progress: drop extra args for pos=None calls (issue2087)
Matt Mackall <mpm@selenic.com>
parents:
10655
diff
changeset
|
67 ui.progress(_('reading'), None) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
68 |
10627
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
69 heads = list(heads) |
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
70 heads.sort(reverse=True) |
10623
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
71 |
10627
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
72 ui.status(_('sorting revs\n')) |
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
73 return postorder(heads, parents) |
10623
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
74 |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
75 def toposort_postorderreverse(ui, rl): |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
76 # reverse-postorder of the reverse directed graph |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
77 |
10623
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
78 children = {} |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
79 roots = set() |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
80 ui.status(_('reading revs\n')) |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
81 try: |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
82 for rev in rl: |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
83 ui.progress(_('reading'), rev, total=len(rl)) |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
84 (p1, p2) = rl.parentrevs(rev) |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
85 if p1 == p2 == node.nullrev: |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
86 roots.add(rev) |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
87 children[rev] = [] |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
88 if p1 != node.nullrev: |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
89 children[p1].append(rev) |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
90 if p2 != node.nullrev: |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
91 children[p2].append(rev) |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
92 finally: |
10724
cb0a7faa29ea
progress: drop extra args for pos=None calls (issue2087)
Matt Mackall <mpm@selenic.com>
parents:
10655
diff
changeset
|
93 ui.progress(_('reading'), None) |
10623
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
94 |
11298
3e46d76eaabf
shrink-repo: wrong variable name
Pradeepkumar Gayam <in3xes@gmail.com>
parents:
11294
diff
changeset
|
95 roots = list(roots) |
10627
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
96 roots.sort() |
10624
432eb853a2c6
shrink-revlog: add accounting of suboptimal nodes to the new algorithms.
Greg Ward <greg-hg@gerg.ca>
parents:
10623
diff
changeset
|
97 |
10508
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
98 ui.status(_('sorting revs\n')) |
10627
adcd5bcb37ab
shrink-revlog: factor out postorder algorithm
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10626
diff
changeset
|
99 result = postorder(roots, children) |
10623
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
100 result.reverse() |
64e286c22f29
shrink-revlog: add "reverse postorder" and "postorder reverse" toposorts.
Greg Ward <greg-hg@gerg.ca>
parents:
10622
diff
changeset
|
101 return result |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
102 |
10213
9e6848f352b0
contrib: use ui to write in shrink-revlog.py
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10009
diff
changeset
|
103 def writerevs(ui, r1, r2, order, tr): |
10009
69dca8574a6a
shrink-revlog: improve performance: use changegroup instead of revisions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9712
diff
changeset
|
104 |
10508
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
105 ui.status(_('writing revs\n')) |
10440
b39b32c33269
shrink: use progress API
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
106 |
10009
69dca8574a6a
shrink-revlog: improve performance: use changegroup instead of revisions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9712
diff
changeset
|
107 count = [0] |
69dca8574a6a
shrink-revlog: improve performance: use changegroup instead of revisions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9712
diff
changeset
|
108 def progress(*args): |
10496
45734b51c99b
progress: mark strings for translation
Martin Geisler <mg@lazybytes.net>
parents:
10440
diff
changeset
|
109 ui.progress(_('writing'), count[0], total=len(order)) |
10009
69dca8574a6a
shrink-revlog: improve performance: use changegroup instead of revisions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9712
diff
changeset
|
110 count[0] += 1 |
69dca8574a6a
shrink-revlog: improve performance: use changegroup instead of revisions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9712
diff
changeset
|
111 |
69dca8574a6a
shrink-revlog: improve performance: use changegroup instead of revisions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9712
diff
changeset
|
112 order = [r1.node(r) for r in order] |
69dca8574a6a
shrink-revlog: improve performance: use changegroup instead of revisions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9712
diff
changeset
|
113 |
69dca8574a6a
shrink-revlog: improve performance: use changegroup instead of revisions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9712
diff
changeset
|
114 # this is a bit ugly, but it works |
69dca8574a6a
shrink-revlog: improve performance: use changegroup instead of revisions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9712
diff
changeset
|
115 lookup = lambda x: "%020d" % r1.linkrev(r1.rev(x)) |
69dca8574a6a
shrink-revlog: improve performance: use changegroup instead of revisions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9712
diff
changeset
|
116 unlookup = lambda x: int(x, 10) |
69dca8574a6a
shrink-revlog: improve performance: use changegroup instead of revisions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9712
diff
changeset
|
117 |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
118 try: |
10009
69dca8574a6a
shrink-revlog: improve performance: use changegroup instead of revisions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9712
diff
changeset
|
119 group = util.chunkbuffer(r1.group(order, lookup, progress)) |
69dca8574a6a
shrink-revlog: improve performance: use changegroup instead of revisions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9712
diff
changeset
|
120 chunkiter = changegroup.chunkiter(group) |
69dca8574a6a
shrink-revlog: improve performance: use changegroup instead of revisions
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
9712
diff
changeset
|
121 r2.addgroup(chunkiter, unlookup, tr) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
122 finally: |
10724
cb0a7faa29ea
progress: drop extra args for pos=None calls (issue2087)
Matt Mackall <mpm@selenic.com>
parents:
10655
diff
changeset
|
123 ui.progress(_('writing'), None) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
124 |
10542
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
125 def report(ui, r1, r2): |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
126 def getsize(r): |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
127 s = 0 |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
128 for fn in (r.indexfile, r.datafile): |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
129 try: |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
130 s += os.stat(fn).st_size |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
131 except OSError, inst: |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
132 if inst.errno != errno.ENOENT: |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
133 raise |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
134 return s |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
135 |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
136 oldsize = float(getsize(r1)) |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
137 newsize = float(getsize(r2)) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
138 |
9712
18b134ef294c
kill trailing whitespace
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
9515
diff
changeset
|
139 # argh: have to pass an int to %d, because a float >= 2^32 |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
140 # blows up under Python 2.5 or earlier |
10508
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
141 ui.write(_('old file size: %12d bytes (%6.1f MiB)\n') |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10241
diff
changeset
|
142 % (int(oldsize), oldsize / 1024 / 1024)) |
10508
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
143 ui.write(_('new file size: %12d bytes (%6.1f MiB)\n') |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10241
diff
changeset
|
144 % (int(newsize), newsize / 1024 / 1024)) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
145 |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
146 shrink_percent = (oldsize - newsize) / oldsize * 100 |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
147 shrink_factor = oldsize / newsize |
10508
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
148 ui.write(_('shrinkage: %.1f%% (%.1fx)\n') |
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
149 % (shrink_percent, shrink_factor)) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
150 |
10215
9d79b8f58bea
contrib: turn shrink-revlog.py into an extension
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10214
diff
changeset
|
151 def shrink(ui, repo, **opts): |
10622
bc81f126139f
shrink-revlog: add --sort option for user-selectable toposort algorithm.
Greg Ward <greg-hg@gerg.ca>
parents:
10621
diff
changeset
|
152 """shrink a revlog by reordering revisions |
bc81f126139f
shrink-revlog: add --sort option for user-selectable toposort algorithm.
Greg Ward <greg-hg@gerg.ca>
parents:
10621
diff
changeset
|
153 |
bc81f126139f
shrink-revlog: add --sort option for user-selectable toposort algorithm.
Greg Ward <greg-hg@gerg.ca>
parents:
10621
diff
changeset
|
154 Rewrites all the entries in some revlog of the current repository |
bc81f126139f
shrink-revlog: add --sort option for user-selectable toposort algorithm.
Greg Ward <greg-hg@gerg.ca>
parents:
10621
diff
changeset
|
155 (by default, the manifest log) to save space. |
bc81f126139f
shrink-revlog: add --sort option for user-selectable toposort algorithm.
Greg Ward <greg-hg@gerg.ca>
parents:
10621
diff
changeset
|
156 |
bc81f126139f
shrink-revlog: add --sort option for user-selectable toposort algorithm.
Greg Ward <greg-hg@gerg.ca>
parents:
10621
diff
changeset
|
157 Different sort algorithms have different performance |
bc81f126139f
shrink-revlog: add --sort option for user-selectable toposort algorithm.
Greg Ward <greg-hg@gerg.ca>
parents:
10621
diff
changeset
|
158 characteristics. Use ``--sort`` to select a sort algorithm so you |
10625
add562abc28a
shrink-revlog: remove branchsort algorithm (it behaves poorly)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10624
diff
changeset
|
159 can determine which works best for your data. |
10215
9d79b8f58bea
contrib: turn shrink-revlog.py into an extension
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10214
diff
changeset
|
160 """ |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
161 |
10215
9d79b8f58bea
contrib: turn shrink-revlog.py into an extension
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10214
diff
changeset
|
162 if not repo.local(): |
10508
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
163 raise util.Abort(_('not a local repository: %s') % repo.root) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
164 |
10215
9d79b8f58bea
contrib: turn shrink-revlog.py into an extension
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10214
diff
changeset
|
165 fn = opts.get('revlog') |
9d79b8f58bea
contrib: turn shrink-revlog.py into an extension
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10214
diff
changeset
|
166 if not fn: |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
167 indexfn = repo.sjoin('00manifest.i') |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
168 else: |
10215
9d79b8f58bea
contrib: turn shrink-revlog.py into an extension
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10214
diff
changeset
|
169 if not fn.endswith('.i'): |
10508
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
170 raise util.Abort(_('--revlog option must specify the revlog index ' |
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
171 'file (*.i), not %s') % opts.get('revlog')) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
172 |
10215
9d79b8f58bea
contrib: turn shrink-revlog.py into an extension
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10214
diff
changeset
|
173 indexfn = os.path.realpath(fn) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
174 store = repo.sjoin('') |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
175 if not indexfn.startswith(store): |
10508
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
176 raise util.Abort(_('--revlog option must specify a revlog in %s, ' |
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
177 'not %s') % (store, indexfn)) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
178 |
10622
bc81f126139f
shrink-revlog: add --sort option for user-selectable toposort algorithm.
Greg Ward <greg-hg@gerg.ca>
parents:
10621
diff
changeset
|
179 sortname = opts['sort'] |
bc81f126139f
shrink-revlog: add --sort option for user-selectable toposort algorithm.
Greg Ward <greg-hg@gerg.ca>
parents:
10621
diff
changeset
|
180 try: |
bc81f126139f
shrink-revlog: add --sort option for user-selectable toposort algorithm.
Greg Ward <greg-hg@gerg.ca>
parents:
10621
diff
changeset
|
181 toposort = globals()['toposort_' + sortname] |
bc81f126139f
shrink-revlog: add --sort option for user-selectable toposort algorithm.
Greg Ward <greg-hg@gerg.ca>
parents:
10621
diff
changeset
|
182 except KeyError: |
bc81f126139f
shrink-revlog: add --sort option for user-selectable toposort algorithm.
Greg Ward <greg-hg@gerg.ca>
parents:
10621
diff
changeset
|
183 raise util.Abort(_('no such toposort algorithm: %s') % sortname) |
bc81f126139f
shrink-revlog: add --sort option for user-selectable toposort algorithm.
Greg Ward <greg-hg@gerg.ca>
parents:
10621
diff
changeset
|
184 |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
185 if not os.path.exists(indexfn): |
10508
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
186 raise util.Abort(_('no such file: %s') % indexfn) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
187 if '00changelog' in indexfn: |
10508
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
188 raise util.Abort(_('shrinking the changelog ' |
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
189 'will corrupt your repository')) |
10542
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
190 |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
191 ui.write(_('shrinking %s\n') % indexfn) |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
192 prefix = os.path.basename(indexfn)[:-1] |
11294
7b5d05e0fb1e
shrink-revlog: use util.mktempcopy() to preserve mode of index file.
Greg Ward <greg-hg@gerg.ca>
parents:
11268
diff
changeset
|
193 tmpindexfn = util.mktempcopy(indexfn, emptyok=True) |
10542
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
194 |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
195 r1 = revlog.revlog(util.opener(os.getcwd(), audit=False), indexfn) |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
196 r2 = revlog.revlog(util.opener(os.getcwd(), audit=False), tmpindexfn) |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
197 |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
198 datafn, tmpdatafn = r1.datafile, r2.datafile |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
199 |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
200 oldindexfn = indexfn + '.old' |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
201 olddatafn = datafn + '.old' |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
202 if os.path.exists(oldindexfn) or os.path.exists(olddatafn): |
10508
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
203 raise util.Abort(_('one or both of\n' |
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
204 ' %s\n' |
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
205 ' %s\n' |
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
206 'exists from a previous run; please clean up ' |
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
207 'before running again') % (oldindexfn, olddatafn)) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
208 |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
209 # Don't use repo.transaction(), because then things get hairy with |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
210 # paths: some need to be relative to .hg, and some need to be |
10216
843f6ee6d14b
contrib: small documentation fixes in shrink-revlog.py
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10215
diff
changeset
|
211 # absolute. Doing it this way keeps things simple: everything is an |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
212 # absolute path. |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
213 lock = repo.lock(wait=False) |
10234
c8d6f339bbd7
shrink-revlog: make it work on windows (issue1976)
Patrick Mezard <pmezard@gmail.com>
parents:
10230
diff
changeset
|
214 tr = transaction.transaction(ui.warn, |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
215 open, |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
216 repo.sjoin('journal')) |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
217 |
10542
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
218 def ignoremissing(func): |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
219 def f(*args, **kw): |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
220 try: |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
221 return func(*args, **kw) |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
222 except OSError, inst: |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
223 if inst.errno != errno.ENOENT: |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
224 raise |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
225 return f |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
226 |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
227 try: |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
228 try: |
10213
9e6848f352b0
contrib: use ui to write in shrink-revlog.py
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10009
diff
changeset
|
229 order = toposort(ui, r1) |
10626
3fc95c3bc3ba
shrink-revlog: factor out suboptimal computation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10625
diff
changeset
|
230 |
3fc95c3bc3ba
shrink-revlog: factor out suboptimal computation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10625
diff
changeset
|
231 suboptimal = 0 |
3fc95c3bc3ba
shrink-revlog: factor out suboptimal computation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10625
diff
changeset
|
232 for i in xrange(1, len(order)): |
3fc95c3bc3ba
shrink-revlog: factor out suboptimal computation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10625
diff
changeset
|
233 parents = [p for p in r1.parentrevs(order[i]) |
3fc95c3bc3ba
shrink-revlog: factor out suboptimal computation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10625
diff
changeset
|
234 if p != node.nullrev] |
10655
f63fb5c0cf67
shrink-revlog: add missing whitespace in expression
Martin Geisler <mg@lazybytes.net>
parents:
10627
diff
changeset
|
235 if parents and order[i - 1] not in parents: |
10626
3fc95c3bc3ba
shrink-revlog: factor out suboptimal computation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10625
diff
changeset
|
236 suboptimal += 1 |
3fc95c3bc3ba
shrink-revlog: factor out suboptimal computation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10625
diff
changeset
|
237 ui.note(_('%d suboptimal nodes\n') % suboptimal) |
3fc95c3bc3ba
shrink-revlog: factor out suboptimal computation
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10625
diff
changeset
|
238 |
10213
9e6848f352b0
contrib: use ui to write in shrink-revlog.py
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10009
diff
changeset
|
239 writerevs(ui, r1, r2, order, tr) |
10542
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
240 report(ui, r1, r2) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
241 tr.close() |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
242 except: |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
243 # Abort transaction first, so we truncate the files before |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
244 # deleting them. |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
245 tr.abort() |
10542
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
246 for fn in (tmpindexfn, tmpdatafn): |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
247 ignoremissing(os.unlink)(fn) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
248 raise |
10241
4b2a086bee31
shrink-revlog: add --dry-run option
Patrick Mezard <pmezard@gmail.com>
parents:
10236
diff
changeset
|
249 if not opts.get('dry_run'): |
10542
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
250 # racy, both files cannot be renamed atomically |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
251 # copy files |
10241
4b2a086bee31
shrink-revlog: add --dry-run option
Patrick Mezard <pmezard@gmail.com>
parents:
10236
diff
changeset
|
252 util.os_link(indexfn, oldindexfn) |
10542
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
253 ignoremissing(util.os_link)(datafn, olddatafn) |
11267
d3ebb1a0bc49
shrink-revlog: preserve mode of the shrunken index and data file.
Greg Ward <greg-hg@gerg.ca>
parents:
10542
diff
changeset
|
254 |
10542
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
255 # rename |
10241
4b2a086bee31
shrink-revlog: add --dry-run option
Patrick Mezard <pmezard@gmail.com>
parents:
10236
diff
changeset
|
256 util.rename(tmpindexfn, indexfn) |
10542
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
257 try: |
11267
d3ebb1a0bc49
shrink-revlog: preserve mode of the shrunken index and data file.
Greg Ward <greg-hg@gerg.ca>
parents:
10542
diff
changeset
|
258 os.chmod(tmpdatafn, os.stat(datafn).st_mode) |
10542
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
259 util.rename(tmpdatafn, datafn) |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
260 except OSError, inst: |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
261 if inst.errno != errno.ENOENT: |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
262 raise |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
263 ignoremissing(os.unlink)(datafn) |
10241
4b2a086bee31
shrink-revlog: add --dry-run option
Patrick Mezard <pmezard@gmail.com>
parents:
10236
diff
changeset
|
264 else: |
10542
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
265 for fn in (tmpindexfn, tmpdatafn): |
989b2a5eaaba
shrink: handle all combinations of inline/non-inline revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10509
diff
changeset
|
266 ignoremissing(os.unlink)(fn) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
267 finally: |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
268 lock.release() |
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
269 |
10241
4b2a086bee31
shrink-revlog: add --dry-run option
Patrick Mezard <pmezard@gmail.com>
parents:
10236
diff
changeset
|
270 if not opts.get('dry_run'): |
10508
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
271 ui.write(_('note: old revlog saved in:\n' |
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
272 ' %s\n' |
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
273 ' %s\n' |
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
274 '(You can delete those files when you are satisfied that your\n' |
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
275 'repository is still sane. ' |
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
276 'Running \'hg verify\' is strongly recommended.)\n') |
10241
4b2a086bee31
shrink-revlog: add --dry-run option
Patrick Mezard <pmezard@gmail.com>
parents:
10236
diff
changeset
|
277 % (oldindexfn, olddatafn)) |
9515
f7d85980261c
Add script to rewrite revlog to workaround lack of parent deltas.
Greg Ward <greg-hg@gerg.ca>
parents:
diff
changeset
|
278 |
10215
9d79b8f58bea
contrib: turn shrink-revlog.py into an extension
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10214
diff
changeset
|
279 cmdtable = { |
9d79b8f58bea
contrib: turn shrink-revlog.py into an extension
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10214
diff
changeset
|
280 'shrink': (shrink, |
10508
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
281 [('', 'revlog', '', _('index (.i) file of the revlog to shrink')), |
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
282 ('n', 'dry-run', None, _('do not shrink, simulate only')), |
10625
add562abc28a
shrink-revlog: remove branchsort algorithm (it behaves poorly)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10624
diff
changeset
|
283 ('', 'sort', 'reversepostorder', 'name of sort algorithm to use'), |
10241
4b2a086bee31
shrink-revlog: add --dry-run option
Patrick Mezard <pmezard@gmail.com>
parents:
10236
diff
changeset
|
284 ], |
10508
cc35ad583e66
shrink-revlog: add strings for translation / import _ before using it
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10496
diff
changeset
|
285 _('hg shrink [--revlog PATH]')) |
10215
9d79b8f58bea
contrib: turn shrink-revlog.py into an extension
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
10214
diff
changeset
|
286 } |
10236
49a8625b8cac
shrink-revlog: help/doc tweaks
Greg Ward <greg-hg@gerg.ca>
parents:
10234
diff
changeset
|
287 |
49a8625b8cac
shrink-revlog: help/doc tweaks
Greg Ward <greg-hg@gerg.ca>
parents:
10234
diff
changeset
|
288 if __name__ == "__main__": |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10241
diff
changeset
|
289 print "shrink-revlog.py is now an extension (see hg help extensions)" |