# HG changeset patch # User Ryan McElroy # Date 2017-10-06 13:48:43 # Node ID c0a524f77e8afc61d2ebcd518ecf65955b4afb35 # Parent 143337bcec9b387d1cd81d5036cf871abf768055 merge: ensure that we always commit the mergestate In future patches, we may halt the merge process based on configuration or user requests by raising exceptions. We need to ensure that the mergestate is unconditionally committed even when such an exception is raised. Depends on D930. Differential Revision: https://phab.mercurial-scm.org/D931 diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -1537,30 +1537,32 @@ def applyupdates(repo, actions, wctx, mc newactions.append((f, args, msg)) mergeactions = newactions - # premerge - tocomplete = [] - for f, args, msg in mergeactions: - repo.ui.debug(" %s: %s -> m (premerge)\n" % (f, msg)) - z += 1 - progress(_updating, z, item=f, total=numupdates, unit=_files) - if f == '.hgsubstate': # subrepo states need updating - subrepo.submerge(repo, wctx, mctx, wctx.ancestor(mctx), - overwrite, labels) - continue - wctx[f].audit() - complete, r = ms.preresolve(f, wctx) - if not complete: - numupdates += 1 - tocomplete.append((f, args, msg)) + try: + # premerge + tocomplete = [] + for f, args, msg in mergeactions: + repo.ui.debug(" %s: %s -> m (premerge)\n" % (f, msg)) + z += 1 + progress(_updating, z, item=f, total=numupdates, unit=_files) + if f == '.hgsubstate': # subrepo states need updating + subrepo.submerge(repo, wctx, mctx, wctx.ancestor(mctx), + overwrite, labels) + continue + wctx[f].audit() + complete, r = ms.preresolve(f, wctx) + if not complete: + numupdates += 1 + tocomplete.append((f, args, msg)) - # merge - for f, args, msg in tocomplete: - repo.ui.debug(" %s: %s -> m (merge)\n" % (f, msg)) - z += 1 - progress(_updating, z, item=f, total=numupdates, unit=_files) - ms.resolve(f, wctx) + # merge + for f, args, msg in tocomplete: + repo.ui.debug(" %s: %s -> m (merge)\n" % (f, msg)) + z += 1 + progress(_updating, z, item=f, total=numupdates, unit=_files) + ms.resolve(f, wctx) - ms.commit() + finally: + ms.commit() unresolved = ms.unresolvedcount()