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: