Patchwork [4,of,5] histedit: suggest "histedit --abort" for inconsistent histedit status

login
register
mail settings
Submitter Katsunori FUJIWARA
Date Aug. 26, 2013, 7:41 a.m.
Message ID <530564f737e2bf5111f7.1377502911@feefifofum>
Download mbox | patch
Permalink /patch/2260/
State Changes Requested
Headers show

Comments

Katsunori FUJIWARA - Aug. 26, 2013, 7:41 a.m.
# HG changeset patch
# User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
# Date 1377501081 -32400
#      Mon Aug 26 16:11:21 2013 +0900
# Node ID 530564f737e2bf5111f769f944f6d0f7b6942def
# Parent  c0dc67257c631ea0b709b189271bfd022917c022
histedit: suggest "histedit --abort" for inconsistent histedit status

This patch changes the hint message for inconsistent histedit status,
because Mercurial 2.7 or later prevents from updating the working
directory before "histedit --abort", if histedit is in progress.
Augie Fackler - Aug. 26, 2013, 1:48 p.m.
On Mon, Aug 26, 2013 at 04:41:51PM +0900, FUJIWARA Katsunori wrote:
> # HG changeset patch
> # User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
> # Date 1377501081 -32400
> #      Mon Aug 26 16:11:21 2013 +0900
> # Node ID 530564f737e2bf5111f769f944f6d0f7b6942def
> # Parent  c0dc67257c631ea0b709b189271bfd022917c022
> histedit: suggest "histedit --abort" for inconsistent histedit status
>
> This patch changes the hint message for inconsistent histedit status,
> because Mercurial 2.7 or later prevents from updating the working
> directory before "histedit --abort", if histedit is in progress.

Not sure how I feel about this one. This changes the suggestion from
"finish your work" to "throw away any work you've done."

>
> diff --git a/hgext/histedit.py b/hgext/histedit.py
> --- a/hgext/histedit.py
> +++ b/hgext/histedit.py
> @@ -628,8 +628,8 @@
>              # `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 = _('this inconsistent histedit should be aborted by '
> +                     '"histedit --abort"')
>              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,37 @@
>    [255]
>    $ hg up --quiet
>
> +Run on a revision not descendants of the initial parent
> +--------------------------------------------------------------------
> +
> +this should occur only when there is (maybe forgotten) histedit-state
> +left by hg earlier than 2.7, because 2.7 or later prevents users from
> +updating without aborting.
> +
> +  $ 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]
> +
> +this emulates "hg update" before "hg histedit --abort" with hg earlier
> +than 2.7
> +
> +  $ 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
> +  (this inconsistent histedit should be aborted by "histedit --abort")
> +  [255]
> +
> +  $ hg histedit --abort
> +  $ hg update --quiet --clean
> +
>  Test that missing revisions are detected
>  ---------------------------------------
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
Katsunori FUJIWARA - Aug. 27, 2013, 7:23 a.m.
At Mon, 26 Aug 2013 09:48:11 -0400,
Augie Fackler wrote:
> 
> On Mon, Aug 26, 2013 at 04:41:51PM +0900, FUJIWARA Katsunori wrote:
> > # HG changeset patch
> > # User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
> > # Date 1377501081 -32400
> > #      Mon Aug 26 16:11:21 2013 +0900
> > # Node ID 530564f737e2bf5111f769f944f6d0f7b6942def
> > # Parent  c0dc67257c631ea0b709b189271bfd022917c022
> > histedit: suggest "histedit --abort" for inconsistent histedit status
> >
> > This patch changes the hint message for inconsistent histedit status,
> > because Mercurial 2.7 or later prevents from updating the working
> > directory before "histedit --abort", if histedit is in progress.
> 
> Not sure how I feel about this one. This changes the suggestion from
> "finish your work" to "throw away any work you've done."

Yes, it is intentional to change the suggestion from "finish your
work" to "throw away any work you've done.", because there is no
(ordinary) way to continue histedit in this case with Mercurial 2.7 or
later.

IMHO, adding new code path (or option ?) to allow such continuation
seems to have less meaning, because this histedit should be forgotten
one in almost all cases.

Or should I suggest "use Mercurial earlier than 2.7 to continue this
histedit" or "backup .hg/histedit-state, update working directory,
restore histedit-state and continue" ?

> >
> > diff --git a/hgext/histedit.py b/hgext/histedit.py
> > --- a/hgext/histedit.py
> > +++ b/hgext/histedit.py
> > @@ -628,8 +628,8 @@
> >              # `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 = _('this inconsistent histedit should be aborted by '
> > +                     '"histedit --abort"')
> >              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,37 @@
> >    [255]
> >    $ hg up --quiet
> >
> > +Run on a revision not descendants of the initial parent
> > +--------------------------------------------------------------------
> > +
> > +this should occur only when there is (maybe forgotten) histedit-state
> > +left by hg earlier than 2.7, because 2.7 or later prevents users from
> > +updating without aborting.
> > +
> > +  $ 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]
> > +
> > +this emulates "hg update" before "hg histedit --abort" with hg earlier
> > +than 2.7
> > +
> > +  $ 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
> > +  (this inconsistent histedit should be aborted by "histedit --abort")
> > +  [255]
> > +
> > +  $ hg histedit --abort
> > +  $ hg update --quiet --clean
> > +
> >  Test that missing revisions are detected
> >  ---------------------------------------
> >
> > _______________________________________________
> > Mercurial-devel mailing list
> > Mercurial-devel@selenic.com
> > http://selenic.com/mailman/listinfo/mercurial-devel
> 

----------------------------------------------------------------------
[FUJIWARA Katsunori]                             foozy@lares.dti.ne.jp
Augie Fackler - Aug. 27, 2013, 3:09 p.m.
On Tue, Aug 27, 2013 at 04:23:51PM +0900, FUJIWARA Katsunori wrote:
>
> At Mon, 26 Aug 2013 09:48:11 -0400,
> Augie Fackler wrote:
> >
> > On Mon, Aug 26, 2013 at 04:41:51PM +0900, FUJIWARA Katsunori wrote:
> > > # HG changeset patch
> > > # User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
> > > # Date 1377501081 -32400
> > > #      Mon Aug 26 16:11:21 2013 +0900
> > > # Node ID 530564f737e2bf5111f769f944f6d0f7b6942def
> > > # Parent  c0dc67257c631ea0b709b189271bfd022917c022
> > > histedit: suggest "histedit --abort" for inconsistent histedit status
> > >
> > > This patch changes the hint message for inconsistent histedit status,
> > > because Mercurial 2.7 or later prevents from updating the working
> > > directory before "histedit --abort", if histedit is in progress.
> >
> > Not sure how I feel about this one. This changes the suggestion from
> > "finish your work" to "throw away any work you've done."
>
> Yes, it is intentional to change the suggestion from "finish your
> work" to "throw away any work you've done.", because there is no
> (ordinary) way to continue histedit in this case with Mercurial 2.7 or
> later.
>
> IMHO, adding new code path (or option ?) to allow such continuation
> seems to have less meaning, because this histedit should be forgotten
> one in almost all cases.
>
> Or should I suggest "use Mercurial earlier than 2.7 to continue this
> histedit" or "backup .hg/histedit-state, update working directory,
> restore histedit-state and continue" ?

Given that this invalid state can only be produced with an old hg or
by doing dirty things, I'm actually okay leaving the error message
unchanged from current tip.

>
> > >
> > > diff --git a/hgext/histedit.py b/hgext/histedit.py
> > > --- a/hgext/histedit.py
> > > +++ b/hgext/histedit.py
> > > @@ -628,8 +628,8 @@
> > >              # `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 = _('this inconsistent histedit should be aborted by '
> > > +                     '"histedit --abort"')
> > >              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,37 @@
> > >    [255]
> > >    $ hg up --quiet
> > >
> > > +Run on a revision not descendants of the initial parent
> > > +--------------------------------------------------------------------
> > > +
> > > +this should occur only when there is (maybe forgotten) histedit-state
> > > +left by hg earlier than 2.7, because 2.7 or later prevents users from
> > > +updating without aborting.
> > > +
> > > +  $ 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]
> > > +
> > > +this emulates "hg update" before "hg histedit --abort" with hg earlier
> > > +than 2.7
> > > +
> > > +  $ 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
> > > +  (this inconsistent histedit should be aborted by "histedit --abort")
> > > +  [255]
> > > +
> > > +  $ hg histedit --abort
> > > +  $ hg update --quiet --clean
> > > +
> > >  Test that missing revisions are detected
> > >  ---------------------------------------
> > >
> > > _______________________________________________
> > > Mercurial-devel mailing list
> > > Mercurial-devel@selenic.com
> > > http://selenic.com/mailman/listinfo/mercurial-devel
> >
>
> ----------------------------------------------------------------------
> [FUJIWARA Katsunori]                             foozy@lares.dti.ne.jp
Katsunori FUJIWARA - Sept. 30, 2013, 5:11 p.m.
At Tue, 27 Aug 2013 11:09:56 -0400,
Augie Fackler wrote:
> 
> On Tue, Aug 27, 2013 at 04:23:51PM +0900, FUJIWARA Katsunori wrote:
> >
> > At Mon, 26 Aug 2013 09:48:11 -0400,
> > Augie Fackler wrote:
> > >
> > > On Mon, Aug 26, 2013 at 04:41:51PM +0900, FUJIWARA Katsunori wrote:
> > > > # HG changeset patch
> > > > # User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
> > > > # Date 1377501081 -32400
> > > > #      Mon Aug 26 16:11:21 2013 +0900
> > > > # Node ID 530564f737e2bf5111f769f944f6d0f7b6942def
> > > > # Parent  c0dc67257c631ea0b709b189271bfd022917c022
> > > > histedit: suggest "histedit --abort" for inconsistent histedit status
> > > >
> > > > This patch changes the hint message for inconsistent histedit status,
> > > > because Mercurial 2.7 or later prevents from updating the working
> > > > directory before "histedit --abort", if histedit is in progress.
> > >
> > > Not sure how I feel about this one. This changes the suggestion from
> > > "finish your work" to "throw away any work you've done."
> >
> > Yes, it is intentional to change the suggestion from "finish your
> > work" to "throw away any work you've done.", because there is no
> > (ordinary) way to continue histedit in this case with Mercurial 2.7 or
> > later.
> >
> > IMHO, adding new code path (or option ?) to allow such continuation
> > seems to have less meaning, because this histedit should be forgotten
> > one in almost all cases.
> >
> > Or should I suggest "use Mercurial earlier than 2.7 to continue this
> > histedit" or "backup .hg/histedit-state, update working directory,
> > restore histedit-state and continue" ?
> 
> Given that this invalid state can only be produced with an old hg or
> by doing dirty things, I'm actually okay leaving the error message
> unchanged from current tip.

I re-posted this as a part of the series to fix problems around
un-finished state, because users sometime leave and forget un-finished
rebase/histedit state in their repositories: I actually know the user
who hit (with recent Mercurial) forgotten and inconsistent rebase
state created by old Mercurial.

    http://www.selenic.com/pipermail/mercurial-devel/2013-September/054050.html

IMHO, Mercurial should handle states created by old "hg" correctly,
because users may continue to use their old repositories containing
such (maybe broken) states, even though "hg" itself is updated.

Of course, reject it (or them) if not useful.


> > > > diff --git a/hgext/histedit.py b/hgext/histedit.py
> > > > --- a/hgext/histedit.py
> > > > +++ b/hgext/histedit.py
> > > > @@ -628,8 +628,8 @@
> > > >              # `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 = _('this inconsistent histedit should be aborted by '
> > > > +                     '"histedit --abort"')
> > > >              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,37 @@
> > > >    [255]
> > > >    $ hg up --quiet
> > > >
> > > > +Run on a revision not descendants of the initial parent
> > > > +--------------------------------------------------------------------
> > > > +
> > > > +this should occur only when there is (maybe forgotten) histedit-state
> > > > +left by hg earlier than 2.7, because 2.7 or later prevents users from
> > > > +updating without aborting.
> > > > +
> > > > +  $ 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]
> > > > +
> > > > +this emulates "hg update" before "hg histedit --abort" with hg earlier
> > > > +than 2.7
> > > > +
> > > > +  $ 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
> > > > +  (this inconsistent histedit should be aborted by "histedit --abort")
> > > > +  [255]
> > > > +
> > > > +  $ hg histedit --abort
> > > > +  $ hg update --quiet --clean
> > > > +
> > > >  Test that missing revisions are detected
> > > >  ---------------------------------------
> > > >
> > > > _______________________________________________
> > > > Mercurial-devel mailing list
> > > > Mercurial-devel@selenic.com
> > > > http://selenic.com/mailman/listinfo/mercurial-devel
> > >
> >
> > ----------------------------------------------------------------------
> > [FUJIWARA Katsunori]                             foozy@lares.dti.ne.jp
> 

----------------------------------------------------------------------
[FUJIWARA Katsunori]                             foozy@lares.dti.ne.jp

Patch

diff --git a/hgext/histedit.py b/hgext/histedit.py
--- a/hgext/histedit.py
+++ b/hgext/histedit.py
@@ -628,8 +628,8 @@ 
             # `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 = _('this inconsistent histedit should be aborted by '
+                     '"histedit --abort"')
             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,37 @@ 
   [255]
   $ hg up --quiet
 
+Run on a revision not descendants of the initial parent
+--------------------------------------------------------------------
+
+this should occur only when there is (maybe forgotten) histedit-state
+left by hg earlier than 2.7, because 2.7 or later prevents users from
+updating without aborting.
+
+  $ 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]
+
+this emulates "hg update" before "hg histedit --abort" with hg earlier
+than 2.7
+
+  $ 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
+  (this inconsistent histedit should be aborted by "histedit --abort")
+  [255]
+
+  $ hg histedit --abort
+  $ hg update --quiet --clean
+
 Test that missing revisions are detected
 ---------------------------------------