Mercurial > evolve
diff hgext/evolve.py @ 1047:d830377bf186
evolve: adds a --confirm option
This option lets the use double check if it wants the evolve operation.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Fri, 08 Aug 2014 23:02:26 -0700 |
parents | 296d48e1f55a |
children | ac47c2f774a8 |
line wrap: on
line diff
--- a/hgext/evolve.py Fri Aug 08 23:11:09 2014 -0700 +++ b/hgext/evolve.py Fri Aug 08 23:02:26 2014 -0700 @@ -1151,6 +1151,8 @@ @command('^evolve|stabilize|solve', [('n', 'dry-run', False, 'do not perform actions, just print what would be done'), + ('', 'confirm', False, + 'ask for confirmation before performing the action'), ('A', 'any', False, 'also consider troubled changesets unrelated to current working directory'), ('a', 'all', False, 'evolve all troubled changesets in the repo ' '(implies any)'), @@ -1186,6 +1188,7 @@ anyopt = opts['any'] allopt = opts['all'] dryrunopt = opts['dry_run'] + confirmopt = opts['confirm'] ui.setconfig('ui', 'forcemerge', opts.get('tool', ''), 'evolve') if contopt: @@ -1256,7 +1259,7 @@ wlock = repo.wlock() lock = repo.lock() tr = repo.transaction("evolve") - result = _evolveany(ui, repo, tro, dryrunopt, + result = _evolveany(ui, repo, tro, dryrunopt, confirmopt, progresscb=progresscb) tr.close() finally: @@ -1272,19 +1275,20 @@ ui.progress('evolve', None) -def _evolveany(ui, repo, tro, dryrunopt, progresscb): +def _evolveany(ui, repo, tro, dryrunopt, confirmopt, progresscb): repo = repo.unfiltered() tro = repo[tro.rev()] cmdutil.bailifchanged(repo) troubles = tro.troubles() if 'unstable' in troubles: - return _solveunstable(ui, repo, tro, dryrunopt, progresscb) + return _solveunstable(ui, repo, tro, dryrunopt, confirmopt, progresscb) elif 'bumped' in troubles: - return _solvebumped(ui, repo, tro, dryrunopt, progresscb) + return _solvebumped(ui, repo, tro, dryrunopt, confirmopt, progresscb) elif 'divergent' in troubles: repo = repo.unfiltered() tro = repo[tro.rev()] - return _solvedivergent(ui, repo, tro, dryrunopt, progresscb) + return _solvedivergent(ui, repo, tro, dryrunopt, confirmopt, + progresscb) else: assert False # WHAT? unknown troubles @@ -1337,7 +1341,8 @@ return child return None -def _solveunstable(ui, repo, orig, dryrun=False, progresscb=None): +def _solveunstable(ui, repo, orig, dryrun=False, confirm=False, + progresscb=None): """Stabilize a unstable changeset""" obs = orig.parents()[0] if not obs.obsolete(): @@ -1362,11 +1367,13 @@ target = targets[0] displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate}) target = repo[target] - if not ui.quiet: + if not ui.quiet or confirm: repo.ui.write(_('move:')) displayer.show(orig) repo.ui.write(_('atop:')) displayer.show(target) + if confirm and ui.prompt('perform evolve? [Ny]') != 'y': + raise util.Abort(_('evolve aborted by user')) if progresscb: progresscb() todo = 'hg rebase -r %s -d %s\n' % (orig, target) if dryrun: @@ -1383,7 +1390,8 @@ _('fix conflict and run "hg evolve --continue"\n')) raise -def _solvebumped(ui, repo, bumped, dryrun=False, progresscb=None): +def _solvebumped(ui, repo, bumped, dryrun=False, confirm=False, + progresscb=None): """Stabilize a bumped changeset""" # For now we deny bumped merge if len(bumped.parents()) > 1: @@ -1396,11 +1404,13 @@ ' %s being a merge' % prec) displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate}) - if not ui.quiet: + if not ui.quiet or confirm: repo.ui.write(_('recreate:')) displayer.show(bumped) repo.ui.write(_('atop:')) displayer.show(prec) + if confirm and ui.prompt('perform evolve? [Ny]') != 'y': + raise util.Abort(_('evolve aborted by user')) if dryrun: todo = 'hg rebase --rev %s --dest %s;\n' % (bumped, prec.p1()) repo.ui.write(todo) @@ -1479,7 +1489,8 @@ # reroute the working copy parent to the new changeset repo.dirstate.setparents(newid, node.nullid) -def _solvedivergent(ui, repo, divergent, dryrun=False, progresscb=None): +def _solvedivergent(ui, repo, divergent, dryrun=False, confirm=False, + progresscb=None): base, others = divergentdata(divergent) if len(others) > 1: othersstr = "[%s]" % (','.join([str(i) for i in others])) @@ -1516,13 +1527,15 @@ % {'d': divergent, 'o': other}) displayer = cmdutil.show_changeset(ui, repo, {'template': shorttemplate}) - if not ui.quiet: + if not ui.quiet or confirm: ui.write(_('merge:')) displayer.show(divergent) ui.write(_('with: ')) displayer.show(other) ui.write(_('base: ')) displayer.show(base) + if confirm and ui.prompt('perform evolve? [Ny]') != 'y': + raise util.Abort(_('evolve aborted by user')) if dryrun: ui.write('hg update -c %s &&\n' % divergent) ui.write('hg merge %s &&\n' % other)