changeset 30062:940c05b25b07

merge: add conflict labels to merge command Now that we present the conflict labels in prompts, it's useful to have better names than "local" and "other" for every command.
author Simon Farnsworth <simonfar@fb.com>
date Fri, 07 Oct 2016 08:51:50 -0700
parents 8e805cf27caa
children 81d38478fced
files mercurial/commands.py mercurial/hg.py tests/test-commit-amend.t tests/test-conflict.t tests/test-keyword.t tests/test-merge-changedelete.t tests/test-merge-force.t tests/test-merge-remove.t tests/test-merge-tools.t tests/test-merge-types.t tests/test-merge7.t tests/test-rename-dir-merge.t tests/test-rename-merge2.t tests/test-resolve.t tests/test-subrepo-git.t tests/test-subrepo.t
diffstat 16 files changed, 236 insertions(+), 197 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py	Wed Oct 05 15:28:34 2016 +0200
+++ b/mercurial/commands.py	Fri Oct 07 08:51:50 2016 -0700
@@ -5532,7 +5532,9 @@
         # ui.forcemerge is an internal variable, do not document
         repo.ui.setconfig('ui', 'forcemerge', opts.get('tool', ''), 'merge')
         force = opts.get('force')
-        return hg.merge(repo, node, force=force, mergeforce=force)
+        labels = ['working copy', 'merge rev']
+        return hg.merge(repo, node, force=force, mergeforce=force,
+                        labels=labels)
     finally:
         ui.setconfig('ui', 'forcemerge', '', 'merge')
 
--- a/mercurial/hg.py	Wed Oct 05 15:28:34 2016 +0200
+++ b/mercurial/hg.py	Fri Oct 07 08:51:50 2016 -0700
@@ -768,10 +768,11 @@
 
     return ret
 
-def merge(repo, node, force=None, remind=True, mergeforce=False):
+def merge(repo, node, force=None, remind=True, mergeforce=False, labels=None):
     """Branch merge with node, resolving changes. Return true if any
     unresolved conflicts."""
-    stats = mergemod.update(repo, node, True, force, mergeforce=mergeforce)
+    stats = mergemod.update(repo, node, True, force, mergeforce=mergeforce,
+                            labels=labels)
     _showstats(repo, stats)
     if stats[3]:
         repo.ui.status(_("use 'hg resolve' to retry unresolved file merges "
--- a/tests/test-commit-amend.t	Wed Oct 05 15:28:34 2016 +0200
+++ b/tests/test-commit-amend.t	Fri Oct 07 08:51:50 2016 -0700
@@ -638,7 +638,7 @@
   (no more unresolved files)
   $ hg ci -m 'merge bar'
   $ hg log --config diff.git=1 -pr .
-  changeset:   23:93cd4445f720
+  changeset:   23:69c24fe01e35
   tag:         tip
   parent:      22:30d96aeaf27b
   parent:      21:1aa437659d19
@@ -653,11 +653,11 @@
   --- a/cc
   +++ b/cc
   @@ -1,1 +1,5 @@
-  +<<<<<<< local: 30d96aeaf27b - test: aa
+  +<<<<<<< working copy: 30d96aeaf27b - test: aa
    dd
   +=======
   +cc
-  +>>>>>>> other: 1aa437659d19  bar - test: aazzcc
+  +>>>>>>> merge rev:    1aa437659d19  bar - test: aazzcc
   diff --git a/z b/zz
   rename from z
   rename to zz
@@ -671,7 +671,7 @@
   $ HGEDITOR="sh .hg/checkeditform.sh" hg ci --amend -m 'merge bar (amend message)' --edit
   HGEDITFORM=commit.amend.merge
   $ hg log --config diff.git=1 -pr .
-  changeset:   24:832b50f2c271
+  changeset:   24:cfa2fbef3169
   tag:         tip
   parent:      22:30d96aeaf27b
   parent:      21:1aa437659d19
@@ -686,11 +686,11 @@
   --- a/cc
   +++ b/cc
   @@ -1,1 +1,5 @@
-  +<<<<<<< local: 30d96aeaf27b - test: aa
+  +<<<<<<< working copy: 30d96aeaf27b - test: aa
    dd
   +=======
   +cc
-  +>>>>>>> other: 1aa437659d19  bar - test: aazzcc
+  +>>>>>>> merge rev:    1aa437659d19  bar - test: aazzcc
   diff --git a/z b/zz
   rename from z
   rename to zz
@@ -704,7 +704,7 @@
   $ hg mv zz z
   $ hg ci --amend -m 'merge bar (undo rename)'
   $ hg log --config diff.git=1 -pr .
-  changeset:   26:bdafc5c72f74
+  changeset:   26:c34de68b014c
   tag:         tip
   parent:      22:30d96aeaf27b
   parent:      21:1aa437659d19
@@ -719,11 +719,11 @@
   --- a/cc
   +++ b/cc
   @@ -1,1 +1,5 @@
-  +<<<<<<< local: 30d96aeaf27b - test: aa
+  +<<<<<<< working copy: 30d96aeaf27b - test: aa
    dd
   +=======
   +cc
-  +>>>>>>> other: 1aa437659d19  bar - test: aazzcc
+  +>>>>>>> merge rev:    1aa437659d19  bar - test: aazzcc
   
   $ hg debugrename z
   z not renamed
@@ -740,9 +740,9 @@
   $ echo aa >> aaa
   $ hg ci -m 'merge bar again'
   $ hg log --config diff.git=1 -pr .
-  changeset:   28:32f19415b634
+  changeset:   28:37d40dcef03b
   tag:         tip
-  parent:      26:bdafc5c72f74
+  parent:      26:c34de68b014c
   parent:      27:4c94d5bc65f5
   user:        test
   date:        Thu Jan 01 00:00:00 1970 +0000
@@ -775,9 +775,9 @@
   $ hg mv aaa aa
   $ hg ci --amend -m 'merge bar again (undo rename)'
   $ hg log --config diff.git=1 -pr .
-  changeset:   30:1e2a06b3d312
+  changeset:   30:537c6d1b3633
   tag:         tip
-  parent:      26:bdafc5c72f74
+  parent:      26:c34de68b014c
   parent:      27:4c94d5bc65f5
   user:        test
   date:        Thu Jan 01 00:00:00 1970 +0000
@@ -813,13 +813,13 @@
   $ hg merge -q bar --config ui.interactive=True << EOF
   > c
   > EOF
-  local changed aa which other deleted
+  local [working copy] changed aa which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? c
   $ hg ci -m 'merge bar (with conflicts)'
   $ hg log --config diff.git=1 -pr .
-  changeset:   33:97a298b0c59f
+  changeset:   33:7afcba911942
   tag:         tip
-  parent:      32:3d78ce4226b8
+  parent:      32:6075d69d215d
   parent:      31:67db8847a540
   user:        test
   date:        Thu Jan 01 00:00:00 1970 +0000
@@ -829,9 +829,9 @@
   $ hg rm aa
   $ hg ci --amend -m 'merge bar (with conflicts, amended)'
   $ hg log --config diff.git=1 -pr .
-  changeset:   35:6de0c1bde1c8
+  changeset:   35:376965e47ddd
   tag:         tip
-  parent:      32:3d78ce4226b8
+  parent:      32:6075d69d215d
   parent:      31:67db8847a540
   user:        test
   date:        Thu Jan 01 00:00:00 1970 +0000
@@ -927,7 +927,7 @@
   HG: M: 
   HG: A: foo
   HG: R: 
-  HG: diff -r 6de0c1bde1c8 foo
+  HG: diff -r 376965e47ddd foo
   HG: --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   HG: +++ b/foo	Thu Jan 01 00:00:00 1970 +0000
   HG: @@ -0,0 +1,1 @@
@@ -941,12 +941,12 @@
   HG: M: 
   HG: A: foo y
   HG: R: 
-  HG: diff -r 6de0c1bde1c8 foo
+  HG: diff -r 376965e47ddd foo
   HG: --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   HG: +++ b/foo	Thu Jan 01 00:00:00 1970 +0000
   HG: @@ -0,0 +1,1 @@
   HG: +foo
-  HG: diff -r 6de0c1bde1c8 y
+  HG: diff -r 376965e47ddd y
   HG: --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   HG: +++ b/y	Thu Jan 01 00:00:00 1970 +0000
   HG: @@ -0,0 +1,1 @@
@@ -959,18 +959,18 @@
   HG: M: 
   HG: A: foo y
   HG: R: a
-  HG: diff -r 6de0c1bde1c8 a
+  HG: diff -r 376965e47ddd a
   HG: --- a/a	Thu Jan 01 00:00:00 1970 +0000
   HG: +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   HG: @@ -1,2 +0,0 @@
   HG: -a
   HG: -a
-  HG: diff -r 6de0c1bde1c8 foo
+  HG: diff -r 376965e47ddd foo
   HG: --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   HG: +++ b/foo	Thu Jan 01 00:00:00 1970 +0000
   HG: @@ -0,0 +1,1 @@
   HG: +foo
-  HG: diff -r 6de0c1bde1c8 y
+  HG: diff -r 376965e47ddd y
   HG: --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   HG: +++ b/y	Thu Jan 01 00:00:00 1970 +0000
   HG: @@ -0,0 +1,1 @@
@@ -983,23 +983,23 @@
   HG: M: 
   HG: A: foo y
   HG: R: a x
-  HG: diff -r 6de0c1bde1c8 a
+  HG: diff -r 376965e47ddd a
   HG: --- a/a	Thu Jan 01 00:00:00 1970 +0000
   HG: +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   HG: @@ -1,2 +0,0 @@
   HG: -a
   HG: -a
-  HG: diff -r 6de0c1bde1c8 foo
+  HG: diff -r 376965e47ddd foo
   HG: --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   HG: +++ b/foo	Thu Jan 01 00:00:00 1970 +0000
   HG: @@ -0,0 +1,1 @@
   HG: +foo
-  HG: diff -r 6de0c1bde1c8 x
+  HG: diff -r 376965e47ddd x
   HG: --- a/x	Thu Jan 01 00:00:00 1970 +0000
   HG: +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   HG: @@ -1,1 +0,0 @@
   HG: -x
-  HG: diff -r 6de0c1bde1c8 y
+  HG: diff -r 376965e47ddd y
   HG: --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   HG: +++ b/y	Thu Jan 01 00:00:00 1970 +0000
   HG: @@ -0,0 +1,1 @@
@@ -1014,23 +1014,23 @@
   HG: M: 
   HG: A: foo y
   HG: R: a x
-  HG: diff -r 6de0c1bde1c8 a
+  HG: diff -r 376965e47ddd a
   HG: --- a/a	Thu Jan 01 00:00:00 1970 +0000
   HG: +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   HG: @@ -1,2 +0,0 @@
   HG: -a
   HG: -a
-  HG: diff -r 6de0c1bde1c8 foo
+  HG: diff -r 376965e47ddd foo
   HG: --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   HG: +++ b/foo	Thu Jan 01 00:00:00 1970 +0000
   HG: @@ -0,0 +1,1 @@
   HG: +foo
-  HG: diff -r 6de0c1bde1c8 x
+  HG: diff -r 376965e47ddd x
   HG: --- a/x	Thu Jan 01 00:00:00 1970 +0000
   HG: +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
   HG: @@ -1,1 +0,0 @@
   HG: -x
-  HG: diff -r 6de0c1bde1c8 y
+  HG: diff -r 376965e47ddd y
   HG: --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   HG: +++ b/y	Thu Jan 01 00:00:00 1970 +0000
   HG: @@ -0,0 +1,1 @@
--- a/tests/test-conflict.t	Wed Oct 05 15:28:34 2016 +0200
+++ b/tests/test-conflict.t	Fri Oct 07 08:51:50 2016 -0700
@@ -49,13 +49,13 @@
   1
   2
   3
-  <<<<<<< local: 618808747361 - test: branch2
+  <<<<<<< working copy: 618808747361 - test: branch2
   6
   8
   =======
   4
   5
-  >>>>>>> other: c0c68e4fe667  - test: branch1
+  >>>>>>> merge rev:    c0c68e4fe667  - test: branch1
   Hop we are done.
 
   $ hg status
@@ -79,13 +79,13 @@
   1
   2
   3
-  <<<<<<< local: test 2
+  <<<<<<< working copy: test 2
   6
   8
   =======
   4
   5
-  >>>>>>> other: test 1
+  >>>>>>> merge rev:    test 1
   Hop we are done.
 
 Verify line splitting of custom conflict marker which causes multiple lines
@@ -105,13 +105,13 @@
   1
   2
   3
-  <<<<<<< local: test 2
+  <<<<<<< working copy: test 2
   6
   8
   =======
   4
   5
-  >>>>>>> other: test 1
+  >>>>>>> merge rev:    test 1
   Hop we are done.
 
 Verify line trimming of custom conflict marker using multi-byte characters
@@ -144,13 +144,13 @@
   1
   2
   3
-  <<<<<<< local: 123456789012345678901234567890123456789012345678901234567890\xe3\x81\x82... (esc)
+  <<<<<<< working copy: 1234567890123456789012345678901234567890123456789012345...
   6
   8
   =======
   4
   5
-  >>>>>>> other: branch1
+  >>>>>>> merge rev:    branch1
   Hop we are done.
 
 Verify basic conflict markers
@@ -170,13 +170,13 @@
   1
   2
   3
-  <<<<<<< local
+  <<<<<<< working copy
   6
   8
   =======
   4
   5
-  >>>>>>> other
+  >>>>>>> merge rev
   Hop we are done.
 
 internal:merge3
@@ -191,7 +191,7 @@
   [1]
   $ cat a
   Small Mathematical Series.
-  <<<<<<< local
+  <<<<<<< working copy
   1
   2
   3
@@ -209,7 +209,7 @@
   3
   4
   5
-  >>>>>>> other
+  >>>>>>> merge rev
   Hop we are done.
 
 Add some unconflicting changes on each head, to make sure we really
--- a/tests/test-keyword.t	Wed Oct 05 15:28:34 2016 +0200
+++ b/tests/test-keyword.t	Fri Oct 07 08:51:50 2016 -0700
@@ -1113,11 +1113,11 @@
   [1]
   $ cat m
   $Id$
-  <<<<<<< local: 88a80c8d172e - test: 8bar
+  <<<<<<< working copy: 88a80c8d172e - test: 8bar
   bar
   =======
   foo
-  >>>>>>> other: 85d2d2d732a5  - test: simplemerge
+  >>>>>>> merge rev:    85d2d2d732a5  - test: simplemerge
 
 resolve to local, m must contain hash of last change (local parent)
 
--- a/tests/test-merge-changedelete.t	Wed Oct 05 15:28:34 2016 +0200
+++ b/tests/test-merge-changedelete.t	Fri Oct 07 08:51:50 2016 -0700
@@ -54,9 +54,9 @@
 Non-interactive merge:
 
   $ hg merge -y
-  local changed file1 which other deleted
+  local [working copy] changed file1 which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? u
-  other changed file2 which local deleted
+  other [merge rev] changed file2 which local [working copy] deleted
   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')
@@ -77,6 +77,9 @@
   * version 2 records
   local: 13910f48cf7bdb2a0ba6e24b4900e4fdd5739dd4
   other: 10f9a0a634e82080907e62f075ab119cbc565ea6
+  labels:
+    local: working copy
+    other: merge rev
   file extras: file1 (ancestorlinknode = ab57bf49aa276a22d35a473592d4c34b5abc3eff)
   file: file1 (record type "C", state "u", hash 60b27f004e454aca81b0480209cce5081ec52390)
     local path: file1 (flags "")
@@ -100,11 +103,11 @@
   changed
   --- file3 ---
   3
-  <<<<<<< local: 13910f48cf7b - test: changed file1, removed file2, changed file3
+  <<<<<<< working copy: 13910f48cf7b - test: changed file1, removed file2, chan...
   changed2
   =======
   changed1
-  >>>>>>> other: 10f9a0a634e8  - test: removed file1, changed file2, changed file3
+  >>>>>>> merge rev:    10f9a0a634e8  - test: removed file1, changed file2, cha...
 
 
 Interactive merge:
@@ -117,9 +120,9 @@
   > c
   > d
   > EOF
-  local changed file1 which other deleted
+  local [working copy] changed file1 which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? c
-  other changed file2 which local deleted
+  other [merge rev] changed file2 which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? d
   merging file3
   warning: conflicts while merging file3! (edit, then use 'hg resolve --mark')
@@ -140,6 +143,9 @@
   * version 2 records
   local: 13910f48cf7bdb2a0ba6e24b4900e4fdd5739dd4
   other: 10f9a0a634e82080907e62f075ab119cbc565ea6
+  labels:
+    local: working copy
+    other: merge rev
   file extras: file1 (ancestorlinknode = ab57bf49aa276a22d35a473592d4c34b5abc3eff)
   file: file1 (record type "C", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
     local path: file1 (flags "")
@@ -161,11 +167,11 @@
   *** file2 does not exist
   --- file3 ---
   3
-  <<<<<<< local: 13910f48cf7b - test: changed file1, removed file2, changed file3
+  <<<<<<< working copy: 13910f48cf7b - test: changed file1, removed file2, chan...
   changed2
   =======
   changed1
-  >>>>>>> other: 10f9a0a634e8  - test: removed file1, changed file2, changed file3
+  >>>>>>> merge rev:    10f9a0a634e8  - test: removed file1, changed file2, cha...
 
 
 Interactive merge with bad input:
@@ -181,18 +187,18 @@
   > baz
   > c
   > EOF
-  local changed file1 which other deleted
+  local [working copy] changed file1 which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? foo
   unrecognized response
-  local changed file1 which other deleted
+  local [working copy] changed file1 which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? bar
   unrecognized response
-  local changed file1 which other deleted
+  local [working copy] changed file1 which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? d
-  other changed file2 which local deleted
+  other [merge rev] changed file2 which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? baz
   unrecognized response
-  other changed file2 which local deleted
+  other [merge rev] changed file2 which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? c
   merging file3
   warning: conflicts while merging file3! (edit, then use 'hg resolve --mark')
@@ -213,6 +219,9 @@
   * version 2 records
   local: 13910f48cf7bdb2a0ba6e24b4900e4fdd5739dd4
   other: 10f9a0a634e82080907e62f075ab119cbc565ea6
+  labels:
+    local: working copy
+    other: merge rev
   file extras: file1 (ancestorlinknode = ab57bf49aa276a22d35a473592d4c34b5abc3eff)
   file: file1 (record type "C", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
     local path: file1 (flags "")
@@ -234,11 +243,11 @@
   changed
   --- file3 ---
   3
-  <<<<<<< local: 13910f48cf7b - test: changed file1, removed file2, changed file3
+  <<<<<<< working copy: 13910f48cf7b - test: changed file1, removed file2, chan...
   changed2
   =======
   changed1
-  >>>>>>> other: 10f9a0a634e8  - test: removed file1, changed file2, changed file3
+  >>>>>>> merge rev:    10f9a0a634e8  - test: removed file1, changed file2, cha...
 
 
 Interactive merge with not enough input:
@@ -250,9 +259,9 @@
   $ hg merge --config ui.interactive=true <<EOF
   > d
   > EOF
-  local changed file1 which other deleted
+  local [working copy] changed file1 which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? d
-  other changed file2 which local deleted
+  other [merge rev] changed file2 which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? 
   merging file3
   warning: conflicts while merging file3! (edit, then use 'hg resolve --mark')
@@ -273,6 +282,9 @@
   * version 2 records
   local: 13910f48cf7bdb2a0ba6e24b4900e4fdd5739dd4
   other: 10f9a0a634e82080907e62f075ab119cbc565ea6
+  labels:
+    local: working copy
+    other: merge rev
   file extras: file1 (ancestorlinknode = ab57bf49aa276a22d35a473592d4c34b5abc3eff)
   file: file1 (record type "C", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
     local path: file1 (flags "")
@@ -294,11 +306,11 @@
   changed
   --- file3 ---
   3
-  <<<<<<< local: 13910f48cf7b - test: changed file1, removed file2, changed file3
+  <<<<<<< working copy: 13910f48cf7b - test: changed file1, removed file2, chan...
   changed2
   =======
   changed1
-  >>>>>>> other: 10f9a0a634e8  - test: removed file1, changed file2, changed file3
+  >>>>>>> merge rev:    10f9a0a634e8  - test: removed file1, changed file2, cha...
 
 Choose local versions of files
 
@@ -322,6 +334,9 @@
   * version 2 records
   local: 13910f48cf7bdb2a0ba6e24b4900e4fdd5739dd4
   other: 10f9a0a634e82080907e62f075ab119cbc565ea6
+  labels:
+    local: working copy
+    other: merge rev
   file extras: file1 (ancestorlinknode = ab57bf49aa276a22d35a473592d4c34b5abc3eff)
   file: file1 (record type "C", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
     local path: file1 (flags "")
@@ -367,6 +382,9 @@
   * version 2 records
   local: 13910f48cf7bdb2a0ba6e24b4900e4fdd5739dd4
   other: 10f9a0a634e82080907e62f075ab119cbc565ea6
+  labels:
+    local: working copy
+    other: merge rev
   file extras: file1 (ancestorlinknode = ab57bf49aa276a22d35a473592d4c34b5abc3eff)
   file: file1 (record type "C", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
     local path: file1 (flags "")
@@ -413,6 +431,9 @@
   * version 2 records
   local: 13910f48cf7bdb2a0ba6e24b4900e4fdd5739dd4
   other: 10f9a0a634e82080907e62f075ab119cbc565ea6
+  labels:
+    local: working copy
+    other: merge rev
   file extras: file1 (ancestorlinknode = ab57bf49aa276a22d35a473592d4c34b5abc3eff)
   file: file1 (record type "C", state "u", hash 60b27f004e454aca81b0480209cce5081ec52390)
     local path: file1 (flags "")
@@ -445,12 +466,12 @@
   1 other heads for branch "default"
 
   $ hg merge --config ui.interactive=True --tool :prompt
-  local changed file1 which other deleted
+  local [working copy] changed file1 which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? 
-  other changed file2 which local deleted
+  other [merge rev] changed file2 which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? 
   no tool found to merge file3
-  keep (l)ocal, take (o)ther, or leave (u)nresolved? 
+  keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved? 
   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]
@@ -467,6 +488,9 @@
   * version 2 records
   local: 13910f48cf7bdb2a0ba6e24b4900e4fdd5739dd4
   other: 10f9a0a634e82080907e62f075ab119cbc565ea6
+  labels:
+    local: working copy
+    other: merge rev
   file extras: file1 (ancestorlinknode = ab57bf49aa276a22d35a473592d4c34b5abc3eff)
   file: file1 (record type "C", state "u", hash 60b27f004e454aca81b0480209cce5081ec52390)
     local path: file1 (flags "")
@@ -501,12 +525,12 @@
   1 other heads for branch "default"
 
   $ hg merge --tool :prompt
-  local changed file1 which other deleted
+  local [working copy] changed file1 which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? u
-  other changed file2 which local deleted
+  other [merge rev] changed file2 which local [working copy] deleted
   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
+  keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved? u
   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]
@@ -523,6 +547,9 @@
   * version 2 records
   local: 13910f48cf7bdb2a0ba6e24b4900e4fdd5739dd4
   other: 10f9a0a634e82080907e62f075ab119cbc565ea6
+  labels:
+    local: working copy
+    other: merge rev
   file extras: file1 (ancestorlinknode = ab57bf49aa276a22d35a473592d4c34b5abc3eff)
   file: file1 (record type "C", state "u", hash 60b27f004e454aca81b0480209cce5081ec52390)
     local path: file1 (flags "")
@@ -555,9 +582,9 @@
   1 other heads for branch "default"
 
   $ hg merge --tool :merge3
-  local changed file1 which other deleted
+  local [working copy] changed file1 which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? u
-  other changed file2 which local deleted
+  other [merge rev] changed file2 which local [working copy] deleted
   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')
@@ -577,6 +604,9 @@
   * version 2 records
   local: 13910f48cf7bdb2a0ba6e24b4900e4fdd5739dd4
   other: 10f9a0a634e82080907e62f075ab119cbc565ea6
+  labels:
+    local: working copy
+    other: merge rev
   file extras: file1 (ancestorlinknode = ab57bf49aa276a22d35a473592d4c34b5abc3eff)
   file: file1 (record type "C", state "u", hash 60b27f004e454aca81b0480209cce5081ec52390)
     local path: file1 (flags "")
@@ -600,12 +630,12 @@
   changed
   --- file3 ---
   3
-  <<<<<<< local: 13910f48cf7b - test: changed file1, removed file2, changed file3
+  <<<<<<< working copy: 13910f48cf7b - test: changed file1, removed file2, chan...
   changed2
   ||||||| base
   =======
   changed1
-  >>>>>>> other: 10f9a0a634e8  - test: removed file1, changed file2, changed file3
+  >>>>>>> merge rev:    10f9a0a634e8  - test: removed file1, changed file2, cha...
 
 Exercise transitions between local, other, fail and prompt, and make sure the
 dirstate stays consistent. (Compare with each other and to the above
@@ -642,12 +672,12 @@
   (status identical)
   
   === :other -> :prompt ===
-  local changed file1 which other deleted
+  local [working copy] changed file1 which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? 
-  other changed file2 which local deleted
+  other [merge rev] changed file2 which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? 
   no tool found to merge file3
-  keep (l)ocal, take (o)ther, or leave (u)nresolved? 
+  keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved? 
   --- diff of status ---
   (status identical)
   
@@ -671,12 +701,12 @@
   (status identical)
   
   === :local -> :prompt ===
-  local changed file1 which other deleted
+  local [working copy] changed file1 which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? 
-  other changed file2 which local deleted
+  other [merge rev] changed file2 which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? 
   no tool found to merge file3
-  keep (l)ocal, take (o)ther, or leave (u)nresolved? 
+  keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved? 
   --- diff of status ---
   (status identical)
   
@@ -690,12 +720,12 @@
   (status identical)
   
   === :fail -> :prompt ===
-  local changed file1 which other deleted
+  local [working copy] changed file1 which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? 
-  other changed file2 which local deleted
+  other [merge rev] changed file2 which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? 
   no tool found to merge file3
-  keep (l)ocal, take (o)ther, or leave (u)nresolved? 
+  keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved? 
   --- diff of status ---
   (status identical)
   
--- a/tests/test-merge-force.t	Wed Oct 05 15:28:34 2016 +0200
+++ b/tests/test-merge-force.t	Fri Oct 07 08:51:50 2016 -0700
@@ -142,55 +142,55 @@
 #   in the same way, so it could potentially be left alone
 
   $ hg merge -f --tool internal:merge3 'desc("remote")' 2>&1 | tee $TESTTMP/merge-output-1
-  local changed content1_missing_content1_content4-tracked which other deleted
+  local [working copy] changed content1_missing_content1_content4-tracked which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? u
-  local changed content1_missing_content3_content3-tracked which other deleted
+  local [working copy] changed content1_missing_content3_content3-tracked which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? u
-  local changed content1_missing_content3_content4-tracked which other deleted
+  local [working copy] changed content1_missing_content3_content4-tracked which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? u
-  local changed content1_missing_missing_content4-tracked which other deleted
+  local [working copy] changed content1_missing_missing_content4-tracked which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? u
-  other changed content1_content2_content1_content1-untracked which local deleted
+  other [merge rev] changed content1_content2_content1_content1-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content1_content2-untracked which local deleted
+  other [merge rev] changed content1_content2_content1_content2-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content1_content4-untracked which local deleted
+  other [merge rev] changed content1_content2_content1_content4-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content1_missing-tracked which local deleted
+  other [merge rev] changed content1_content2_content1_missing-tracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content1_missing-untracked which local deleted
+  other [merge rev] changed content1_content2_content1_missing-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content2_content1-untracked which local deleted
+  other [merge rev] changed content1_content2_content2_content1-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content2_content2-untracked which local deleted
+  other [merge rev] changed content1_content2_content2_content2-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content2_content4-untracked which local deleted
+  other [merge rev] changed content1_content2_content2_content4-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content2_missing-tracked which local deleted
+  other [merge rev] changed content1_content2_content2_missing-tracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content2_missing-untracked which local deleted
+  other [merge rev] changed content1_content2_content2_missing-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content3_content1-untracked which local deleted
+  other [merge rev] changed content1_content2_content3_content1-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content3_content2-untracked which local deleted
+  other [merge rev] changed content1_content2_content3_content2-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content3_content3-untracked which local deleted
+  other [merge rev] changed content1_content2_content3_content3-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content3_content4-untracked which local deleted
+  other [merge rev] changed content1_content2_content3_content4-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content3_missing-tracked which local deleted
+  other [merge rev] changed content1_content2_content3_missing-tracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content3_missing-untracked which local deleted
+  other [merge rev] changed content1_content2_content3_missing-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_missing_content1-untracked which local deleted
+  other [merge rev] changed content1_content2_missing_content1-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_missing_content2-untracked which local deleted
+  other [merge rev] changed content1_content2_missing_content2-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_missing_content4-untracked which local deleted
+  other [merge rev] changed content1_content2_missing_content4-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_missing_missing-tracked which local deleted
+  other [merge rev] changed content1_content2_missing_missing-tracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_missing_missing-untracked which local deleted
+  other [merge rev] changed content1_content2_missing_missing-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_content1_content4-tracked
   merging content1_content2_content2_content1-tracked
@@ -373,13 +373,13 @@
   content2
   
   M content1_content2_content1_content4-tracked
-  <<<<<<< local: 0447570f1af6 - test: local
+  <<<<<<< working copy: 0447570f1af6 - test: local
   content4
   ||||||| base
   content1
   =======
   content2
-  >>>>>>> other: 85100b8c675b  - test: remote
+  >>>>>>> merge rev:    85100b8c675b  - test: remote
   
   M content1_content2_content1_content4-untracked
   content2
@@ -403,13 +403,13 @@
   content2
   
   M content1_content2_content2_content4-tracked
-  <<<<<<< local: 0447570f1af6 - test: local
+  <<<<<<< working copy: 0447570f1af6 - test: local
   content4
   ||||||| base
   content1
   =======
   content2
-  >>>>>>> other: 85100b8c675b  - test: remote
+  >>>>>>> merge rev:    85100b8c675b  - test: remote
   
   M content1_content2_content2_content4-untracked
   content2
@@ -433,25 +433,25 @@
   content2
   
   M content1_content2_content3_content3-tracked
-  <<<<<<< local: 0447570f1af6 - test: local
+  <<<<<<< working copy: 0447570f1af6 - test: local
   content3
   ||||||| base
   content1
   =======
   content2
-  >>>>>>> other: 85100b8c675b  - test: remote
+  >>>>>>> merge rev:    85100b8c675b  - test: remote
   
   M content1_content2_content3_content3-untracked
   content2
   
   M content1_content2_content3_content4-tracked
-  <<<<<<< local: 0447570f1af6 - test: local
+  <<<<<<< working copy: 0447570f1af6 - test: local
   content4
   ||||||| base
   content1
   =======
   content2
-  >>>>>>> other: 85100b8c675b  - test: remote
+  >>>>>>> merge rev:    85100b8c675b  - test: remote
   
   M content1_content2_content3_content4-untracked
   content2
@@ -475,13 +475,13 @@
   content2
   
   M content1_content2_missing_content4-tracked
-  <<<<<<< local: 0447570f1af6 - test: local
+  <<<<<<< working copy: 0447570f1af6 - test: local
   content4
   ||||||| base
   content1
   =======
   content2
-  >>>>>>> other: 85100b8c675b  - test: remote
+  >>>>>>> merge rev:    85100b8c675b  - test: remote
   
   M content1_content2_missing_content4-untracked
   content2
@@ -559,12 +559,12 @@
   content2
   
   M missing_content2_content2_content4-tracked
-  <<<<<<< local: 0447570f1af6 - test: local
+  <<<<<<< working copy: 0447570f1af6 - test: local
   content4
   ||||||| base
   =======
   content2
-  >>>>>>> other: 85100b8c675b  - test: remote
+  >>>>>>> merge rev:    85100b8c675b  - test: remote
   
   M missing_content2_content2_content4-untracked
   content2
@@ -582,23 +582,23 @@
   content2
   
   M missing_content2_content3_content3-tracked
-  <<<<<<< local: 0447570f1af6 - test: local
+  <<<<<<< working copy: 0447570f1af6 - test: local
   content3
   ||||||| base
   =======
   content2
-  >>>>>>> other: 85100b8c675b  - test: remote
+  >>>>>>> merge rev:    85100b8c675b  - test: remote
   
   M missing_content2_content3_content3-untracked
   content2
   
   M missing_content2_content3_content4-tracked
-  <<<<<<< local: 0447570f1af6 - test: local
+  <<<<<<< working copy: 0447570f1af6 - test: local
   content4
   ||||||| base
   =======
   content2
-  >>>>>>> other: 85100b8c675b  - test: remote
+  >>>>>>> merge rev:    85100b8c675b  - test: remote
   
   M missing_content2_content3_content4-untracked
   content2
@@ -616,20 +616,20 @@
   content2
   
   M missing_content2_missing_content4-tracked
-  <<<<<<< local: 0447570f1af6 - test: local
+  <<<<<<< working copy: 0447570f1af6 - test: local
   content4
   ||||||| base
   =======
   content2
-  >>>>>>> other: 85100b8c675b  - test: remote
+  >>>>>>> merge rev:    85100b8c675b  - test: remote
   
   M missing_content2_missing_content4-untracked
-  <<<<<<< local: 0447570f1af6 - test: local
+  <<<<<<< working copy: 0447570f1af6 - test: local
   content4
   ||||||| base
   =======
   content2
-  >>>>>>> other: 85100b8c675b  - test: remote
+  >>>>>>> merge rev:    85100b8c675b  - test: remote
   
   M missing_content2_missing_missing-tracked
   content2
@@ -703,63 +703,63 @@
   (no more unresolved files)
   $ hg resolve --unmark --all
   $ hg resolve --all --tool internal:merge3
-  other changed content1_content2_content1_content1-untracked which local deleted
+  other [merge rev] changed content1_content2_content1_content1-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content1_content2-untracked which local deleted
+  other [merge rev] changed content1_content2_content1_content2-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_content1_content4-tracked
-  other changed content1_content2_content1_content4-untracked which local deleted
+  other [merge rev] changed content1_content2_content1_content4-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content1_missing-tracked which local deleted
+  other [merge rev] changed content1_content2_content1_missing-tracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content1_missing-untracked which local deleted
+  other [merge rev] changed content1_content2_content1_missing-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_content2_content1-tracked
-  other changed content1_content2_content2_content1-untracked which local deleted
+  other [merge rev] changed content1_content2_content2_content1-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content2_content2-untracked which local deleted
+  other [merge rev] changed content1_content2_content2_content2-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_content2_content4-tracked
-  other changed content1_content2_content2_content4-untracked which local deleted
+  other [merge rev] changed content1_content2_content2_content4-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content2_missing-tracked which local deleted
+  other [merge rev] changed content1_content2_content2_missing-tracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content2_missing-untracked which local deleted
+  other [merge rev] changed content1_content2_content2_missing-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_content3_content1-tracked
-  other changed content1_content2_content3_content1-untracked which local deleted
+  other [merge rev] changed content1_content2_content3_content1-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content3_content2-untracked which local deleted
+  other [merge rev] changed content1_content2_content3_content2-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_content3_content3-tracked
-  other changed content1_content2_content3_content3-untracked which local deleted
+  other [merge rev] changed content1_content2_content3_content3-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_content3_content4-tracked
-  other changed content1_content2_content3_content4-untracked which local deleted
+  other [merge rev] changed content1_content2_content3_content4-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content3_missing-tracked which local deleted
+  other [merge rev] changed content1_content2_content3_missing-tracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_content3_missing-untracked which local deleted
+  other [merge rev] changed content1_content2_content3_missing-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_missing_content1-tracked
-  other changed content1_content2_missing_content1-untracked which local deleted
+  other [merge rev] changed content1_content2_missing_content1-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_missing_content2-untracked which local deleted
+  other [merge rev] changed content1_content2_missing_content2-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging content1_content2_missing_content4-tracked
-  other changed content1_content2_missing_content4-untracked which local deleted
+  other [merge rev] changed content1_content2_missing_content4-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_missing_missing-tracked which local deleted
+  other [merge rev] changed content1_content2_missing_missing-tracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  other changed content1_content2_missing_missing-untracked which local deleted
+  other [merge rev] changed content1_content2_missing_missing-untracked which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
-  local changed content1_missing_content1_content4-tracked which other deleted
+  local [working copy] changed content1_missing_content1_content4-tracked which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? u
-  local changed content1_missing_content3_content3-tracked which other deleted
+  local [working copy] changed content1_missing_content3_content3-tracked which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? u
-  local changed content1_missing_content3_content4-tracked which other deleted
+  local [working copy] changed content1_missing_content3_content4-tracked which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? u
-  local changed content1_missing_missing_content4-tracked which other deleted
+  local [working copy] changed content1_missing_missing_content4-tracked which other [merge rev] deleted
   use (c)hanged version, (d)elete, or leave (u)nresolved? u
   merging missing_content2_content2_content4-tracked
   merging missing_content2_content3_content3-tracked
--- a/tests/test-merge-remove.t	Wed Oct 05 15:28:34 2016 +0200
+++ b/tests/test-merge-remove.t	Fri Oct 07 08:51:50 2016 -0700
@@ -102,7 +102,7 @@
 Those who use force will lose
 
   $ hg merge -f
-  other changed bar which local deleted
+  other [merge rev] changed bar which local [working copy] deleted
   use (c)hanged version, leave (d)eleted, or leave (u)nresolved? u
   merging foo1 and foo to foo1
   0 files updated, 1 files merged, 0 files removed, 1 files unresolved
--- a/tests/test-merge-tools.t	Wed Oct 05 15:28:34 2016 +0200
+++ b/tests/test-merge-tools.t	Fri Oct 07 08:51:50 2016 -0700
@@ -75,11 +75,11 @@
   [1]
   $ aftermerge
   # cat f
-  <<<<<<< local: ef83787e2614  - test: revision 1
+  <<<<<<< working copy: ef83787e2614  - test: revision 1
   revision 1
   =======
   revision 2
-  >>>>>>> other: 0185f4e0cf02  - test: revision 2
+  >>>>>>> merge rev:    0185f4e0cf02  - test: revision 2
   space
   # hg stat
   M f
@@ -532,7 +532,7 @@
   # hg update -C 1
   $ hg merge -r 2 --config ui.merge=internal:prompt
   no tool found to merge f
-  keep (l)ocal, take (o)ther, or leave (u)nresolved? u
+  keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved? u
   0 files updated, 0 files merged, 0 files removed, 1 files unresolved
   use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
   [1]
@@ -557,7 +557,7 @@
   > u
   > EOF
   no tool found to merge f
-  keep (l)ocal, take (o)ther, or leave (u)nresolved? u
+  keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved? u
   0 files updated, 0 files merged, 0 files removed, 1 files unresolved
   use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
   [1]
@@ -580,7 +580,7 @@
   # hg update -C 1
   $ hg merge -r 2 --config ui.merge=internal:prompt --config ui.interactive=true
   no tool found to merge f
-  keep (l)ocal, take (o)ther, or leave (u)nresolved? 
+  keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved? 
   0 files updated, 0 files merged, 0 files removed, 1 files unresolved
   use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
   [1]
@@ -594,7 +594,7 @@
   U f
   $ hg resolve --all --config ui.merge=internal:prompt --config ui.interactive=true
   no tool found to merge f
-  keep (l)ocal, take (o)ther, or leave (u)nresolved? 
+  keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved? 
   [1]
   $ aftermerge
   # cat f
@@ -608,7 +608,7 @@
   $ rm f
   $ hg resolve --all --config ui.merge=internal:prompt --config ui.interactive=true
   no tool found to merge f
-  keep (l)ocal, take (o)ther, or leave (u)nresolved? 
+  keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved? 
   [1]
   $ aftermerge
   # cat f
@@ -620,7 +620,7 @@
   U f
   $ hg resolve --all --config ui.merge=internal:prompt
   no tool found to merge f
-  keep (l)ocal, take (o)ther, or leave (u)nresolved? u
+  keep (l)ocal [working copy], take (o)ther [merge rev], or leave (u)nresolved? u
   [1]
   $ aftermerge
   # cat f
@@ -935,12 +935,12 @@
   # hg update -C 1
   $ hg merge -r 4 --config merge-tools.true.premerge=keep
   merging f
-  <<<<<<< local: ef83787e2614  - test: revision 1
+  <<<<<<< working copy: ef83787e2614  - test: revision 1
   revision 1
   space
   =======
   revision 4
-  >>>>>>> other: 81448d39c9a0 - test: revision 4
+  >>>>>>> merge rev:    81448d39c9a0 - test: revision 4
   revision 0
   space
   revision 4
@@ -948,12 +948,12 @@
   (branch merge, don't forget to commit)
   $ aftermerge
   # cat f
-  <<<<<<< local: ef83787e2614  - test: revision 1
+  <<<<<<< working copy: ef83787e2614  - test: revision 1
   revision 1
   space
   =======
   revision 4
-  >>>>>>> other: 81448d39c9a0 - test: revision 4
+  >>>>>>> merge rev:    81448d39c9a0 - test: revision 4
   # hg stat
   M f
   # hg resolve --list
@@ -969,7 +969,7 @@
   # hg update -C 1
   $ hg merge -r 4 --config merge-tools.true.premerge=keep-merge3
   merging f
-  <<<<<<< local: ef83787e2614  - test: revision 1
+  <<<<<<< working copy: ef83787e2614  - test: revision 1
   revision 1
   space
   ||||||| base
@@ -977,7 +977,7 @@
   space
   =======
   revision 4
-  >>>>>>> other: 81448d39c9a0 - test: revision 4
+  >>>>>>> merge rev:    81448d39c9a0 - test: revision 4
   revision 0
   space
   revision 4
@@ -985,7 +985,7 @@
   (branch merge, don't forget to commit)
   $ aftermerge
   # cat f
-  <<<<<<< local: ef83787e2614  - test: revision 1
+  <<<<<<< working copy: ef83787e2614  - test: revision 1
   revision 1
   space
   ||||||| base
@@ -993,7 +993,7 @@
   space
   =======
   revision 4
-  >>>>>>> other: 81448d39c9a0 - test: revision 4
+  >>>>>>> merge rev:    81448d39c9a0 - test: revision 4
   # hg stat
   M f
   # hg resolve --list
--- a/tests/test-merge-types.t	Wed Oct 05 15:28:34 2016 +0200
+++ b/tests/test-merge-types.t	Fri Oct 07 08:51:50 2016 -0700
@@ -356,18 +356,18 @@
   U h
   $ tellmeabout a
   a is a plain file with content:
-  <<<<<<< local: 0139c5610547 - test: 2
+  <<<<<<< working copy: 0139c5610547 - test: 2
   2
   =======
   1
-  >>>>>>> other: 97e29675e796  - test: 1
+  >>>>>>> merge rev:    97e29675e796  - test: 1
   $ tellmeabout b
   b is a plain file with content:
-  <<<<<<< local: 0139c5610547 - test: 2
+  <<<<<<< working copy: 0139c5610547 - test: 2
   2
   =======
   1
-  >>>>>>> other: 97e29675e796  - test: 1
+  >>>>>>> merge rev:    97e29675e796  - test: 1
   $ tellmeabout c
   c is a plain file with content:
   x
@@ -409,18 +409,18 @@
   [1]
   $ tellmeabout a
   a is a plain file with content:
-  <<<<<<< local: 97e29675e796  - test: 1
+  <<<<<<< working copy: 97e29675e796  - test: 1
   1
   =======
   2
-  >>>>>>> other: 0139c5610547 - test: 2
+  >>>>>>> merge rev:    0139c5610547 - test: 2
   $ tellmeabout b
   b is an executable file with content:
-  <<<<<<< local: 97e29675e796  - test: 1
+  <<<<<<< working copy: 97e29675e796  - test: 1
   1
   =======
   2
-  >>>>>>> other: 0139c5610547 - test: 2
+  >>>>>>> merge rev:    0139c5610547 - test: 2
   $ tellmeabout c
   c is an executable file with content:
   x
--- a/tests/test-merge7.t	Wed Oct 05 15:28:34 2016 +0200
+++ b/tests/test-merge7.t	Fri Oct 07 08:51:50 2016 -0700
@@ -99,11 +99,11 @@
 
   $ cat test.txt
   one
-  <<<<<<< local: 50c3a7e29886  - test: Merge 1
+  <<<<<<< working copy: 50c3a7e29886  - test: Merge 1
   two-point-five
   =======
   two-point-one
-  >>>>>>> other: 40d11a4173a8 - test: two -> two-point-one
+  >>>>>>> merge rev:    40d11a4173a8 - test: two -> two-point-one
   three
 
   $ hg debugindex test.txt
--- a/tests/test-rename-dir-merge.t	Wed Oct 05 15:28:34 2016 +0200
+++ b/tests/test-rename-dir-merge.t	Fri Oct 07 08:51:50 2016 -0700
@@ -144,11 +144,11 @@
   C b/a
   C b/b
   $ cat b/c
-  <<<<<<< local: f1c50ca4f127 - test: new file in target directory
+  <<<<<<< working copy: f1c50ca4f127 - test: new file in target directory
   target
   =======
   baz
-  >>>>>>> other: ce36d17b18fb  - test: 2 add a/c
+  >>>>>>> merge rev:    ce36d17b18fb  - test: 2 add a/c
   $ rm b/c.orig
 
 Remote directory rename with conflicting file added in remote target directory
@@ -177,11 +177,11 @@
   ? a/d
   ? b/c.orig
   $ cat b/c
-  <<<<<<< local: ce36d17b18fb  - test: 2 add a/c
+  <<<<<<< working copy: ce36d17b18fb  - test: 2 add a/c
   baz
   =======
   target
-  >>>>>>> other: f1c50ca4f127 - test: new file in target directory
+  >>>>>>> merge rev:    f1c50ca4f127 - test: new file in target directory
 
 Second scenario with two repos:
 
--- a/tests/test-rename-merge2.t	Wed Oct 05 15:28:34 2016 +0200
+++ b/tests/test-rename-merge2.t	Fri Oct 07 08:51:50 2016 -0700
@@ -694,7 +694,7 @@
   starting 4 threads for background file closing (?)
    a: prompt deleted/changed -> m (premerge)
   picked tool ':prompt' for a (binary False symlink False changedelete True)
-  other changed a which local deleted
+  other [merge rev] changed a which local [working copy] deleted
   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)
@@ -739,7 +739,7 @@
   starting 4 threads for background file closing (?)
    a: prompt changed/deleted -> m (premerge)
   picked tool ':prompt' for a (binary False symlink False changedelete True)
-  local changed a which other deleted
+  local [working copy] changed a which other [merge rev] deleted
   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)
--- a/tests/test-resolve.t	Wed Oct 05 15:28:34 2016 +0200
+++ b/tests/test-resolve.t	Fri Oct 07 08:51:50 2016 -0700
@@ -290,6 +290,9 @@
   * version 2 records
   local: 57653b9f834a4493f7240b0681efcb9ae7cab745
   other: dc77451844e37f03f5c559e3b8529b2b48d381d1
+  labels:
+    local: working copy
+    other: merge rev
   unrecognized entry: x	advisory record
   file extras: file1 (ancestorlinknode = 99726c03216e233810a2564cbc0adfe395007eac)
   file: file1 (record type "F", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
@@ -312,6 +315,9 @@
   * version 2 records
   local: 57653b9f834a4493f7240b0681efcb9ae7cab745
   other: dc77451844e37f03f5c559e3b8529b2b48d381d1
+  labels:
+    local: working copy
+    other: merge rev
   file extras: file1 (ancestorlinknode = 99726c03216e233810a2564cbc0adfe395007eac)
   file: file1 (record type "F", state "r", hash 60b27f004e454aca81b0480209cce5081ec52390)
     local path: file1 (flags "")
--- a/tests/test-subrepo-git.t	Wed Oct 05 15:28:34 2016 +0200
+++ b/tests/test-subrepo-git.t	Fri Oct 07 08:51:50 2016 -0700
@@ -171,7 +171,7 @@
   (run 'hg heads' to see heads, 'hg merge' to merge)
   $ hg merge 2>/dev/null
    subrepository s diverged (local revision: 7969594, remote revision: aa84837)
-  (M)erge, keep (l)ocal or keep (r)emote? m
+  (M)erge, keep (l)ocal [working copy] or keep (r)emote [merge rev]? m
   pulling subrepo s from $TESTTMP/gitroot
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   (branch merge, don't forget to commit)
--- a/tests/test-subrepo.t	Wed Oct 05 15:28:34 2016 +0200
+++ b/tests/test-subrepo.t	Fri Oct 07 08:51:50 2016 -0700
@@ -304,7 +304,7 @@
     subrepo t: both sides changed 
    subrepository t diverged (local revision: 20a0db6fbf6c, remote revision: 7af322bc1198)
   starting 4 threads for background file closing (?)
-  (M)erge, keep (l)ocal or keep (r)emote? m
+  (M)erge, keep (l)ocal [working copy] or keep (r)emote [merge rev]? m
   merging subrepo t
     searching for copies back to rev 2
   resolving manifests
@@ -349,7 +349,7 @@
 local removed, remote changed, keep changed
 
   $ hg merge 6
-   remote changed subrepository s which local removed
+   remote [merge rev] changed subrepository s which local [working copy] removed
   use (c)hanged version or (d)elete? c
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   (branch merge, don't forget to commit)
@@ -380,7 +380,7 @@
   $ hg merge --config ui.interactive=true 6 <<EOF
   > d
   > EOF
-   remote changed subrepository s which local removed
+   remote [merge rev] changed subrepository s which local [working copy] removed
   use (c)hanged version or (d)elete? d
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   (branch merge, don't forget to commit)
@@ -404,7 +404,7 @@
   $ hg co -C 6
   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg merge 11
-   local changed subrepository s which remote removed
+   local [working copy] changed subrepository s which remote [merge rev] removed
   use (c)hanged version or (d)elete? c
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   (branch merge, don't forget to commit)
@@ -436,7 +436,7 @@
   $ hg merge --config ui.interactive=true 11 <<EOF
   > d
   > EOF
-   local changed subrepository s which remote removed
+   local [working copy] changed subrepository s which remote [merge rev] removed
   use (c)hanged version or (d)elete? d
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   (branch merge, don't forget to commit)
@@ -860,7 +860,7 @@
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg merge 4    # try to merge default into br again
    subrepository s diverged (local revision: f8f13b33206e, remote revision: a3f9062a4f88)
-  (M)erge, keep (l)ocal or keep (r)emote? m
+  (M)erge, keep (l)ocal [working copy] or keep (r)emote [merge rev]? m
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   (branch merge, don't forget to commit)
   $ cd ..