[PATCH 4 of 6 resolve-ux] resolve: abort when not applicable
Gregory Szorc
gregory.szorc at gmail.com
Fri May 2 00:47:39 CDT 2014
# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1397873312 25200
# Fri Apr 18 19:08:32 2014 -0700
# Branch stable
# Node ID 7b1284b4135e667af354274ba4193e5ae13cb113
# Parent b4d95342be6de3e3a229e1536720d22d6de6eb13
resolve: abort when not applicable
The resolve command is only relevant when mergestate is present.
This patch will make resolve abort when no mergestate is present.
This change will let people know when they are using resolve when they
shouldn't be. This change will let people know when their use of resolve
doesn't do anything.
Previously, |hg resolve -m| would allow mergestate to be created. This
patch now forbids that. Strictly speaking, this is backwards
incompatible. The author of this patch believes creating mergestate via
resolve doesn't make much sense and this side-effect was unintended.
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -4922,16 +4922,21 @@ def resolve(ui, repo, *pats, **opts):
raise util.Abort(_("too many options specified"))
if pats and all:
raise util.Abort(_("can't specify --all and patterns"))
if not (all or pats or show or mark or unmark):
raise util.Abort(_('no files or directories specified; '
'use --all to remerge all files'))
ms = mergemod.mergestate(repo)
+
+ if not ms:
+ raise util.Abort(_('no merge in progress; '
+ 'resolve command not applicable'))
+
m = scmutil.match(repo[None], pats, opts)
ret = 0
for f in ms:
if not m(f):
continue
if show:
diff --git a/tests/test-histedit-non-commute-abort.t b/tests/test-histedit-non-commute-abort.t
--- a/tests/test-histedit-non-commute-abort.t
+++ b/tests/test-histedit-non-commute-abort.t
@@ -80,16 +80,18 @@ edit the history
abort the edit
$ hg histedit --abort 2>&1 | fixbundle
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
log after abort
$ hg resolve -l
+ abort: no merge in progress; resolve command not applicable
+ [255]
$ hg log --graph
@ changeset: 6:bfa474341cc9
| tag: tip
| user: test
| date: Thu Jan 01 00:00:00 1970 +0000
| summary: does not commute with e
|
o changeset: 5:652413bf663e
diff --git a/tests/test-resolve.t b/tests/test-resolve.t
--- a/tests/test-resolve.t
+++ b/tests/test-resolve.t
@@ -32,19 +32,21 @@ resolve -l should contain an unresolved
U file
resolve the failure
$ echo resolved > file
$ hg resolve -m file
$ hg commit -m 'resolved'
-resolve -l, should be empty
+resolve -l should error since no merge in progress
$ hg resolve -l
+ abort: no merge in progress; resolve command not applicable
+ [255]
test crashed merge with empty mergestate
$ mkdir .hg/merge
$ touch .hg/merge/state
resolve -l, should be empty
diff --git a/tests/test-shelve.t b/tests/test-shelve.t
--- a/tests/test-shelve.t
+++ b/tests/test-shelve.t
@@ -257,16 +257,18 @@ abort the unshelve and be happy
$ hg parents
changeset: 3:2e69b451d1ea
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: second
$ hg resolve -l
+ abort: no merge in progress; resolve command not applicable
+ [255]
$ hg status
A foo/foo
? a/a.orig
try to continue with no unshelve underway
$ hg unshelve -c
abort: no unshelve operation underway
More information about the Mercurial-devel
mailing list