Mercurial > hg
annotate hgext/relink.py @ 10152:56284451a22c
Added support for templatevar "footer" to cmdutil.py
author | Robert Bachmann <rbachm@gmail.com> |
---|---|
date | Mon, 28 Dec 2009 17:55:52 +0100 |
parents | 56af3f240a22 |
children | 489b0caf21ed |
rev | line source |
---|---|
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
1 # Mercurial extension to provide 'hg relink' command |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
2 # |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
3 # Copyright (C) 2007 Brendan Cully <brendan@kublai.com> |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
4270
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
4270
diff
changeset
|
6 # GNU General Public License version 2, incorporated herein by reference. |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
7 |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
8 """recreates hardlinks between repository clones""" |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
9 |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
10 from mercurial import cmdutil, hg, util |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
11 from mercurial.i18n import _ |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
12 import os, stat |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
13 |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
14 def relink(ui, repo, origin=None, **opts): |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
15 """recreate hardlinks between two repositories |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
16 |
9886
56af3f240a22
relink: wrap long lines in docstring
Martin Geisler <mg@lazybytes.net>
parents:
9790
diff
changeset
|
17 When repositories are cloned locally, their data files will be |
56af3f240a22
relink: wrap long lines in docstring
Martin Geisler <mg@lazybytes.net>
parents:
9790
diff
changeset
|
18 hardlinked so that they only use the space of a single repository. |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
19 |
9886
56af3f240a22
relink: wrap long lines in docstring
Martin Geisler <mg@lazybytes.net>
parents:
9790
diff
changeset
|
20 Unfortunately, subsequent pulls into either repository will break |
56af3f240a22
relink: wrap long lines in docstring
Martin Geisler <mg@lazybytes.net>
parents:
9790
diff
changeset
|
21 hardlinks for any files touched by the new changesets, even if |
56af3f240a22
relink: wrap long lines in docstring
Martin Geisler <mg@lazybytes.net>
parents:
9790
diff
changeset
|
22 both repositories end up pulling the same changes. |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
23 |
9886
56af3f240a22
relink: wrap long lines in docstring
Martin Geisler <mg@lazybytes.net>
parents:
9790
diff
changeset
|
24 Similarly, passing --rev to "hg clone" will fail to use any |
56af3f240a22
relink: wrap long lines in docstring
Martin Geisler <mg@lazybytes.net>
parents:
9790
diff
changeset
|
25 hardlinks, falling back to a complete copy of the source |
56af3f240a22
relink: wrap long lines in docstring
Martin Geisler <mg@lazybytes.net>
parents:
9790
diff
changeset
|
26 repository. |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
27 |
9886
56af3f240a22
relink: wrap long lines in docstring
Martin Geisler <mg@lazybytes.net>
parents:
9790
diff
changeset
|
28 This command lets you recreate those hardlinks and reclaim that |
56af3f240a22
relink: wrap long lines in docstring
Martin Geisler <mg@lazybytes.net>
parents:
9790
diff
changeset
|
29 wasted space. |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
30 |
9886
56af3f240a22
relink: wrap long lines in docstring
Martin Geisler <mg@lazybytes.net>
parents:
9790
diff
changeset
|
31 This repository will be relinked to share space with ORIGIN, which |
56af3f240a22
relink: wrap long lines in docstring
Martin Geisler <mg@lazybytes.net>
parents:
9790
diff
changeset
|
32 must be on the same local disk. If ORIGIN is omitted, looks for |
56af3f240a22
relink: wrap long lines in docstring
Martin Geisler <mg@lazybytes.net>
parents:
9790
diff
changeset
|
33 "default-relink", then "default", in [paths]. |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
34 |
9886
56af3f240a22
relink: wrap long lines in docstring
Martin Geisler <mg@lazybytes.net>
parents:
9790
diff
changeset
|
35 Do not attempt any read operations on this repository while the |
56af3f240a22
relink: wrap long lines in docstring
Martin Geisler <mg@lazybytes.net>
parents:
9790
diff
changeset
|
36 command is running. (Both repositories will be locked against |
56af3f240a22
relink: wrap long lines in docstring
Martin Geisler <mg@lazybytes.net>
parents:
9790
diff
changeset
|
37 writes.) |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
38 """ |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
39 src = hg.repository( |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
40 cmdutil.remoteui(repo, opts), |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
41 ui.expandpath(origin or 'default-relink', origin or 'default')) |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
42 if not src.local(): |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
43 raise util.Abort('must specify local origin repository') |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
44 ui.status(_('relinking %s to %s\n') % (src.store.path, repo.store.path)) |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
45 locallock = repo.lock() |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
46 try: |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
47 remotelock = src.lock() |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
48 try: |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
49 candidates = collect(src.store.path, ui) |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
50 targets = prune(candidates, repo.store.path, ui) |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
51 do_relink(src.store.path, repo.store.path, targets, ui) |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
52 finally: |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
53 remotelock.release() |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
54 finally: |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
55 locallock.release() |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
56 |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
57 def collect(src, ui): |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
58 seplen = len(os.path.sep) |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
59 candidates = [] |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
60 for dirpath, dirnames, filenames in os.walk(src): |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
61 relpath = dirpath[len(src) + seplen:] |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
62 for filename in filenames: |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
63 if not filename[-2:] in ('.d', '.i'): |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
64 continue |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
65 st = os.stat(os.path.join(dirpath, filename)) |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
66 if not stat.S_ISREG(st.st_mode): |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
67 continue |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
68 candidates.append((os.path.join(relpath, filename), st)) |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
69 |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
70 ui.status(_('collected %d candidate storage files\n') % len(candidates)) |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
71 return candidates |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
72 |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
73 def prune(candidates, dst, ui): |
4270
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
74 def linkfilter(dst, st): |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
75 try: |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
76 ts = os.stat(dst) |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
77 except OSError: |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
78 # Destination doesn't have this file? |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
79 return False |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
80 if st.st_ino == ts.st_ino: |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
81 return False |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
82 if st.st_dev != ts.st_dev: |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
83 # No point in continuing |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
84 raise util.Abort( |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
85 _('source and destination are on different devices')) |
4270
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
86 if st.st_size != ts.st_size: |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
87 return False |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
88 return st |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
89 |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
90 targets = [] |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
91 for fn, st in candidates: |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
92 tgt = os.path.join(dst, fn) |
4270
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
93 ts = linkfilter(tgt, st) |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
94 if not ts: |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
95 ui.debug(_('not linkable: %s\n') % fn) |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
96 continue |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
97 targets.append((fn, ts.st_size)) |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
98 |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
99 ui.status(_('pruned down to %d probably relinkable files\n') % len(targets)) |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
100 return targets |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
101 |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
102 def do_relink(src, dst, files, ui): |
4270
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
103 def relinkfile(src, dst): |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
104 bak = dst + '.bak' |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
105 os.rename(dst, bak) |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
106 try: |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
107 os.link(src, dst) |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
108 except OSError: |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
109 os.rename(bak, dst) |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
110 raise |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
111 os.remove(bak) |
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
112 |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
113 CHUNKLEN = 65536 |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
114 relinked = 0 |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
115 savedbytes = 0 |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
116 |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
117 pos = 0 |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
118 total = len(files) |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
119 for f, sz in files: |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
120 pos += 1 |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
121 source = os.path.join(src, f) |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
122 tgt = os.path.join(dst, f) |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
123 sfp = file(source) |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
124 dfp = file(tgt) |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
125 sin = sfp.read(CHUNKLEN) |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
126 while sin: |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
127 din = dfp.read(CHUNKLEN) |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
128 if sin != din: |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
129 break |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
130 sin = sfp.read(CHUNKLEN) |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
131 if sin: |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
132 ui.debug(_('not linkable: %s\n') % f) |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
133 continue |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
134 try: |
4270
29eb88bd5c8d
hg-relink: do not compare .d files
Brendan Cully <brendan@kublai.com>
parents:
4249
diff
changeset
|
135 relinkfile(source, tgt) |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
136 ui.progress(_('relink'), pos, f, _(' files'), total) |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
137 relinked += 1 |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
138 savedbytes += sz |
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
139 except OSError, inst: |
9790
819e6c7085fc
relink: do not translate format string with no text
Martin Geisler <mg@lazybytes.net>
parents:
9729
diff
changeset
|
140 ui.warn('%s: %s\n' % (tgt, str(inst))) |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
141 |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
142 ui.status(_('relinked %d files (%d bytes reclaimed)\n') % |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
143 (relinked, savedbytes)) |
4249
7663780b55a7
Add hg-relink script to contrib
Brendan Cully <brendan@kublai.com>
parents:
diff
changeset
|
144 |
9729
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
145 cmdtable = { |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
146 'relink': ( |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
147 relink, |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
148 [], |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
149 _('[ORIGIN]') |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
150 ) |
aa9ccab5af37
Issue919: add a standard extension to recreate hardlinks between repositories.
Jesse Glick <jesse.glick@sun.com>
parents:
8225
diff
changeset
|
151 } |