comparison mercurial/commands.py @ 45550:2b339c6c6e99

merge: add a back_out() function to encapsulate update() I've sent several earlier patches adding `merge.clean_update()`, `merge.merge()` etc, one function for each use case. This patch continues that work. I plan to hide the complex `update()` eventually. Differential Revision: https://phab.mercurial-scm.org/D9064
author Martin von Zweigbergk <martinvonz@google.com>
date Mon, 21 Sep 2020 09:56:48 -0700
parents 32ce4cbaec4b
children 03726f5b6092
comparison
equal deleted inserted replaced
45549:68906595016c 45550:2b339c6c6e99
788 if date: 788 if date:
789 opts[b'date'] = dateutil.parsedate(date) 789 opts[b'date'] = dateutil.parsedate(date)
790 790
791 cmdutil.checkunfinished(repo) 791 cmdutil.checkunfinished(repo)
792 cmdutil.bailifchanged(repo) 792 cmdutil.bailifchanged(repo)
793 node = scmutil.revsingle(repo, rev).node() 793 ctx = scmutil.revsingle(repo, rev)
794 node = ctx.node()
794 795
795 op1, op2 = repo.dirstate.parents() 796 op1, op2 = repo.dirstate.parents()
796 if not repo.changelog.isancestor(node, op1): 797 if not repo.changelog.isancestor(node, op1):
797 raise error.Abort(_(b'cannot backout change that is not an ancestor')) 798 raise error.Abort(_(b'cannot backout change that is not an ancestor'))
798 799
819 rctx = scmutil.revsingle(repo, hex(parent)) 820 rctx = scmutil.revsingle(repo, hex(parent))
820 if not opts.get(b'merge') and op1 != node: 821 if not opts.get(b'merge') and op1 != node:
821 with dirstateguard.dirstateguard(repo, b'backout'): 822 with dirstateguard.dirstateguard(repo, b'backout'):
822 overrides = {(b'ui', b'forcemerge'): opts.get(b'tool', b'')} 823 overrides = {(b'ui', b'forcemerge'): opts.get(b'tool', b'')}
823 with ui.configoverride(overrides, b'backout'): 824 with ui.configoverride(overrides, b'backout'):
824 stats = mergemod.update( 825 stats = mergemod.back_out(ctx, parent=repo[parent])
825 repo,
826 parent,
827 branchmerge=True,
828 force=True,
829 ancestor=node,
830 mergeancestor=False,
831 )
832 repo.setparents(op1, op2) 826 repo.setparents(op1, op2)
833 hg._showstats(repo, stats) 827 hg._showstats(repo, stats)
834 if stats.unresolvedcount: 828 if stats.unresolvedcount:
835 repo.ui.status( 829 repo.ui.status(
836 _(b"use 'hg resolve' to retry unresolved file merges\n") 830 _(b"use 'hg resolve' to retry unresolved file merges\n")