[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