Patchwork [4,of,4,mergedriver] filemerge: default change/delete conflicts to 'leave unresolved' (BC)

login
register
mail settings
Submitter Siddharth Agarwal
Date Dec. 23, 2015, 8:54 p.m.
Message ID <1059f0e46c9c1d1d88ce.1450904042@dev666.prn1.facebook.com>
Download mbox | patch
Permalink /patch/12322/
State Accepted
Delegated to: Augie Fackler
Headers show

Comments

Siddharth Agarwal - Dec. 23, 2015, 8:54 p.m.
# HG changeset patch
# User Siddharth Agarwal <sid0@fb.com>
# Date 1450903905 28800
#      Wed Dec 23 12:51:45 2015 -0800
# Node ID 1059f0e46c9c1d1d88ce80bbbd7b8acb959e10e1
# Parent  1a9f3945bca494f92ae7e94bf5d6becf519e0c69
# Available At http://42.netv6.net/sid0-wip/hg/
#              hg pull http://42.netv6.net/sid0-wip/hg/ -r 1059f0e46c9c
filemerge: default change/delete conflicts to 'leave unresolved' (BC)

It makes far more sense to leave these conflicts unresolved and kick back to
the user than to just assume that the local version be chosen. There are almost
certainly buggy scripts and applications using Mercurial in the wild that do
merges or rebases non-interactively, and then assume that if the operation
succeeded there's nothing the user needs to pay attention to.

(This wasn't possible earlier because there was no way to re-resolve
change/delete conflicts -- but now it is.)
Augie Fackler - Dec. 31, 2015, 4:46 p.m.
On Wed, Dec 23, 2015 at 12:54:02PM -0800, Siddharth Agarwal wrote:
> # HG changeset patch
> # User Siddharth Agarwal <sid0@fb.com>
> # Date 1450903905 28800
> #      Wed Dec 23 12:51:45 2015 -0800
> # Node ID 1059f0e46c9c1d1d88ce80bbbd7b8acb959e10e1
> # Parent  1a9f3945bca494f92ae7e94bf5d6becf519e0c69
> # Available At http://42.netv6.net/sid0-wip/hg/
> #              hg pull http://42.netv6.net/sid0-wip/hg/ -r 1059f0e46c9c
> filemerge: default change/delete conflicts to 'leave unresolved' (BC)

I'm a big fan. The old behavior is actually surprising to me, and I'm
probably the author of at least one such buggy script.

>
> It makes far more sense to leave these conflicts unresolved and kick back to
> the user than to just assume that the local version be chosen. There are almost
> certainly buggy scripts and applications using Mercurial in the wild that do
> merges or rebases non-interactively, and then assume that if the operation
> succeeded there's nothing the user needs to pay attention to.
>
> (This wasn't possible earlier because there was no way to re-resolve
> change/delete conflicts -- but now it is.)
>
> diff --git a/mercurial/filemerge.py b/mercurial/filemerge.py
> --- a/mercurial/filemerge.py
> +++ b/mercurial/filemerge.py
> @@ -240,14 +240,14 @@ def _iprompt(repo, mynode, orig, fcd, fc
>              index = ui.promptchoice(
>                  _("local changed %s which remote deleted\n"
>                    "use (c)hanged version, (d)elete, or leave (u)nresolved?"
> -                  "$$ &Changed $$ &Delete $$ &Unresolved") % fd, 0)
> +                  "$$ &Changed $$ &Delete $$ &Unresolved") % fd, 2)
>              choice = ['local', 'other', 'unresolved'][index]
>          elif fcd.isabsent():
>              index = ui.promptchoice(
>                  _("remote changed %s which local deleted\n"
>                    "use (c)hanged version, leave (d)eleted, or "
>                    "leave (u)nresolved?"
> -                  "$$ &Changed $$ &Deleted $$ &Unresolved") % fd, 0)
> +                  "$$ &Changed $$ &Deleted $$ &Unresolved") % fd, 2)
>              choice = ['other', 'local', 'unresolved'][index]
>          else:
>              index = ui.promptchoice(
> 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
> @@ -55,12 +55,12 @@ Non-interactive merge:
>
>    $ hg merge -y
>    local changed file1 which remote deleted
> -  use (c)hanged version, (d)elete, or leave (u)nresolved? c
> +  use (c)hanged version, (d)elete, or leave (u)nresolved? u
>    remote changed file2 which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    merging file3
>    warning: conflicts while merging file3! (edit, then use 'hg resolve --mark')
> -  0 files updated, 2 files merged, 0 files removed, 1 files unresolved
> +  0 files updated, 0 files merged, 0 files removed, 3 files unresolved
>    use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
>    [1]
>
> @@ -70,18 +70,18 @@ Non-interactive merge:
>    M file3
>    C file1
>    --- resolve --list ---
> -  R file1
> -  R file2
> +  U file1
> +  U file2
>    U file3
>    --- debugmergestate ---
>    * version 2 records
>    local: 13910f48cf7bdb2a0ba6e24b4900e4fdd5739dd4
>    other: 10f9a0a634e82080907e62f075ab119cbc565ea6
> -  file: file1 (record type "C", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
> +  file: file1 (record type "C", state "u", hash 60b27f004e454aca81b0480209cce5081ec52390)
>      local path: file1 (flags "")
>      ancestor path: file1 (node b8e02f6433738021a065f94175c7cd23db5f05be)
>      other path: file1 (node null)
> -  file: file2 (record type "C", state "r", hash null)
> +  file: file2 (record type "C", state "u", hash null)
>      local path: file2 (flags "")
>      ancestor path: file2 (node 5d9299349fc01ddd25d0070d149b124d8f10411e)
>      other path: file2 (node e7c1328648519852e723de86c0c0525acd779257)
> @@ -470,12 +470,12 @@ Force prompts
>
>    $ hg merge --tool :prompt
>    local changed file1 which remote deleted
> -  use (c)hanged version, (d)elete, or leave (u)nresolved? c
> +  use (c)hanged version, (d)elete, or leave (u)nresolved? u
>    remote changed file2 which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    no tool found to merge file3
>    keep (l)ocal, take (o)ther, or leave (u)nresolved? u
> -  0 files updated, 2 files merged, 0 files removed, 1 files unresolved
> +  0 files updated, 0 files merged, 0 files removed, 3 files unresolved
>    use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
>    [1]
>    $ status
> @@ -484,18 +484,18 @@ Force prompts
>    M file3
>    C file1
>    --- resolve --list ---
> -  R file1
> -  R file2
> +  U file1
> +  U file2
>    U file3
>    --- debugmergestate ---
>    * version 2 records
>    local: 13910f48cf7bdb2a0ba6e24b4900e4fdd5739dd4
>    other: 10f9a0a634e82080907e62f075ab119cbc565ea6
> -  file: file1 (record type "C", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
> +  file: file1 (record type "C", state "u", hash 60b27f004e454aca81b0480209cce5081ec52390)
>      local path: file1 (flags "")
>      ancestor path: file1 (node b8e02f6433738021a065f94175c7cd23db5f05be)
>      other path: file1 (node null)
> -  file: file2 (record type "C", state "r", hash null)
> +  file: file2 (record type "C", state "u", hash null)
>      local path: file2 (flags "")
>      ancestor path: file2 (node 5d9299349fc01ddd25d0070d149b124d8f10411e)
>      other path: file2 (node e7c1328648519852e723de86c0c0525acd779257)
> @@ -520,12 +520,12 @@ Choose to merge all files
>
>    $ hg merge --tool :merge3
>    local changed file1 which remote deleted
> -  use (c)hanged version, (d)elete, or leave (u)nresolved? c
> +  use (c)hanged version, (d)elete, or leave (u)nresolved? u
>    remote changed file2 which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    merging file3
>    warning: conflicts while merging file3! (edit, then use 'hg resolve --mark')
> -  0 files updated, 2 files merged, 0 files removed, 1 files unresolved
> +  0 files updated, 0 files merged, 0 files removed, 3 files unresolved
>    use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
>    [1]
>    $ status
> @@ -534,18 +534,18 @@ Choose to merge all files
>    M file3
>    C file1
>    --- resolve --list ---
> -  R file1
> -  R file2
> +  U file1
> +  U file2
>    U file3
>    --- debugmergestate ---
>    * version 2 records
>    local: 13910f48cf7bdb2a0ba6e24b4900e4fdd5739dd4
>    other: 10f9a0a634e82080907e62f075ab119cbc565ea6
> -  file: file1 (record type "C", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
> +  file: file1 (record type "C", state "u", hash 60b27f004e454aca81b0480209cce5081ec52390)
>      local path: file1 (flags "")
>      ancestor path: file1 (node b8e02f6433738021a065f94175c7cd23db5f05be)
>      other path: file1 (node null)
> -  file: file2 (record type "C", state "r", hash null)
> +  file: file2 (record type "C", state "u", hash null)
>      local path: file2 (flags "")
>      ancestor path: file2 (node 5d9299349fc01ddd25d0070d149b124d8f10411e)
>      other path: file2 (node e7c1328648519852e723de86c0c0525acd779257)
> @@ -679,27 +679,29 @@ Non-interactive linear update
>    $ hg rm file2
>    $ hg update 1 -y
>    local changed file1 which remote deleted
> -  use (c)hanged version, (d)elete, or leave (u)nresolved? c
> +  use (c)hanged version, (d)elete, or leave (u)nresolved? u
>    remote changed file2 which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> -  1 files updated, 2 files merged, 0 files removed, 0 files unresolved
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
> +  1 files updated, 0 files merged, 0 files removed, 2 files unresolved
> +  use 'hg resolve' to retry unresolved file merges
> +  [1]
>    $ status
>    --- status ---
>    A file1
>    C file2
>    C file3
>    --- resolve --list ---
> -  R file1
> -  R file2
> +  U file1
> +  U file2
>    --- debugmergestate ---
>    * version 2 records
>    local: ab57bf49aa276a22d35a473592d4c34b5abc3eff
>    other: 10f9a0a634e82080907e62f075ab119cbc565ea6
> -  file: file1 (record type "C", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
> +  file: file1 (record type "C", state "u", hash 60b27f004e454aca81b0480209cce5081ec52390)
>      local path: file1 (flags "")
>      ancestor path: file1 (node b8e02f6433738021a065f94175c7cd23db5f05be)
>      other path: file1 (node null)
> -  file: file2 (record type "C", state "r", hash null)
> +  file: file2 (record type "C", state "u", hash null)
>      local path: file2 (flags "")
>      ancestor path: file2 (node 5d9299349fc01ddd25d0070d149b124d8f10411e)
>      other path: file2 (node e7c1328648519852e723de86c0c0525acd779257)
> @@ -878,27 +880,29 @@ Choose to merge all files
>    $ hg rm file2
>    $ hg update 1 --tool :merge3
>    local changed file1 which remote deleted
> -  use (c)hanged version, (d)elete, or leave (u)nresolved? c
> +  use (c)hanged version, (d)elete, or leave (u)nresolved? u
>    remote changed file2 which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> -  1 files updated, 2 files merged, 0 files removed, 0 files unresolved
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
> +  1 files updated, 0 files merged, 0 files removed, 2 files unresolved
> +  use 'hg resolve' to retry unresolved file merges
> +  [1]
>    $ status
>    --- status ---
>    A file1
>    C file2
>    C file3
>    --- resolve --list ---
> -  R file1
> -  R file2
> +  U file1
> +  U file2
>    --- debugmergestate ---
>    * version 2 records
>    local: ab57bf49aa276a22d35a473592d4c34b5abc3eff
>    other: 10f9a0a634e82080907e62f075ab119cbc565ea6
> -  file: file1 (record type "C", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
> +  file: file1 (record type "C", state "u", hash 60b27f004e454aca81b0480209cce5081ec52390)
>      local path: file1 (flags "")
>      ancestor path: file1 (node b8e02f6433738021a065f94175c7cd23db5f05be)
>      other path: file1 (node null)
> -  file: file2 (record type "C", state "r", hash null)
> +  file: file2 (record type "C", state "u", hash null)
>      local path: file2 (flags "")
>      ancestor path: file2 (node 5d9299349fc01ddd25d0070d149b124d8f10411e)
>      other path: file2 (node e7c1328648519852e723de86c0c0525acd779257)
> diff --git a/tests/test-merge-force.t b/tests/test-merge-force.t
> --- a/tests/test-merge-force.t
> +++ b/tests/test-merge-force.t
> @@ -143,55 +143,55 @@ Merge with remote
>
>    $ hg merge -f --tool internal:merge3 'desc("remote")'
>    local changed content1_missing_content1_content4-tracked which remote deleted
> -  use (c)hanged version, (d)elete, or leave (u)nresolved? c
> +  use (c)hanged version, (d)elete, or leave (u)nresolved? u
>    local changed content1_missing_content3_content3-tracked which remote deleted
> -  use (c)hanged version, (d)elete, or leave (u)nresolved? c
> +  use (c)hanged version, (d)elete, or leave (u)nresolved? u
>    local changed content1_missing_content3_content4-tracked which remote deleted
> -  use (c)hanged version, (d)elete, or leave (u)nresolved? c
> +  use (c)hanged version, (d)elete, or leave (u)nresolved? u
>    local changed content1_missing_missing_content4-tracked which remote deleted
> -  use (c)hanged version, (d)elete, or leave (u)nresolved? c
> +  use (c)hanged version, (d)elete, or leave (u)nresolved? u
>    remote changed content1_content2_content1_content1-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content1_content2-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content1_content4-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content1_missing-tracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content1_missing-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content2_content1-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content2_content2-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content2_content4-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content2_missing-tracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content2_missing-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content3_content1-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content3_content2-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content3_content3-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content3_content4-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content3_missing-tracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content3_missing-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_missing_content1-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_missing_content2-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_missing_content4-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_missing_missing-tracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_missing_missing-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    merging content1_content2_content1_content4-tracked
>    merging content1_content2_content2_content1-tracked
>    merging content1_content2_content2_content4-tracked
> @@ -215,7 +215,7 @@ Merge with remote
>    warning: conflicts while merging missing_content2_content3_content4-tracked! (edit, then use 'hg resolve --mark')
>    warning: conflicts while merging missing_content2_missing_content4-tracked! (edit, then use 'hg resolve --mark')
>    warning: conflicts while merging missing_content2_missing_content4-untracked! (edit, then use 'hg resolve --mark')
> -  18 files updated, 28 files merged, 8 files removed, 10 files unresolved
> +  18 files updated, 3 files merged, 8 files removed, 35 files unresolved
>    use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
>    [1]
>
> @@ -227,39 +227,39 @@ Interestingly, one untracked file got me
>  odd 'if force and branchmerge and different' case in manifestmerge().
>
>    $ hg resolve -l
> -  R content1_content2_content1_content1-untracked
> -  R content1_content2_content1_content2-untracked
> +  U content1_content2_content1_content1-untracked
> +  U content1_content2_content1_content2-untracked
>    U content1_content2_content1_content4-tracked
> -  R content1_content2_content1_content4-untracked
> -  R content1_content2_content1_missing-tracked
> -  R content1_content2_content1_missing-untracked
> +  U content1_content2_content1_content4-untracked
> +  U content1_content2_content1_missing-tracked
> +  U content1_content2_content1_missing-untracked
>    R content1_content2_content2_content1-tracked
> -  R content1_content2_content2_content1-untracked
> -  R content1_content2_content2_content2-untracked
> +  U content1_content2_content2_content1-untracked
> +  U content1_content2_content2_content2-untracked
>    U content1_content2_content2_content4-tracked
> -  R content1_content2_content2_content4-untracked
> -  R content1_content2_content2_missing-tracked
> -  R content1_content2_content2_missing-untracked
> +  U content1_content2_content2_content4-untracked
> +  U content1_content2_content2_missing-tracked
> +  U content1_content2_content2_missing-untracked
>    R content1_content2_content3_content1-tracked
> -  R content1_content2_content3_content1-untracked
> -  R content1_content2_content3_content2-untracked
> +  U content1_content2_content3_content1-untracked
> +  U content1_content2_content3_content2-untracked
>    U content1_content2_content3_content3-tracked
> -  R content1_content2_content3_content3-untracked
> +  U content1_content2_content3_content3-untracked
>    U content1_content2_content3_content4-tracked
> -  R content1_content2_content3_content4-untracked
> -  R content1_content2_content3_missing-tracked
> -  R content1_content2_content3_missing-untracked
> +  U content1_content2_content3_content4-untracked
> +  U content1_content2_content3_missing-tracked
> +  U content1_content2_content3_missing-untracked
>    R content1_content2_missing_content1-tracked
> -  R content1_content2_missing_content1-untracked
> -  R content1_content2_missing_content2-untracked
> +  U content1_content2_missing_content1-untracked
> +  U content1_content2_missing_content2-untracked
>    U content1_content2_missing_content4-tracked
> -  R content1_content2_missing_content4-untracked
> -  R content1_content2_missing_missing-tracked
> -  R content1_content2_missing_missing-untracked
> -  R content1_missing_content1_content4-tracked
> -  R content1_missing_content3_content3-tracked
> -  R content1_missing_content3_content4-tracked
> -  R content1_missing_missing_content4-tracked
> +  U content1_content2_missing_content4-untracked
> +  U content1_content2_missing_missing-tracked
> +  U content1_content2_missing_missing-untracked
> +  U content1_missing_content1_content4-tracked
> +  U content1_missing_content3_content3-tracked
> +  U content1_missing_content3_content4-tracked
> +  U content1_missing_missing_content4-tracked
>    U missing_content2_content2_content4-tracked
>    U missing_content2_content3_content3-tracked
>    U missing_content2_content3_content4-tracked
> @@ -705,63 +705,63 @@ Re-resolve and check status
>    $ hg resolve --unmark --all
>    $ hg resolve --all --tool internal:merge3
>    remote changed content1_content2_content1_content1-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content1_content2-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    merging content1_content2_content1_content4-tracked
>    remote changed content1_content2_content1_content4-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content1_missing-tracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content1_missing-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    merging content1_content2_content2_content1-tracked
>    remote changed content1_content2_content2_content1-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content2_content2-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    merging content1_content2_content2_content4-tracked
>    remote changed content1_content2_content2_content4-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content2_missing-tracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content2_missing-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    merging content1_content2_content3_content1-tracked
>    remote changed content1_content2_content3_content1-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content3_content2-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    merging content1_content2_content3_content3-tracked
>    remote changed content1_content2_content3_content3-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    merging content1_content2_content3_content4-tracked
>    remote changed content1_content2_content3_content4-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content3_missing-tracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_content3_missing-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    merging content1_content2_missing_content1-tracked
>    remote changed content1_content2_missing_content1-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_missing_content2-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    merging content1_content2_missing_content4-tracked
>    remote changed content1_content2_missing_content4-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_missing_missing-tracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    remote changed content1_content2_missing_missing-untracked which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    local changed content1_missing_content1_content4-tracked which remote deleted
> -  use (c)hanged version, (d)elete, or leave (u)nresolved? c
> +  use (c)hanged version, (d)elete, or leave (u)nresolved? u
>    local changed content1_missing_content3_content3-tracked which remote deleted
> -  use (c)hanged version, (d)elete, or leave (u)nresolved? c
> +  use (c)hanged version, (d)elete, or leave (u)nresolved? u
>    local changed content1_missing_content3_content4-tracked which remote deleted
> -  use (c)hanged version, (d)elete, or leave (u)nresolved? c
> +  use (c)hanged version, (d)elete, or leave (u)nresolved? u
>    local changed content1_missing_missing_content4-tracked which remote deleted
> -  use (c)hanged version, (d)elete, or leave (u)nresolved? c
> +  use (c)hanged version, (d)elete, or leave (u)nresolved? u
>    merging missing_content2_content2_content4-tracked
>    merging missing_content2_content3_content3-tracked
>    merging missing_content2_content3_content4-tracked
> diff --git a/tests/test-merge-remove.t b/tests/test-merge-remove.t
> --- a/tests/test-merge-remove.t
> +++ b/tests/test-merge-remove.t
> @@ -103,10 +103,11 @@ Those who use force will lose
>
>    $ hg merge -f
>    remote changed bar which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>    merging foo1 and foo to foo1
> -  0 files updated, 2 files merged, 0 files removed, 0 files unresolved
> -  (branch merge, don't forget to commit)
> +  0 files updated, 1 files merged, 0 files removed, 1 files unresolved
> +  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
> +  [1]
>    $ cat bar
>    bleh
>    $ hg st
> diff --git a/tests/test-rename-merge2.t b/tests/test-rename-merge2.t
> --- a/tests/test-rename-merge2.t
> +++ b/tests/test-rename-merge2.t
> @@ -684,7 +684,7 @@ m "um a c" "um x c" "      " "10 do merg
>     a: prompt deleted/changed -> m (premerge)
>    picked tool ':prompt' for a (binary False symlink False changedelete True)
>    remote changed a which local deleted
> -  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
> +  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
>     b: both created -> m (premerge)
>    picked tool 'python ../merge' for b (binary False symlink False changedelete False)
>    merging b
> @@ -703,11 +703,12 @@ m "um a c" "um x c" "      " "10 do merg
>    my rev@02963e448370+ other rev@8dbce441892a ancestor rev@924404dff337
>    launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob)
>    merge tool returned: 0
> -  0 files updated, 3 files merged, 0 files removed, 0 files unresolved
> -  (branch merge, don't forget to commit)
> +  0 files updated, 2 files merged, 0 files removed, 1 files unresolved
> +  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
>    --------------
>    M a
>    M b
> +  abort: unresolved merge conflicts (see "hg help resolve")
>    --------------
>
>    $ tm "up a b" "nm a b" "      " "19 merge b no ancestor, prompt remove a"
> @@ -727,7 +728,7 @@ m "um a c" "um x c" "      " "10 do merg
>     a: prompt changed/deleted -> m (premerge)
>    picked tool ':prompt' for a (binary False symlink False changedelete True)
>    local changed a which remote deleted
> -  use (c)hanged version, (d)elete, or leave (u)nresolved? c
> +  use (c)hanged version, (d)elete, or leave (u)nresolved? u
>     b: both created -> m (premerge)
>    picked tool 'python ../merge' for b (binary False symlink False changedelete False)
>    merging b
> @@ -746,11 +747,12 @@ m "um a c" "um x c" "      " "10 do merg
>    my rev@0b76e65c8289+ other rev@bdb19105162a ancestor rev@924404dff337
>    launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob)
>    merge tool returned: 0
> -  0 files updated, 3 files merged, 0 files removed, 0 files unresolved
> -  (branch merge, don't forget to commit)
> +  0 files updated, 2 files merged, 0 files removed, 1 files unresolved
> +  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
>    --------------
>    M b
>    C a
> +  abort: unresolved merge conflicts (see "hg help resolve")
>    --------------
>
>    $ tm "up a  " "um a b" "      " "20 merge a and b to b, remove a"
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel

Patch

diff --git a/mercurial/filemerge.py b/mercurial/filemerge.py
--- a/mercurial/filemerge.py
+++ b/mercurial/filemerge.py
@@ -240,14 +240,14 @@  def _iprompt(repo, mynode, orig, fcd, fc
             index = ui.promptchoice(
                 _("local changed %s which remote deleted\n"
                   "use (c)hanged version, (d)elete, or leave (u)nresolved?"
-                  "$$ &Changed $$ &Delete $$ &Unresolved") % fd, 0)
+                  "$$ &Changed $$ &Delete $$ &Unresolved") % fd, 2)
             choice = ['local', 'other', 'unresolved'][index]
         elif fcd.isabsent():
             index = ui.promptchoice(
                 _("remote changed %s which local deleted\n"
                   "use (c)hanged version, leave (d)eleted, or "
                   "leave (u)nresolved?"
-                  "$$ &Changed $$ &Deleted $$ &Unresolved") % fd, 0)
+                  "$$ &Changed $$ &Deleted $$ &Unresolved") % fd, 2)
             choice = ['other', 'local', 'unresolved'][index]
         else:
             index = ui.promptchoice(
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
@@ -55,12 +55,12 @@  Non-interactive merge:
 
   $ hg merge -y
   local changed file1 which remote deleted
-  use (c)hanged version, (d)elete, or leave (u)nresolved? c
+  use (c)hanged version, (d)elete, or leave (u)nresolved? u
   remote changed file2 which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging file3
   warning: conflicts while merging file3! (edit, then use 'hg resolve --mark')
-  0 files updated, 2 files merged, 0 files removed, 1 files unresolved
+  0 files updated, 0 files merged, 0 files removed, 3 files unresolved
   use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
   [1]
 
@@ -70,18 +70,18 @@  Non-interactive merge:
   M file3
   C file1
   --- resolve --list ---
-  R file1
-  R file2
+  U file1
+  U file2
   U file3
   --- debugmergestate ---
   * version 2 records
   local: 13910f48cf7bdb2a0ba6e24b4900e4fdd5739dd4
   other: 10f9a0a634e82080907e62f075ab119cbc565ea6
-  file: file1 (record type "C", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
+  file: file1 (record type "C", state "u", hash 60b27f004e454aca81b0480209cce5081ec52390)
     local path: file1 (flags "")
     ancestor path: file1 (node b8e02f6433738021a065f94175c7cd23db5f05be)
     other path: file1 (node null)
-  file: file2 (record type "C", state "r", hash null)
+  file: file2 (record type "C", state "u", hash null)
     local path: file2 (flags "")
     ancestor path: file2 (node 5d9299349fc01ddd25d0070d149b124d8f10411e)
     other path: file2 (node e7c1328648519852e723de86c0c0525acd779257)
@@ -470,12 +470,12 @@  Force prompts
 
   $ hg merge --tool :prompt
   local changed file1 which remote deleted
-  use (c)hanged version, (d)elete, or leave (u)nresolved? c
+  use (c)hanged version, (d)elete, or leave (u)nresolved? u
   remote changed file2 which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   no tool found to merge file3
   keep (l)ocal, take (o)ther, or leave (u)nresolved? u
-  0 files updated, 2 files merged, 0 files removed, 1 files unresolved
+  0 files updated, 0 files merged, 0 files removed, 3 files unresolved
   use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
   [1]
   $ status
@@ -484,18 +484,18 @@  Force prompts
   M file3
   C file1
   --- resolve --list ---
-  R file1
-  R file2
+  U file1
+  U file2
   U file3
   --- debugmergestate ---
   * version 2 records
   local: 13910f48cf7bdb2a0ba6e24b4900e4fdd5739dd4
   other: 10f9a0a634e82080907e62f075ab119cbc565ea6
-  file: file1 (record type "C", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
+  file: file1 (record type "C", state "u", hash 60b27f004e454aca81b0480209cce5081ec52390)
     local path: file1 (flags "")
     ancestor path: file1 (node b8e02f6433738021a065f94175c7cd23db5f05be)
     other path: file1 (node null)
-  file: file2 (record type "C", state "r", hash null)
+  file: file2 (record type "C", state "u", hash null)
     local path: file2 (flags "")
     ancestor path: file2 (node 5d9299349fc01ddd25d0070d149b124d8f10411e)
     other path: file2 (node e7c1328648519852e723de86c0c0525acd779257)
@@ -520,12 +520,12 @@  Choose to merge all files
 
   $ hg merge --tool :merge3
   local changed file1 which remote deleted
-  use (c)hanged version, (d)elete, or leave (u)nresolved? c
+  use (c)hanged version, (d)elete, or leave (u)nresolved? u
   remote changed file2 which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging file3
   warning: conflicts while merging file3! (edit, then use 'hg resolve --mark')
-  0 files updated, 2 files merged, 0 files removed, 1 files unresolved
+  0 files updated, 0 files merged, 0 files removed, 3 files unresolved
   use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
   [1]
   $ status
@@ -534,18 +534,18 @@  Choose to merge all files
   M file3
   C file1
   --- resolve --list ---
-  R file1
-  R file2
+  U file1
+  U file2
   U file3
   --- debugmergestate ---
   * version 2 records
   local: 13910f48cf7bdb2a0ba6e24b4900e4fdd5739dd4
   other: 10f9a0a634e82080907e62f075ab119cbc565ea6
-  file: file1 (record type "C", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
+  file: file1 (record type "C", state "u", hash 60b27f004e454aca81b0480209cce5081ec52390)
     local path: file1 (flags "")
     ancestor path: file1 (node b8e02f6433738021a065f94175c7cd23db5f05be)
     other path: file1 (node null)
-  file: file2 (record type "C", state "r", hash null)
+  file: file2 (record type "C", state "u", hash null)
     local path: file2 (flags "")
     ancestor path: file2 (node 5d9299349fc01ddd25d0070d149b124d8f10411e)
     other path: file2 (node e7c1328648519852e723de86c0c0525acd779257)
@@ -679,27 +679,29 @@  Non-interactive linear update
   $ hg rm file2
   $ hg update 1 -y
   local changed file1 which remote deleted
-  use (c)hanged version, (d)elete, or leave (u)nresolved? c
+  use (c)hanged version, (d)elete, or leave (u)nresolved? u
   remote changed file2 which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
-  1 files updated, 2 files merged, 0 files removed, 0 files unresolved
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
+  1 files updated, 0 files merged, 0 files removed, 2 files unresolved
+  use 'hg resolve' to retry unresolved file merges
+  [1]
   $ status
   --- status ---
   A file1
   C file2
   C file3
   --- resolve --list ---
-  R file1
-  R file2
+  U file1
+  U file2
   --- debugmergestate ---
   * version 2 records
   local: ab57bf49aa276a22d35a473592d4c34b5abc3eff
   other: 10f9a0a634e82080907e62f075ab119cbc565ea6
-  file: file1 (record type "C", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
+  file: file1 (record type "C", state "u", hash 60b27f004e454aca81b0480209cce5081ec52390)
     local path: file1 (flags "")
     ancestor path: file1 (node b8e02f6433738021a065f94175c7cd23db5f05be)
     other path: file1 (node null)
-  file: file2 (record type "C", state "r", hash null)
+  file: file2 (record type "C", state "u", hash null)
     local path: file2 (flags "")
     ancestor path: file2 (node 5d9299349fc01ddd25d0070d149b124d8f10411e)
     other path: file2 (node e7c1328648519852e723de86c0c0525acd779257)
@@ -878,27 +880,29 @@  Choose to merge all files
   $ hg rm file2
   $ hg update 1 --tool :merge3
   local changed file1 which remote deleted
-  use (c)hanged version, (d)elete, or leave (u)nresolved? c
+  use (c)hanged version, (d)elete, or leave (u)nresolved? u
   remote changed file2 which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
-  1 files updated, 2 files merged, 0 files removed, 0 files unresolved
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
+  1 files updated, 0 files merged, 0 files removed, 2 files unresolved
+  use 'hg resolve' to retry unresolved file merges
+  [1]
   $ status
   --- status ---
   A file1
   C file2
   C file3
   --- resolve --list ---
-  R file1
-  R file2
+  U file1
+  U file2
   --- debugmergestate ---
   * version 2 records
   local: ab57bf49aa276a22d35a473592d4c34b5abc3eff
   other: 10f9a0a634e82080907e62f075ab119cbc565ea6
-  file: file1 (record type "C", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
+  file: file1 (record type "C", state "u", hash 60b27f004e454aca81b0480209cce5081ec52390)
     local path: file1 (flags "")
     ancestor path: file1 (node b8e02f6433738021a065f94175c7cd23db5f05be)
     other path: file1 (node null)
-  file: file2 (record type "C", state "r", hash null)
+  file: file2 (record type "C", state "u", hash null)
     local path: file2 (flags "")
     ancestor path: file2 (node 5d9299349fc01ddd25d0070d149b124d8f10411e)
     other path: file2 (node e7c1328648519852e723de86c0c0525acd779257)
diff --git a/tests/test-merge-force.t b/tests/test-merge-force.t
--- a/tests/test-merge-force.t
+++ b/tests/test-merge-force.t
@@ -143,55 +143,55 @@  Merge with remote
 
   $ hg merge -f --tool internal:merge3 'desc("remote")'
   local changed content1_missing_content1_content4-tracked which remote deleted
-  use (c)hanged version, (d)elete, or leave (u)nresolved? c
+  use (c)hanged version, (d)elete, or leave (u)nresolved? u
   local changed content1_missing_content3_content3-tracked which remote deleted
-  use (c)hanged version, (d)elete, or leave (u)nresolved? c
+  use (c)hanged version, (d)elete, or leave (u)nresolved? u
   local changed content1_missing_content3_content4-tracked which remote deleted
-  use (c)hanged version, (d)elete, or leave (u)nresolved? c
+  use (c)hanged version, (d)elete, or leave (u)nresolved? u
   local changed content1_missing_missing_content4-tracked which remote deleted
-  use (c)hanged version, (d)elete, or leave (u)nresolved? c
+  use (c)hanged version, (d)elete, or leave (u)nresolved? u
   remote changed content1_content2_content1_content1-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content1_content2-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content1_content4-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content1_missing-tracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content1_missing-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content2_content1-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content2_content2-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content2_content4-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content2_missing-tracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content2_missing-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content3_content1-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content3_content2-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content3_content3-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content3_content4-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content3_missing-tracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content3_missing-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_missing_content1-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_missing_content2-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_missing_content4-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_missing_missing-tracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_missing_missing-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_content1_content4-tracked
   merging content1_content2_content2_content1-tracked
   merging content1_content2_content2_content4-tracked
@@ -215,7 +215,7 @@  Merge with remote
   warning: conflicts while merging missing_content2_content3_content4-tracked! (edit, then use 'hg resolve --mark')
   warning: conflicts while merging missing_content2_missing_content4-tracked! (edit, then use 'hg resolve --mark')
   warning: conflicts while merging missing_content2_missing_content4-untracked! (edit, then use 'hg resolve --mark')
-  18 files updated, 28 files merged, 8 files removed, 10 files unresolved
+  18 files updated, 3 files merged, 8 files removed, 35 files unresolved
   use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
   [1]
 
@@ -227,39 +227,39 @@  Interestingly, one untracked file got me
 odd 'if force and branchmerge and different' case in manifestmerge().
 
   $ hg resolve -l
-  R content1_content2_content1_content1-untracked
-  R content1_content2_content1_content2-untracked
+  U content1_content2_content1_content1-untracked
+  U content1_content2_content1_content2-untracked
   U content1_content2_content1_content4-tracked
-  R content1_content2_content1_content4-untracked
-  R content1_content2_content1_missing-tracked
-  R content1_content2_content1_missing-untracked
+  U content1_content2_content1_content4-untracked
+  U content1_content2_content1_missing-tracked
+  U content1_content2_content1_missing-untracked
   R content1_content2_content2_content1-tracked
-  R content1_content2_content2_content1-untracked
-  R content1_content2_content2_content2-untracked
+  U content1_content2_content2_content1-untracked
+  U content1_content2_content2_content2-untracked
   U content1_content2_content2_content4-tracked
-  R content1_content2_content2_content4-untracked
-  R content1_content2_content2_missing-tracked
-  R content1_content2_content2_missing-untracked
+  U content1_content2_content2_content4-untracked
+  U content1_content2_content2_missing-tracked
+  U content1_content2_content2_missing-untracked
   R content1_content2_content3_content1-tracked
-  R content1_content2_content3_content1-untracked
-  R content1_content2_content3_content2-untracked
+  U content1_content2_content3_content1-untracked
+  U content1_content2_content3_content2-untracked
   U content1_content2_content3_content3-tracked
-  R content1_content2_content3_content3-untracked
+  U content1_content2_content3_content3-untracked
   U content1_content2_content3_content4-tracked
-  R content1_content2_content3_content4-untracked
-  R content1_content2_content3_missing-tracked
-  R content1_content2_content3_missing-untracked
+  U content1_content2_content3_content4-untracked
+  U content1_content2_content3_missing-tracked
+  U content1_content2_content3_missing-untracked
   R content1_content2_missing_content1-tracked
-  R content1_content2_missing_content1-untracked
-  R content1_content2_missing_content2-untracked
+  U content1_content2_missing_content1-untracked
+  U content1_content2_missing_content2-untracked
   U content1_content2_missing_content4-tracked
-  R content1_content2_missing_content4-untracked
-  R content1_content2_missing_missing-tracked
-  R content1_content2_missing_missing-untracked
-  R content1_missing_content1_content4-tracked
-  R content1_missing_content3_content3-tracked
-  R content1_missing_content3_content4-tracked
-  R content1_missing_missing_content4-tracked
+  U content1_content2_missing_content4-untracked
+  U content1_content2_missing_missing-tracked
+  U content1_content2_missing_missing-untracked
+  U content1_missing_content1_content4-tracked
+  U content1_missing_content3_content3-tracked
+  U content1_missing_content3_content4-tracked
+  U content1_missing_missing_content4-tracked
   U missing_content2_content2_content4-tracked
   U missing_content2_content3_content3-tracked
   U missing_content2_content3_content4-tracked
@@ -705,63 +705,63 @@  Re-resolve and check status
   $ hg resolve --unmark --all
   $ hg resolve --all --tool internal:merge3
   remote changed content1_content2_content1_content1-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content1_content2-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_content1_content4-tracked
   remote changed content1_content2_content1_content4-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content1_missing-tracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content1_missing-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_content2_content1-tracked
   remote changed content1_content2_content2_content1-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content2_content2-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_content2_content4-tracked
   remote changed content1_content2_content2_content4-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content2_missing-tracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content2_missing-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_content3_content1-tracked
   remote changed content1_content2_content3_content1-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content3_content2-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_content3_content3-tracked
   remote changed content1_content2_content3_content3-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_content3_content4-tracked
   remote changed content1_content2_content3_content4-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content3_missing-tracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_content3_missing-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_missing_content1-tracked
   remote changed content1_content2_missing_content1-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_missing_content2-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_missing_content4-tracked
   remote changed content1_content2_missing_content4-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_missing_missing-tracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   remote changed content1_content2_missing_missing-untracked which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   local changed content1_missing_content1_content4-tracked which remote deleted
-  use (c)hanged version, (d)elete, or leave (u)nresolved? c
+  use (c)hanged version, (d)elete, or leave (u)nresolved? u
   local changed content1_missing_content3_content3-tracked which remote deleted
-  use (c)hanged version, (d)elete, or leave (u)nresolved? c
+  use (c)hanged version, (d)elete, or leave (u)nresolved? u
   local changed content1_missing_content3_content4-tracked which remote deleted
-  use (c)hanged version, (d)elete, or leave (u)nresolved? c
+  use (c)hanged version, (d)elete, or leave (u)nresolved? u
   local changed content1_missing_missing_content4-tracked which remote deleted
-  use (c)hanged version, (d)elete, or leave (u)nresolved? c
+  use (c)hanged version, (d)elete, or leave (u)nresolved? u
   merging missing_content2_content2_content4-tracked
   merging missing_content2_content3_content3-tracked
   merging missing_content2_content3_content4-tracked
diff --git a/tests/test-merge-remove.t b/tests/test-merge-remove.t
--- a/tests/test-merge-remove.t
+++ b/tests/test-merge-remove.t
@@ -103,10 +103,11 @@  Those who use force will lose
 
   $ hg merge -f
   remote changed bar which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging foo1 and foo to foo1
-  0 files updated, 2 files merged, 0 files removed, 0 files unresolved
-  (branch merge, don't forget to commit)
+  0 files updated, 1 files merged, 0 files removed, 1 files unresolved
+  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
+  [1]
   $ cat bar
   bleh
   $ hg st
diff --git a/tests/test-rename-merge2.t b/tests/test-rename-merge2.t
--- a/tests/test-rename-merge2.t
+++ b/tests/test-rename-merge2.t
@@ -684,7 +684,7 @@  m "um a c" "um x c" "      " "10 do merg
    a: prompt deleted/changed -> m (premerge)
   picked tool ':prompt' for a (binary False symlink False changedelete True)
   remote changed a which local deleted
-  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
+  use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
    b: both created -> m (premerge)
   picked tool 'python ../merge' for b (binary False symlink False changedelete False)
   merging b
@@ -703,11 +703,12 @@  m "um a c" "um x c" "      " "10 do merg
   my rev@02963e448370+ other rev@8dbce441892a ancestor rev@924404dff337
   launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob)
   merge tool returned: 0
-  0 files updated, 3 files merged, 0 files removed, 0 files unresolved
-  (branch merge, don't forget to commit)
+  0 files updated, 2 files merged, 0 files removed, 1 files unresolved
+  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
   --------------
   M a
   M b
+  abort: unresolved merge conflicts (see "hg help resolve")
   --------------
   
   $ tm "up a b" "nm a b" "      " "19 merge b no ancestor, prompt remove a"
@@ -727,7 +728,7 @@  m "um a c" "um x c" "      " "10 do merg
    a: prompt changed/deleted -> m (premerge)
   picked tool ':prompt' for a (binary False symlink False changedelete True)
   local changed a which remote deleted
-  use (c)hanged version, (d)elete, or leave (u)nresolved? c
+  use (c)hanged version, (d)elete, or leave (u)nresolved? u
    b: both created -> m (premerge)
   picked tool 'python ../merge' for b (binary False symlink False changedelete False)
   merging b
@@ -746,11 +747,12 @@  m "um a c" "um x c" "      " "10 do merg
   my rev@0b76e65c8289+ other rev@bdb19105162a ancestor rev@924404dff337
   launching merge tool: python ../merge *$TESTTMP/t/t/rev* * * (glob)
   merge tool returned: 0
-  0 files updated, 3 files merged, 0 files removed, 0 files unresolved
-  (branch merge, don't forget to commit)
+  0 files updated, 2 files merged, 0 files removed, 1 files unresolved
+  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
   --------------
   M b
   C a
+  abort: unresolved merge conflicts (see "hg help resolve")
   --------------
   
   $ tm "up a  " "um a b" "      " "20 merge a and b to b, remove a"