12 For more information: |
12 For more information: |
13 http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject |
13 http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject |
14 ''' |
14 ''' |
15 |
15 |
16 from mercurial import util, repair, merge, cmdutil, commands, error |
16 from mercurial import util, repair, merge, cmdutil, commands, error |
17 from mercurial import extensions, ancestor, copies |
17 from mercurial import extensions, ancestor, copies, patch |
18 from mercurial.commands import templateopts |
18 from mercurial.commands import templateopts |
19 from mercurial.node import nullrev |
19 from mercurial.node import nullrev |
20 from mercurial.i18n import _ |
20 from mercurial.i18n import _ |
21 import os, errno |
21 import os, errno |
22 |
22 |
262 raise util.Abort(_('cannot use revision %d as base, result ' |
262 raise util.Abort(_('cannot use revision %d as base, result ' |
263 'would have 3 parents') % rev) |
263 'would have 3 parents') % rev) |
264 p2 = P2n |
264 p2 = P2n |
265 return p1, p2 |
265 return p1, p2 |
266 |
266 |
|
267 def isagitpatch(repo, patchname): |
|
268 'Return true if the given patch is in git format' |
|
269 mqpatch = os.path.join(repo.mq.path, patchname) |
|
270 for line in patch.linereader(file(mqpatch, 'rb')): |
|
271 if line.startswith('diff --git'): |
|
272 return True |
|
273 return False |
|
274 |
267 def updatemq(repo, state, skipped, **opts): |
275 def updatemq(repo, state, skipped, **opts): |
268 'Update rebased mq patches - finalize and then import them' |
276 'Update rebased mq patches - finalize and then import them' |
269 mqrebase = {} |
277 mqrebase = {} |
270 for p in repo.mq.applied: |
278 for p in repo.mq.applied: |
271 if repo[p.rev].rev() in state: |
279 if repo[p.rev].rev() in state: |
272 repo.ui.debug(_('revision %d is an mq patch (%s), finalize it.\n') % |
280 repo.ui.debug(_('revision %d is an mq patch (%s), finalize it.\n') % |
273 (repo[p.rev].rev(), p.name)) |
281 (repo[p.rev].rev(), p.name)) |
274 mqrebase[repo[p.rev].rev()] = p.name |
282 mqrebase[repo[p.rev].rev()] = (p.name, isagitpatch(repo, p.name)) |
275 |
283 |
276 if mqrebase: |
284 if mqrebase: |
277 repo.mq.finish(repo, mqrebase.keys()) |
285 repo.mq.finish(repo, mqrebase.keys()) |
278 |
286 |
279 # We must start import from the newest revision |
287 # We must start import from the newest revision |
281 mq.sort() |
289 mq.sort() |
282 mq.reverse() |
290 mq.reverse() |
283 for rev in mq: |
291 for rev in mq: |
284 if rev not in skipped: |
292 if rev not in skipped: |
285 repo.ui.debug(_('import mq patch %d (%s)\n') |
293 repo.ui.debug(_('import mq patch %d (%s)\n') |
286 % (state[rev], mqrebase[rev])) |
294 % (state[rev], mqrebase[rev][0])) |
287 repo.mq.qimport(repo, (), patchname=mqrebase[rev], |
295 repo.mq.qimport(repo, (), patchname=mqrebase[rev][0], |
288 git=opts.get('git', False),rev=[str(state[rev])]) |
296 git=mqrebase[rev][1],rev=[str(state[rev])]) |
289 repo.mq.save_dirty() |
297 repo.mq.save_dirty() |
290 |
298 |
291 def storestatus(repo, originalwd, target, state, collapse, keep, keepbranches, |
299 def storestatus(repo, originalwd, target, state, collapse, keep, keepbranches, |
292 external): |
300 external): |
293 'Store the current status to allow recovery' |
301 'Store the current status to allow recovery' |