update: add error message for dirty non-linear update with no rev
Previously, the error message for a dirty non-linear update was the same (and
relatively unhelpful) whether or not a rev was specified. This patch and an
upcoming one will introduce separate, more helpful hints.
--- a/mercurial/merge.py Mon Sep 23 17:43:33 2013 -0700
+++ b/mercurial/merge.py Mon Sep 23 20:07:30 2013 -0700
@@ -656,19 +656,21 @@
-c -C dirty rev | linear same cross
n n n n | ok (1) x
n n n y | ok ok ok
- n n y * | merge (2) (2)
+ n n y n | merge (2) (2)
+ n n y y | merge (3) (3)
n y * * | --- discard ---
- y n y * | --- (3) ---
+ y n y * | --- (4) ---
y n n * | --- ok ---
- y y * * | --- (4) ---
+ y y * * | --- (5) ---
x = can't happen
* = don't-care
1 = abort: not a linear update (merge or update --check to force update)
2 = abort: crosses branches (use 'hg merge' to merge or
use 'hg update -C' to discard changes)
- 3 = abort: uncommitted local changes
- 4 = incompatible options (checked in commands.py)
+ 3 = abort: uncommitted changes (commit or update --clean to discard changes)
+ 4 = abort: uncommitted local changes
+ 5 = incompatible options (checked in commands.py)
Return the same tuple as applyupdates().
"""
@@ -726,10 +728,14 @@
# note: the <node> variable contains a random identifier
if repo[node].node() in foreground:
pa = p1 # allow updating to successors
- elif dirty:
+ elif dirty and onode is None:
msg = _("crosses branches (merge branches or use"
" --clean to discard changes)")
raise util.Abort(msg)
+ elif dirty:
+ msg = _("uncommitted changes")
+ hint = _("commit or update --clean to discard changes")
+ raise util.Abort(msg, hint=hint)
else: # node is none
msg = _("not a linear update")
hint = _("merge or update --check to force update")
--- a/tests/test-merge5.t Mon Sep 23 17:43:33 2013 -0700
+++ b/tests/test-merge5.t Mon Sep 23 20:07:30 2013 -0700
@@ -33,7 +33,8 @@
Should abort:
$ hg update -y 1
- abort: crosses branches (merge branches or use --clean to discard changes)
+ abort: uncommitted changes
+ (commit or update --clean to discard changes)
[255]
$ mv c a
--- a/tests/test-subrepo-svn.t Mon Sep 23 17:43:33 2013 -0700
+++ b/tests/test-subrepo-svn.t Mon Sep 23 20:07:30 2013 -0700
@@ -477,7 +477,8 @@
This is surprising, but is also correct based on the current code:
$ echo "updating should (maybe) fail" > obstruct/other
$ hg co tip
- abort: crosses branches (merge branches or use --clean to discard changes)
+ abort: uncommitted changes
+ (commit or update --clean to discard changes)
[255]
Point to a Subversion branch which has since been deleted and recreated
--- a/tests/test-update-branches.t Mon Sep 23 17:43:33 2013 -0700
+++ b/tests/test-update-branches.t Mon Sep 23 20:07:30 2013 -0700
@@ -123,22 +123,26 @@
M sub/suba
$ revtest 'none dirty same' dirty 2 3
- abort: crosses branches (merge branches or use --clean to discard changes)
+ abort: uncommitted changes
+ (commit or update --clean to discard changes)
parent=2
M foo
$ revtest 'none dirtysub same' dirtysub 2 3
- abort: crosses branches (merge branches or use --clean to discard changes)
+ abort: uncommitted changes
+ (commit or update --clean to discard changes)
parent=2
M sub/suba
$ revtest 'none dirty cross' dirty 3 4
- abort: crosses branches (merge branches or use --clean to discard changes)
+ abort: uncommitted changes
+ (commit or update --clean to discard changes)
parent=3
M foo
$ revtest 'none dirtysub cross' dirtysub 3 4
- abort: crosses branches (merge branches or use --clean to discard changes)
+ abort: uncommitted changes
+ (commit or update --clean to discard changes)
parent=3
M sub/suba
@@ -223,5 +227,6 @@
$ hg up --quiet 0
$ hg up --quiet 2
$ hg up 5
- abort: crosses branches (merge branches or use --clean to discard changes)
+ abort: uncommitted changes
+ (commit or update --clean to discard changes)
[255]