HomePhabricator

commit: clear resolved mergestate even if working copy is clean

Authored by martinvonz.

Description

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