Mercurial > hg
comparison hgext/histedit.py @ 24767:477e76936b1d
histedit: convert pick action into a class
This converts the pick action into a histeditclass instance, as part of an
ongoing effort to refactor histedit for maintainability and robustness.
The test output changed because previously pick would only report the commit
disappearing if there were no merge conflicts. Now that we've unified the normal
and the --continue flows, they act the same and we get the warning even after
--continue.
author | Durham Goode <durham@fb.com> |
---|---|
date | Sat, 04 Apr 2015 11:39:08 -0700 |
parents | cfb8f5e3ca49 |
children | 342671704344 |
comparison
equal
deleted
inserted
replaced
24766:cfb8f5e3ca49 | 24767:477e76936b1d |
---|---|
485 date=date, | 485 date=date, |
486 extra=extra, | 486 extra=extra, |
487 editor=editor) | 487 editor=editor) |
488 return repo.commitctx(new) | 488 return repo.commitctx(new) |
489 | 489 |
490 def pick(ui, state, ha, opts): | 490 class pick(histeditaction): |
491 repo, ctxnode = state.repo, state.parentctxnode | 491 def run(self): |
492 ctx = repo[ctxnode] | 492 rulectx = self.repo[self.node] |
493 oldctx = repo[ha] | 493 if rulectx.parents()[0].node() == self.state.parentctxnode: |
494 if oldctx.parents()[0] == ctx: | 494 self.repo.ui.debug('node %s unchanged\n' % node.short(self.node)) |
495 ui.debug('node %s unchanged\n' % ha[:12]) | 495 return rulectx, [] |
496 return oldctx, [] | 496 |
497 hg.update(repo, ctx.node()) | 497 return super(pick, self).run() |
498 stats = applychanges(ui, repo, oldctx, opts) | |
499 if stats and stats[3] > 0: | |
500 raise error.InterventionRequired(_('Fix up the change and run ' | |
501 'hg histedit --continue')) | |
502 # drop the second merge parent | |
503 commit = commitfuncfor(repo, oldctx) | |
504 n = commit(text=oldctx.description(), user=oldctx.user(), | |
505 date=oldctx.date(), extra=oldctx.extra()) | |
506 if n is None: | |
507 ui.warn(_('%s: empty changeset\n') % ha[:12]) | |
508 return ctx, [] | |
509 new = repo[n] | |
510 return new, [(oldctx.node(), (n,))] | |
511 | |
512 | 498 |
513 def edit(ui, state, ha, opts): | 499 def edit(ui, state, ha, opts): |
514 repo, ctxnode = state.repo, state.parentctxnode | 500 repo, ctxnode = state.repo, state.parentctxnode |
515 ctx = repo[ctxnode] | 501 ctx = repo[ctxnode] |
516 oldctx = repo[ha] | 502 oldctx = repo[ha] |
937 if action in ('f', 'fold', 'r', 'roll'): | 923 if action in ('f', 'fold', 'r', 'roll'): |
938 message = 'fold-temp-revision %s' % currentnode[:12] | 924 message = 'fold-temp-revision %s' % currentnode[:12] |
939 else: | 925 else: |
940 message = ctx.description() | 926 message = ctx.description() |
941 editopt = action in ('e', 'edit', 'm', 'mess') | 927 editopt = action in ('e', 'edit', 'm', 'mess') |
942 canonaction = {'e': 'edit', 'm': 'mess', 'p': 'pick'} | 928 canonaction = {'e': 'edit', 'm': 'mess'} |
943 editform = 'histedit.%s' % canonaction.get(action, action) | 929 editform = 'histedit.%s' % canonaction.get(action, action) |
944 editor = cmdutil.getcommiteditor(edit=editopt, editform=editform) | 930 editor = cmdutil.getcommiteditor(edit=editopt, editform=editform) |
945 commit = commitfuncfor(repo, ctx) | 931 commit = commitfuncfor(repo, ctx) |
946 new = commit(text=message, user=ctx.user(), date=ctx.date(), | 932 new = commit(text=message, user=ctx.user(), date=ctx.date(), |
947 extra=ctx.extra(), editor=editor) | 933 extra=ctx.extra(), editor=editor) |