[PATCH 04 of 10] rebase: improve error message for base revision

Pierre-Yves David pierre-yves.david at ens-lyon.org
Fri Jan 17 17:31:52 CST 2014

On 01/14/2014 06:25 PM, Mads Kiilerich wrote:
> would also be confusingOn 01/13/2014 08:29 AM, Pierre-Yves David wrote:
>> On Sun, Jan 12, 2014 at 05:08:02PM +0100, Mads Kiilerich wrote:
>>> # HG changeset patch
>>> # User Mads Kiilerich <madski at unity3d.com>
>>> # Date 1384730518 18000
>>> #      Sun Nov 17 18:21:58 2013 -0500
>>> # Node ID 55325a119cbeea17c2379bbe23f20d6226442a03
>>> # Parent  ef40ccf4914c597e32885227dde08abe40e41ad5
>>> rebase: improve error message for base revision
>>> Before it just said 'nothing to rebase', now it also hints to the 
>>> reason:
>> I like the idea of improving rebase error message but this one about 
>> base is confusing.
>> The argument from base is "changeset to compute a base from" not 
>> "base changeset".
> "compute a base from" - is that an official description somewhere? 
> What is a "base" really? The set it is computing from "base" can not 
> really be called a "base".

Well it kind of compute a real -base- to use as in --source to get the 

The revset is "(children(ancestor(<base>, <dest>)) and ::(<base>))::"

Most of it "(children(ancestor(<base>, <dest>)) and ::(<base>))" is 
about computing a base. It then takes all descendant in the rebase set.

> I will call it "base" and quote it. Reading that and the option name 
> as "smurf" makes it more readable than when trying to think of it as 
> some kind of base ;-)

Quoting it improve it a lot

> And more important: I will avoid mentioning "base" when it working 
> directory is used as default.


>> So I would made the following changes:
>>> nothing to rebase - NODE is both base and destination
>> nothing to rebase - NODE is both source and destination
>>> nothing to rebase - base NODE is already an ancestor of destination 
>>> NODE
>> cannot rebase - destination NODE is based on source NODE
> I don't think "based on" would be helpful. I think 'ancestor' is better.

The issue I have from this changeset is "already an ancestors of"

When I use `hg rebase --dest D --base A` I'm trying to make D an 
ancestors of A. reading it the other way around is confusing my brain.

$ hg rebase --dest D --base A
# me: please make D an ancestors of A
# hg: can't A is -already- and ancestors of D
# me: not what I'm asking for idiot!

After writing this down I think dropping the "already" will make it fine:

     nothing to rebase - base NODE is an ancestor of destination NODE

I do not really like the "nothing to rebase". And will probbly would 
like to have an error returned here. But his can be pushed out of this 

> It would also be confusing to call the value that the user specified 
> with --base for "source".

hg help rebase use "source" all over the place. The "source/destination" 
idea apply well to rebase whatever the actual initial option is used.

>>> 'base revset is empty',
>> nothing to rebase - can't compute base from empty revset
> But it is not a base it is computing!

yes it is (see revset above). you could also use "rebase set". (or use 
your "base" trick, okay)

>> Moreover reading this test ouput puzzled me:
>>>    $ hg rebase
>>>    nothing to rebase - e7ec4e813ba6 is both base and destination
>> What about dedicated detection and a more specific message.
>> nothing to rebase - already on BRANCH tipmost head
>> (do you want to use to use --dest or --base?)
> That can perhaps be introduced later. I would like to get the dest 
> computation under control first.

Ok with it introduced later (could worth being pointed in a comment or a 

>> I starting to thing --base could have been better named --branch (but 
>> then
>> people would think it is about named branch)
> It is not directly specifying the branch. It only gives meaning 
> relative to a dest, and then it is giving a hint, pointing at a 
> subtree, identifying a branch, selecting a side. Some of these words 
> can perhaps be used.

--base ask rebase to grab everything "branching" from --dest that 
somehow contains the target of  `--branch`. Its the "grab that branchy 
things" option.


More information about the Mercurial-devel mailing list