changeset 44437:6a34e438461b

commit: clear resolved mergestate even if working copy is clean If the mergestate has resolved conflicts and a commit is successfully created (either because there are changes in the working copy or because ui.allowemptycommit=yes), we will also clear the merge state. However, if the working copy is clean (and ui.allowemptycommit=no), we leave the mergestate there. The user may notice it in `hg resolve -l` output (but not in `hg status -v` output). It's not clear how the user should clear it, but probably via `hg co -C .`. It's also quite likely that they won't even notice it and it will get cleared by a later `hg commit` (of unrelated changes). This patch makes it so that `hg commit` also clears resolved merge conflicts even if the command doesn't end up writing a commit because the working copy was empty. That's probably a little weird (commands that abort should generally avoid changing the repo), but it still seems mostly harmless, and it reduces the risk of more bugs like https://bz.mercurial-scm.org/show_bug.cgi?id=5494. I just ran into a version of that bug in the Evolve extension and that's what triggered this series. Differential Revision: https://phab.mercurial-scm.org/D8196
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 28 Feb 2020 11:32:02 -0800
parents 09f3e003fc2a
children f0021fbedea9
files mercurial/localrepo.py relnotes/next tests/test-update-branches.t
diffstat 3 files changed, 4 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/localrepo.py	Wed Mar 04 00:45:54 2020 -0500
+++ b/mercurial/localrepo.py	Fri Feb 28 11:32:02 2020 -0800
@@ -2956,6 +2956,7 @@
                 or self.ui.configbool(b'ui', b'allowemptycommit')
             )
             if not allowemptycommit:
+                ms.reset()
                 return None
 
             if merge and cctx.deleted():
--- a/relnotes/next	Wed Mar 04 00:45:54 2020 -0500
+++ b/relnotes/next	Fri Feb 28 11:32:02 2020 -0800
@@ -61,6 +61,9 @@
  * `hg debugmergestate` output format changed. Let us know if that is
    causing you problems and we'll roll it back.
 
+ * Resolved merge conflicts are now cleared by `hg commit` even if the
+   working copy has no changes.
+
 
 == Internal API Changes ==
 
--- a/tests/test-update-branches.t	Wed Mar 04 00:45:54 2020 -0500
+++ b/tests/test-update-branches.t	Fri Feb 28 11:32:02 2020 -0800
@@ -357,7 +357,6 @@
   nothing changed
   [1]
   $ hg resolve -l
-  R a
 
 Change/delete conflict is not allowed
   $ hg up -qC 3