Patchwork [V2] rebase: better error message when rebased changes are all in destination

login
register
mail settings
Submitter Laurent Charignon
Date Dec. 29, 2015, 11:32 p.m.
Message ID <5732bc59c77fb50e1658.1451431962@lcharignon-mbp.local>
Download mbox | patch
Permalink /patch/12408/
State Superseded
Commit f9e755736b0eead8d8ab79d5c983feb82579fd92
Headers show

Comments

Laurent Charignon - Dec. 29, 2015, 11:32 p.m.
# HG changeset patch
# User Laurent Charignon <lcharignon@fb.com>
# Date 1451431932 28800
#      Tue Dec 29 15:32:12 2015 -0800
# Node ID 5732bc59c77fb50e1658aa2223f9932e849e662f
# Parent  23541bdd1610c08af247f9c8719045cf247ce541
rebase: better error message when rebased changes are all in destination

Before this patch, when rebasing a set of obsolete revisions that were plain
pruned or already present in the destination, we were displaying:

abort: no matching revisions

This was not very helpful to understand what was going on, instead we replace
the error message by:

abort: all requested changesets have equivalents or were marked as obsolete
(to force the rebase, set the config experimental.rebaseskipobsolete to False)
Augie Fackler - Dec. 31, 2015, 4:24 p.m.
On Tue, Dec 29, 2015 at 03:32:42PM -0800, Laurent Charignon wrote:
> # HG changeset patch
> # User Laurent Charignon <lcharignon@fb.com>
> # Date 1451431932 28800
> #      Tue Dec 29 15:32:12 2015 -0800
> # Node ID 5732bc59c77fb50e1658aa2223f9932e849e662f
> # Parent  23541bdd1610c08af247f9c8719045cf247ce541
> rebase: better error message when rebased changes are all in destination

queued, thanks

>
> Before this patch, when rebasing a set of obsolete revisions that were plain
> pruned or already present in the destination, we were displaying:
>
> abort: no matching revisions
>
> This was not very helpful to understand what was going on, instead we replace
> the error message by:
>
> abort: all requested changesets have equivalents or were marked as obsolete
> (to force the rebase, set the config experimental.rebaseskipobsolete to False)
>
> diff --git a/hgext/rebase.py b/hgext/rebase.py
> --- a/hgext/rebase.py
> +++ b/hgext/rebase.py
> @@ -348,6 +348,13 @@ def rebase(ui, repo, **opts):
>                  # - split changesets are not rebased if at least one of the
>                  # changeset resulting from the split is an ancestor of dest
>                  rebaseset = rebasesetrevs - set(obsoletenotrebased)
> +                if rebasesetrevs and not rebaseset:
> +                    msg = _('all requested changesets have equivalents '
> +                            'or were marked as obsolete')
> +                    hint = _('to force the rebase, set the config '
> +                             'experimental.rebaseskipobsolete to False')
> +                    raise error.Abort(msg, hint=hint)
> +
>              result = buildstate(repo, dest, rebaseset, collapsef,
>                                  obsoletenotrebased)
>
> diff --git a/tests/test-rebase-obsolete.t b/tests/test-rebase-obsolete.t
> --- a/tests/test-rebase-obsolete.t
> +++ b/tests/test-rebase-obsolete.t
> @@ -685,3 +685,30 @@ Even when the chain include missing node
>    rebasing 4:ff2c4d47b71d "C"
>    note: not rebasing 7:360bbaa7d3ce "O", it has no successor
>    rebasing 8:8d47583e023f "P" (tip)
> +
> +If all the changeset to be rebased are obsolete and present in the destination, we
> +should display a friendly error message
> +
> +  $ hg log -G
> +  @  10:121d9e3bc4c6 P
> +  |
> +  o  9:4be60e099a77 C
> +  |
> +  o  6:9c48361117de D
> +  |
> +  o  2:261e70097290 B2
> +  |
> +  o  0:4a2df7238c3b A
> +
> +
> +  $ hg up 9
> +  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
> +  $ echo "non-relevant change" > nonrelevant
> +  $ hg add nonrelevant
> +  $ hg commit -m nonrelevant
> +  created new head
> +  $ hg debugobsolete `hg log -r 11 -T '{node}\n'` --config experimental.evolution=all
> +  $ hg rebase -r . -d 10
> +  abort: all requested changesets have equivalents or were marked as obsolete
> +  (to force the rebase, set the config experimental.rebaseskipobsolete to False)
> +  [255]
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel

Patch

diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -348,6 +348,13 @@  def rebase(ui, repo, **opts):
                 # - split changesets are not rebased if at least one of the
                 # changeset resulting from the split is an ancestor of dest
                 rebaseset = rebasesetrevs - set(obsoletenotrebased)
+                if rebasesetrevs and not rebaseset:
+                    msg = _('all requested changesets have equivalents '
+                            'or were marked as obsolete')
+                    hint = _('to force the rebase, set the config '
+                             'experimental.rebaseskipobsolete to False')
+                    raise error.Abort(msg, hint=hint)
+
             result = buildstate(repo, dest, rebaseset, collapsef,
                                 obsoletenotrebased)
 
diff --git a/tests/test-rebase-obsolete.t b/tests/test-rebase-obsolete.t
--- a/tests/test-rebase-obsolete.t
+++ b/tests/test-rebase-obsolete.t
@@ -685,3 +685,30 @@  Even when the chain include missing node
   rebasing 4:ff2c4d47b71d "C"
   note: not rebasing 7:360bbaa7d3ce "O", it has no successor
   rebasing 8:8d47583e023f "P" (tip)
+
+If all the changeset to be rebased are obsolete and present in the destination, we
+should display a friendly error message
+
+  $ hg log -G
+  @  10:121d9e3bc4c6 P
+  |
+  o  9:4be60e099a77 C
+  |
+  o  6:9c48361117de D
+  |
+  o  2:261e70097290 B2
+  |
+  o  0:4a2df7238c3b A
+  
+
+  $ hg up 9
+  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+  $ echo "non-relevant change" > nonrelevant
+  $ hg add nonrelevant
+  $ hg commit -m nonrelevant
+  created new head
+  $ hg debugobsolete `hg log -r 11 -T '{node}\n'` --config experimental.evolution=all
+  $ hg rebase -r . -d 10
+  abort: all requested changesets have equivalents or were marked as obsolete
+  (to force the rebase, set the config experimental.rebaseskipobsolete to False)
+  [255]