Patchwork [1,of,3,STABLE] histedit: suggest "histedit --abort" for inconsistent histedit state

login
register
mail settings
Submitter Katsunori FUJIWARA
Date Sept. 30, 2013, 4:49 p.m.
Message ID <b7f9df0416e284e4400f.1380559741@feefifofum>
Download mbox | patch
Permalink /patch/2679/
State Accepted
Commit 45c3086880c7611b64f594a67fad57fcd694ab21
Delegated to: Augie Fackler
Headers show

Comments

Katsunori FUJIWARA - Sept. 30, 2013, 4:49 p.m.
# HG changeset patch
# User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
# Date 1380555307 -32400
#      Tue Oct 01 00:35:07 2013 +0900
# Branch stable
# Node ID b7f9df0416e284e4400fb8d19ae98d441d9cdd28
# Parent  4d2bea6604d3bfb34860590fbb6e302cbf273f98
histedit: suggest "histedit --abort" for inconsistent histedit state

Mercurial earlier than 2.7 allows users to do anything other than
starting new histedit, even though current histedit is not finished or
aborted yet. So, unfinished (and maybe inconsistent now) histedit
states may be left and forgotten in repositories.

Before this patch, histedit extension shows the message below, when it
detects such inconsistent state:

   abort: REV is not an ancestor of working directory
   (update to REV or descendant and run "hg histedit --continue" again)

But this message is incorrect, unless old Mercurial is re-installed,
because Mercurial 2.7 or later disallows users to update the working
directory to another revision.

This patch changes the hint message to suggest "hg histedit --abort".

Patch

diff --git a/hgext/histedit.py b/hgext/histedit.py
--- a/hgext/histedit.py
+++ b/hgext/histedit.py
@@ -632,8 +632,7 @@ 
             # `parentctxnode` should match but no result. This means that
             # currentnode is not a descendant from parentctxnode.
             msg = _('%s is not an ancestor of working directory')
-            hint = _('update to %s or descendant and run "hg histedit '
-                     '--continue" again') % parentctx
+            hint = _('use "histedit --abort" to clear broken state')
             raise util.Abort(msg % parentctx, hint=hint)
         newchildren.pop(0)  # remove parentctxnode
     # Commit dirty working directory if necessary
diff --git a/tests/test-histedit-arguments.t b/tests/test-histedit-arguments.t
--- a/tests/test-histedit-arguments.t
+++ b/tests/test-histedit-arguments.t
@@ -70,6 +70,35 @@ 
   [255]
   $ hg up --quiet
 
+Run on a revision not descendants of the initial parent
+--------------------------------------------------------------------
+
+Test the message shown for inconsistent histedit state, which may be
+created (and forgotten) by Mercurial earlier than 2.7. This emulates
+Mercurial earlier than 2.7 by renaming ".hg/histedit-state"
+temporarily.
+
+  $ HGEDITOR=cat hg histedit -r 4 --commands - << EOF
+  > edit 08d98a8350f3 4 five
+  > EOF
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  reverting alpha
+  Make changes as needed, you may commit or record as needed now.
+  When you are finished, run hg histedit --continue to resume.
+  [1]
+
+  $ mv .hg/histedit-state .hg/histedit-state.back
+  $ hg update --quiet --clean 2
+  $ mv .hg/histedit-state.back .hg/histedit-state
+
+  $ hg histedit --continue
+  abort: c8e68270e35a is not an ancestor of working directory
+  (use "histedit --abort" to clear broken state)
+  [255]
+
+  $ hg histedit --abort
+  $ hg update --quiet --clean
+
 Test that missing revisions are detected
 ---------------------------------------