##// END OF EJS Templates
convert: ignore hg source errors with hg.ignoreerrors (issue 1357)...
Patrick Mezard -
r7231:8e7130a1 default
parent child Browse files
Show More
@@ -85,6 +85,10 b' def convert(ui, src, dest=None, revmapfi'
85 85 Mercurial Source
86 86 -----------------
87 87
88 --config convert.hg.ignoreerrors=False (boolean)
89 ignore integrity errors when reading. Use it to fix Mercurial
90 repositories with missing revlogs, by converting from and to
91 Mercurial.
88 92 --config convert.hg.saverev=True (boolean)
89 93 allow target to preserve source revision ID
90 94 --config convert.hg.startrev=0 (hg revision identifier)
@@ -192,6 +192,8 b' class mercurial_sink(converter_sink):'
192 192 class mercurial_source(converter_source):
193 193 def __init__(self, ui, path, rev=None):
194 194 converter_source.__init__(self, ui, path, rev)
195 self.ignoreerrors = ui.configbool('convert', 'hg.ignoreerrors', False)
196 self.ignored = {}
195 197 self.saverev = ui.configbool('convert', 'hg.saverev', True)
196 198 try:
197 199 self.repo = hg.repository(self.ui, path)
@@ -253,23 +255,35 b' class mercurial_source(converter_source)'
253 255 parents = self.parents(ctx)
254 256 if not parents:
255 257 files = util.sort(ctx.manifest().keys())
256 return [(f, rev) for f in files], {}
258 return [(f, rev) for f in files if f not in self.ignored], {}
257 259 if self._changescache and self._changescache[0] == rev:
258 260 m, a, r = self._changescache[1]
259 261 else:
260 262 m, a, r = self.repo.status(parents[0], ctx.node())[:3]
261 changes = [(name, rev) for name in m + a + r]
262 return util.sort(changes), self.getcopies(ctx, m + a)
263 # getcopies() detects missing revlogs early, run it before
264 # filtering the changes.
265 copies = self.getcopies(ctx, m + a)
266 changes = [(name, rev) for name in m + a + r
267 if name not in self.ignored]
268 return util.sort(changes), copies
263 269
264 270 def getcopies(self, ctx, files):
265 271 copies = {}
266 272 for name in files:
273 if name in self.ignored:
274 continue
267 275 try:
268 copynode = ctx.filectx(name).renamed()[0]
269 if self.keep(copynode):
270 copies[name] = copynode
276 copysource, copynode = ctx.filectx(name).renamed()
277 if copysource in self.ignored or not self.keep(copynode):
278 continue
279 copies[name] = copysource
271 280 except TypeError:
272 281 pass
282 except revlog.LookupError, e:
283 if not self.ignoreerrors:
284 raise
285 self.ignored[name] = 1
286 self.ui.warn(_('ignoring: %s\n') % e)
273 287 return copies
274 288
275 289 def getcommit(self, rev):
@@ -297,6 +311,7 b' class mercurial_source(converter_source)'
297 311 else:
298 312 i = i or 0
299 313 changes = self.repo.status(parents[i], ctx.node())[:3]
314 changes = [[f for f in l if f not in self.ignored] for l in changes]
300 315
301 316 if i == 0:
302 317 self._changescache = (rev, changes)
@@ -36,5 +36,34 b' cd ..'
36 36 hg convert --datesort orig new 2>&1 | grep -v 'subversion python bindings could not be loaded'
37 37 cd new
38 38 hg out ../orig
39 cd ..
40
41 echo % init broken repository
42 hg init broken
43 cd broken
44 echo a >> a
45 echo b >> b
46 hg ci -qAm init
47 echo a >> a
48 echo b >> b
49 hg copy b c
50 hg ci -qAm changeall
51 hg up -qC 0
52 echo bc >> b
53 hg ci -m changebagain
54 HGMERGE=internal:local hg -q merge
55 hg ci -m merge
56 hg mv b d
57 hg ci -m moveb
58 echo % break it
59 rm .hg/store/data/b.*
60 cd ..
61
62 hg --config convert.hg.ignoreerrors=True convert broken fixed
63 hg -R fixed verify
64 echo '% manifest -r 0'
65 hg -R fixed manifest -r 0
66 echo '% manifest -r tip'
67 hg -R fixed manifest -r tip
39 68
40 69 true
@@ -20,3 +20,27 b' 0 mark baz executable'
20 20 comparing with ../orig
21 21 searching for changes
22 22 no changes found
23 % init broken repository
24 created new head
25 % break it
26 initializing destination fixed repository
27 scanning source...
28 sorting...
29 converting...
30 4 init
31 3 changebagain
32 ignoring: data/b.i@4b3c32ced4f8: no match found
33 2 changeall
34 1 merge
35 0 moveb
36 checking changesets
37 checking manifests
38 crosschecking files in changesets and manifests
39 checking files
40 3 files, 5 changesets, 5 total revisions
41 % manifest -r 0
42 a
43 % manifest -r tip
44 a
45 c
46 d
@@ -72,6 +72,10 b' Convert a foreign SCM repository to a Me'
72 72 Mercurial Source
73 73 -----------------
74 74
75 --config convert.hg.ignoreerrors=False (boolean)
76 ignore integrity errors when reading. Use it to fix Mercurial
77 repositories with missing revlogs, by converting from and to
78 Mercurial.
75 79 --config convert.hg.saverev=True (boolean)
76 80 allow target to preserve source revision ID
77 81 --config convert.hg.startrev=0 (hg revision identifier)
General Comments 0
You need to be logged in to leave comments. Login now