Mercurial > hg
comparison hgext/rebase.py @ 29400:c79da70a4659
rebase: move collapse-related local variables to the RR class
This commit moves the following variables local to the 'rebase' function
to be fields of the rebaseruntime class:
-collapsef
-collapsemsg
author | Kostia Balytskyi <ikostia@fb.com> |
---|---|
date | Tue, 21 Jun 2016 06:29:23 -0700 |
parents | adb0d58b8b0b |
children | 87acd047711e |
comparison
equal
deleted
inserted
replaced
29399:adb0d58b8b0b | 29400:c79da70a4659 |
---|---|
137 self.activebookmark = None | 137 self.activebookmark = None |
138 self.target = None | 138 self.target = None |
139 self.skipped = set() | 139 self.skipped = set() |
140 self.targetancestors = set() | 140 self.targetancestors = set() |
141 | 141 |
142 self.collapsef = opts.get('collapse', False) | |
143 self.collapsemsg = cmdutil.logmessage(ui, opts) | |
144 | |
142 @command('rebase', | 145 @command('rebase', |
143 [('s', 'source', '', | 146 [('s', 'source', '', |
144 _('rebase the specified changeset and descendants'), _('REV')), | 147 _('rebase the specified changeset and descendants'), _('REV')), |
145 ('b', 'base', '', | 148 ('b', 'base', '', |
146 _('rebase everything from branching point of specified changeset'), | 149 _('rebase everything from branching point of specified changeset'), |
264 # search default destination in this space | 267 # search default destination in this space |
265 # used in the 'hg pull --rebase' case, see issue 5214. | 268 # used in the 'hg pull --rebase' case, see issue 5214. |
266 destspace = opts.get('_destspace') | 269 destspace = opts.get('_destspace') |
267 contf = opts.get('continue') | 270 contf = opts.get('continue') |
268 abortf = opts.get('abort') | 271 abortf = opts.get('abort') |
269 collapsef = opts.get('collapse', False) | |
270 collapsemsg = cmdutil.logmessage(ui, opts) | |
271 date = opts.get('date', None) | 272 date = opts.get('date', None) |
272 e = opts.get('extrafn') # internal, used by e.g. hgsubversion | 273 e = opts.get('extrafn') # internal, used by e.g. hgsubversion |
273 extrafns = [_savegraft] | 274 extrafns = [_savegraft] |
274 if e: | 275 if e: |
275 extrafns = [e] | 276 extrafns = [e] |
288 help = "hg%s help -e histedit" % enablehistedit | 289 help = "hg%s help -e histedit" % enablehistedit |
289 msg = _("interactive history editing is supported by the " | 290 msg = _("interactive history editing is supported by the " |
290 "'histedit' extension (see \"%s\")") % help | 291 "'histedit' extension (see \"%s\")") % help |
291 raise error.Abort(msg) | 292 raise error.Abort(msg) |
292 | 293 |
293 if collapsemsg and not collapsef: | 294 if rbsrt.collapsemsg and not rbsrt.collapsef: |
294 raise error.Abort( | 295 raise error.Abort( |
295 _('message can only be specified with collapse')) | 296 _('message can only be specified with collapse')) |
296 | 297 |
297 if contf or abortf: | 298 if contf or abortf: |
298 if contf and abortf: | 299 if contf and abortf: |
299 raise error.Abort(_('cannot use both abort and continue')) | 300 raise error.Abort(_('cannot use both abort and continue')) |
300 if collapsef: | 301 if rbsrt.collapsef: |
301 raise error.Abort( | 302 raise error.Abort( |
302 _('cannot use collapse with continue or abort')) | 303 _('cannot use collapse with continue or abort')) |
303 if srcf or basef or destf: | 304 if srcf or basef or destf: |
304 raise error.Abort( | 305 raise error.Abort( |
305 _('abort and continue do not allow specifying revisions')) | 306 _('abort and continue do not allow specifying revisions')) |
306 if abortf and opts.get('tool', False): | 307 if abortf and opts.get('tool', False): |
307 ui.warn(_('tool option will be ignored\n')) | 308 ui.warn(_('tool option will be ignored\n')) |
308 | 309 |
309 try: | 310 try: |
310 (rbsrt.originalwd, rbsrt.target, rbsrt.state, | 311 (rbsrt.originalwd, rbsrt.target, rbsrt.state, |
311 rbsrt.skipped, collapsef, keepf, keepbranchesf, | 312 rbsrt.skipped, rbsrt.collapsef, keepf, keepbranchesf, |
312 rbsrt.external, rbsrt.activebookmark) = restorestatus(repo) | 313 rbsrt.external, rbsrt.activebookmark) = restorestatus(repo) |
313 collapsemsg = restorecollapsemsg(repo) | 314 rbsrt.collapsemsg = restorecollapsemsg(repo) |
314 except error.RepoLookupError: | 315 except error.RepoLookupError: |
315 if abortf: | 316 if abortf: |
316 clearstatus(repo) | 317 clearstatus(repo) |
317 clearcollapsemsg(repo) | 318 clearcollapsemsg(repo) |
318 repo.ui.warn(_('rebase aborted (no revision is removed,' | 319 repo.ui.warn(_('rebase aborted (no revision is removed,' |
364 rebaseobsskipped = set(obsoletenotrebased) | 365 rebaseobsskipped = set(obsoletenotrebased) |
365 _checkobsrebase(repo, ui, rebaseobsrevs, | 366 _checkobsrebase(repo, ui, rebaseobsrevs, |
366 rebasesetrevs, | 367 rebasesetrevs, |
367 rebaseobsskipped) | 368 rebaseobsskipped) |
368 | 369 |
369 result = buildstate(repo, dest, rebaseset, collapsef, | 370 result = buildstate(repo, dest, rebaseset, rbsrt.collapsef, |
370 obsoletenotrebased) | 371 obsoletenotrebased) |
371 | 372 |
372 if not result: | 373 if not result: |
373 # Empty state built, nothing to rebase | 374 # Empty state built, nothing to rebase |
374 ui.status(_('nothing to rebase\n')) | 375 ui.status(_('nothing to rebase\n')) |
379 raise error.Abort(_("can't rebase public changeset %s") | 380 raise error.Abort(_("can't rebase public changeset %s") |
380 % repo[root], | 381 % repo[root], |
381 hint=_('see "hg help phases" for details')) | 382 hint=_('see "hg help phases" for details')) |
382 | 383 |
383 (rbsrt.originalwd, rbsrt.target, rbsrt.state) = result | 384 (rbsrt.originalwd, rbsrt.target, rbsrt.state) = result |
384 if collapsef: | 385 if rbsrt.collapsef: |
385 rbsrt.targetancestors = repo.changelog.ancestors([rbsrt.target], | 386 rbsrt.targetancestors = repo.changelog.ancestors([rbsrt.target], |
386 inclusive=True) | 387 inclusive=True) |
387 rbsrt.external = externalparent(repo, rbsrt.state, | 388 rbsrt.external = externalparent(repo, rbsrt.state, |
388 rbsrt.targetancestors) | 389 rbsrt.targetancestors) |
389 | 390 |
393 if keepbranchesf: | 394 if keepbranchesf: |
394 # insert _savebranch at the start of extrafns so if | 395 # insert _savebranch at the start of extrafns so if |
395 # there's a user-provided extrafn it can clobber branch if | 396 # there's a user-provided extrafn it can clobber branch if |
396 # desired | 397 # desired |
397 extrafns.insert(0, _savebranch) | 398 extrafns.insert(0, _savebranch) |
398 if collapsef: | 399 if rbsrt.collapsef: |
399 branches = set() | 400 branches = set() |
400 for rev in rbsrt.state: | 401 for rev in rbsrt.state: |
401 branches.add(repo[rev].branch()) | 402 branches.add(repo[rev].branch()) |
402 if len(branches) > 1: | 403 if len(branches) > 1: |
403 raise error.Abort(_('cannot collapse multiple named ' | 404 raise error.Abort(_('cannot collapse multiple named ' |
434 p1, p2, base = defineparents(repo, rev, rbsrt.target, | 435 p1, p2, base = defineparents(repo, rev, rbsrt.target, |
435 rbsrt.state, | 436 rbsrt.state, |
436 rbsrt.targetancestors, | 437 rbsrt.targetancestors, |
437 obsoletenotrebased) | 438 obsoletenotrebased) |
438 storestatus(repo, rbsrt.originalwd, rbsrt.target, | 439 storestatus(repo, rbsrt.originalwd, rbsrt.target, |
439 rbsrt.state, collapsef, keepf, keepbranchesf, | 440 rbsrt.state, rbsrt.collapsef, keepf, |
440 rbsrt.external, rbsrt.activebookmark) | 441 keepbranchesf, rbsrt.external, |
441 storecollapsemsg(repo, collapsemsg) | 442 rbsrt.activebookmark) |
443 storecollapsemsg(repo, rbsrt.collapsemsg) | |
442 if len(repo[None].parents()) == 2: | 444 if len(repo[None].parents()) == 2: |
443 repo.ui.debug('resuming interrupted rebase\n') | 445 repo.ui.debug('resuming interrupted rebase\n') |
444 else: | 446 else: |
445 try: | 447 try: |
446 ui.setconfig('ui', 'forcemerge', opts.get('tool', ''), | 448 ui.setconfig('ui', 'forcemerge', opts.get('tool', ''), |
447 'rebase') | 449 'rebase') |
448 stats = rebasenode(repo, rev, p1, base, rbsrt.state, | 450 stats = rebasenode(repo, rev, p1, base, rbsrt.state, |
449 collapsef, rbsrt.target) | 451 rbsrt.collapsef, rbsrt.target) |
450 if stats and stats[3] > 0: | 452 if stats and stats[3] > 0: |
451 raise error.InterventionRequired( | 453 raise error.InterventionRequired( |
452 _('unresolved conflicts (see hg ' | 454 _('unresolved conflicts (see hg ' |
453 'resolve, then hg rebase --continue)')) | 455 'resolve, then hg rebase --continue)')) |
454 finally: | 456 finally: |
455 ui.setconfig('ui', 'forcemerge', '', 'rebase') | 457 ui.setconfig('ui', 'forcemerge', '', 'rebase') |
456 if not collapsef: | 458 if not rbsrt.collapsef: |
457 merging = p2 != nullrev | 459 merging = p2 != nullrev |
458 editform = cmdutil.mergeeditform(merging, 'rebase') | 460 editform = cmdutil.mergeeditform(merging, 'rebase') |
459 editor = cmdutil.getcommiteditor(editform=editform, **opts) | 461 editor = cmdutil.getcommiteditor(editform=editform, **opts) |
460 newnode = concludenode(repo, rev, p1, p2, extrafn=extrafn, | 462 newnode = concludenode(repo, rev, p1, p2, extrafn=extrafn, |
461 editor=editor, | 463 editor=editor, |
470 # Update the state | 472 # Update the state |
471 if newnode is not None: | 473 if newnode is not None: |
472 rbsrt.state[rev] = repo[newnode].rev() | 474 rbsrt.state[rev] = repo[newnode].rev() |
473 ui.debug('rebased as %s\n' % short(newnode)) | 475 ui.debug('rebased as %s\n' % short(newnode)) |
474 else: | 476 else: |
475 if not collapsef: | 477 if not rbsrt.collapsef: |
476 ui.warn(_('note: rebase of %d:%s created no changes ' | 478 ui.warn(_('note: rebase of %d:%s created no changes ' |
477 'to commit\n') % (rev, ctx)) | 479 'to commit\n') % (rev, ctx)) |
478 rbsrt.skipped.add(rev) | 480 rbsrt.skipped.add(rev) |
479 rbsrt.state[rev] = p1 | 481 rbsrt.state[rev] = p1 |
480 ui.debug('next revision set to %s\n' % p1) | 482 ui.debug('next revision set to %s\n' % p1) |
496 (desc, repo[rbsrt.state[rev]])) | 498 (desc, repo[rbsrt.state[rev]])) |
497 | 499 |
498 ui.progress(_('rebasing'), None) | 500 ui.progress(_('rebasing'), None) |
499 ui.note(_('rebase merging completed\n')) | 501 ui.note(_('rebase merging completed\n')) |
500 | 502 |
501 if collapsef and not keepopen: | 503 if rbsrt.collapsef and not keepopen: |
502 p1, p2, _base = defineparents(repo, min(rbsrt.state), | 504 p1, p2, _base = defineparents(repo, min(rbsrt.state), |
503 rbsrt.target, rbsrt.state, | 505 rbsrt.target, rbsrt.state, |
504 rbsrt.targetancestors, | 506 rbsrt.targetancestors, |
505 obsoletenotrebased) | 507 obsoletenotrebased) |
506 editopt = opts.get('edit') | 508 editopt = opts.get('edit') |
507 editform = 'rebase.collapse' | 509 editform = 'rebase.collapse' |
508 if collapsemsg: | 510 if rbsrt.collapsemsg: |
509 commitmsg = collapsemsg | 511 commitmsg = rbsrt.collapsemsg |
510 else: | 512 else: |
511 commitmsg = 'Collapsed revision' | 513 commitmsg = 'Collapsed revision' |
512 for rebased in rbsrt.state: | 514 for rebased in rbsrt.state: |
513 if rebased not in rbsrt.skipped and\ | 515 if rebased not in rbsrt.skipped and\ |
514 rbsrt.state[rebased] > nullmerge: | 516 rbsrt.state[rebased] > nullmerge: |
556 ui.note(_("update back to initial working directory parent\n")) | 558 ui.note(_("update back to initial working directory parent\n")) |
557 hg.updaterepo(repo, newwd, False) | 559 hg.updaterepo(repo, newwd, False) |
558 | 560 |
559 if not keepf: | 561 if not keepf: |
560 collapsedas = None | 562 collapsedas = None |
561 if collapsef: | 563 if rbsrt.collapsef: |
562 collapsedas = newnode | 564 collapsedas = newnode |
563 clearrebased(ui, repo, rbsrt.state, rbsrt.skipped, collapsedas) | 565 clearrebased(ui, repo, rbsrt.state, rbsrt.skipped, collapsedas) |
564 | 566 |
565 with repo.transaction('bookmark') as tr: | 567 with repo.transaction('bookmark') as tr: |
566 if currentbookmarks: | 568 if currentbookmarks: |