diff --git a/mercurial/merge.py b/mercurial/merge.py --- a/mercurial/merge.py +++ b/mercurial/merge.py @@ -2057,6 +2057,9 @@ # If we're updating to a location, clean up any stale temporary includes # (ex: this happens during hg rebase --abort). if not branchmerge: + if not stats.unresolvedcount: + ms = mergestatemod.mergestate.read(repo) + ms.reset() sparse.prunetemporaryincludes(repo) if updatedirstate: diff --git a/relnotes/next b/relnotes/next --- a/relnotes/next +++ b/relnotes/next @@ -16,6 +16,13 @@ == Backwards Compatibility Changes == + * If a command, such as `hg update -m`, automatically resolved all + conflicts, it used to still leave you with the merge state. You + could see that by running `hg resolve -l` (which would then show + only files marked with `R` for "resolved"). You could also see it + as a node in the graph log output showing `%`. This confused some + users. The merge state will now be cleared instead when all + conflicts were automatically resolved. == Internal API Changes == diff --git a/tests/test-merge-changedelete.t b/tests/test-merge-changedelete.t --- a/tests/test-merge-changedelete.t +++ b/tests/test-merge-changedelete.t @@ -631,7 +631,7 @@ $ testtransitions() { > # this traversal order covers every transition - > tools="local other prompt local fail other local prompt other fail prompt fail local" + > tools="fail prompt fail" > lasttool="merge3" > for tool in $tools; do > echo "=== :$lasttool -> :$tool ===" @@ -649,67 +649,7 @@ > } $ testtransitions - === :merge3 -> :local === - (no more unresolved files) - --- diff of status --- - (status identical) - - === :local -> :other === - (no more unresolved files) - --- diff of status --- - (status identical) - - === :other -> :prompt === - file 'file1' was deleted in other [merge rev] but was modified in local [working copy]. - You can use (c)hanged version, (d)elete, or leave (u)nresolved. - What do you want to do? - file 'file2' was deleted in local [working copy] but was modified in other [merge rev]. - You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved. - What do you want to do? - file 'file3' needs to be resolved. - You can keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved. - What do you want to do? - --- diff of status --- - (status identical) - - === :prompt -> :local === - (no more unresolved files) - --- diff of status --- - (status identical) - - === :local -> :fail === - --- diff of status --- - (status identical) - - === :fail -> :other === - (no more unresolved files) - --- diff of status --- - (status identical) - - === :other -> :local === - (no more unresolved files) - --- diff of status --- - (status identical) - - === :local -> :prompt === - file 'file1' was deleted in other [merge rev] but was modified in local [working copy]. - You can use (c)hanged version, (d)elete, or leave (u)nresolved. - What do you want to do? - file 'file2' was deleted in local [working copy] but was modified in other [merge rev]. - You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved. - What do you want to do? - file 'file3' needs to be resolved. - You can keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved. - What do you want to do? - --- diff of status --- - (status identical) - - === :prompt -> :other === - (no more unresolved files) - --- diff of status --- - (status identical) - - === :other -> :fail === + === :merge3 -> :fail === --- diff of status --- (status identical) @@ -730,11 +670,6 @@ --- diff of status --- (status identical) - === :fail -> :local === - (no more unresolved files) - --- diff of status --- - (status identical) - Non-interactive linear update @@ -798,21 +733,8 @@ A file1 C file3 --- resolve --list --- - R file1 - R file2 --- debugmergestate --- - local (working copy): ab57bf49aa276a22d35a473592d4c34b5abc3eff - other (destination): 10f9a0a634e82080907e62f075ab119cbc565ea6 - file: file1 (state "r") - local path: file1 (hash 60b27f004e454aca81b0480209cce5081ec52390, flags "") - ancestor path: file1 (node b8e02f6433738021a065f94175c7cd23db5f05be) - other path: file1 (node 0000000000000000000000000000000000000000) - extra: ancestorlinknode = ab57bf49aa276a22d35a473592d4c34b5abc3eff - file: file2 (state "r") - local path: file2 (hash 0000000000000000000000000000000000000000, flags "") - ancestor path: file2 (node 5d9299349fc01ddd25d0070d149b124d8f10411e) - other path: file2 (node e7c1328648519852e723de86c0c0525acd779257) - extra: ancestorlinknode = ab57bf49aa276a22d35a473592d4c34b5abc3eff + no merge state found --- file1 --- 1 changed @@ -835,21 +757,8 @@ C file2 C file3 --- resolve --list --- - R file1 - R file2 --- debugmergestate --- - local (working copy): ab57bf49aa276a22d35a473592d4c34b5abc3eff - other (destination): 10f9a0a634e82080907e62f075ab119cbc565ea6 - file: file1 (state "r") - local path: file1 (hash 60b27f004e454aca81b0480209cce5081ec52390, flags "") - ancestor path: file1 (node b8e02f6433738021a065f94175c7cd23db5f05be) - other path: file1 (node 0000000000000000000000000000000000000000) - extra: ancestorlinknode = ab57bf49aa276a22d35a473592d4c34b5abc3eff - file: file2 (state "r") - local path: file2 (hash 0000000000000000000000000000000000000000, flags "") - ancestor path: file2 (node 5d9299349fc01ddd25d0070d149b124d8f10411e) - other path: file2 (node e7c1328648519852e723de86c0c0525acd779257) - extra: ancestorlinknode = ab57bf49aa276a22d35a473592d4c34b5abc3eff + no merge state found *** file1 does not exist --- file2 --- 2 @@ -997,61 +906,7 @@ Test transitions between different merge tools $ testtransitions - === :merge3 -> :local === - (no more unresolved files) - --- diff of status --- - (status identical) - - === :local -> :other === - (no more unresolved files) - --- diff of status --- - (status identical) - - === :other -> :prompt === - file 'file1' was deleted in other [destination] but was modified in local [working copy]. - You can use (c)hanged version, (d)elete, or leave (u)nresolved. - What do you want to do? - file 'file2' was deleted in local [working copy] but was modified in other [destination]. - You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved. - What do you want to do? - --- diff of status --- - (status identical) - - === :prompt -> :local === - (no more unresolved files) - --- diff of status --- - (status identical) - - === :local -> :fail === - --- diff of status --- - (status identical) - - === :fail -> :other === - (no more unresolved files) - --- diff of status --- - (status identical) - - === :other -> :local === - (no more unresolved files) - --- diff of status --- - (status identical) - - === :local -> :prompt === - file 'file1' was deleted in other [destination] but was modified in local [working copy]. - You can use (c)hanged version, (d)elete, or leave (u)nresolved. - What do you want to do? - file 'file2' was deleted in local [working copy] but was modified in other [destination]. - You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved. - What do you want to do? - --- diff of status --- - (status identical) - - === :prompt -> :other === - (no more unresolved files) - --- diff of status --- - (status identical) - - === :other -> :fail === + === :merge3 -> :fail === --- diff of status --- (status identical) @@ -1069,8 +924,3 @@ --- diff of status --- (status identical) - === :fail -> :local === - (no more unresolved files) - --- diff of status --- - (status identical) - diff --git a/tests/test-merge-tools.t b/tests/test-merge-tools.t --- a/tests/test-merge-tools.t +++ b/tests/test-merge-tools.t @@ -1064,7 +1064,6 @@ # hg stat M f # hg resolve --list - R f update should also have --tool