question on "hg head" and the head(), heads([set]) predicates

Matt Mackall mpm at selenic.com
Thu Jun 25 20:22:55 UTC 2015


On Thu, 2015-06-25 at 17:49 +0200, Giovanni Gherdovich wrote:
> Hello,
> 
> I encountered a behaviour I don't quite understand.
> 
> Consider this toy repository:
> 
> -------------------------------------------
> $ hg init
> $ touch foo ; hg add foo ; hg commit -m foo
> $ touch bar ; hg add bar ; hg commit -m bar
> $ hg branch quux ; hg commit -m 'branch quux'
> $ hg commit -m 'close branch quux' --close-branch
> $ hg up 0
> $ hg merge quux ; hg commit -m 'merged quux'
> $ hg up 0
> $ touch baz ; hg add baz ; hg commit -m baz
> 
> $ hg log --graph --template '{rev}\t{branch}\t|{desc}\n'
> 
> @  5    default    |baz
> |
> | o  4    default    |merged quux
> |/|
> | _  3    quux    |close branch quux
> | |
> | o  2    quux    |branch quux
> | |
> | o  1    default    |bar
> |/
> o  0    default    |foo
> -------------------------------------------
> 
> Now, in this repo the branch default has 3 heads (1, 4, 5)
> two of which are topological heads (4, 5).
> 
> I expected this command to give me csets 4 and 5,
> but it only says "5". Expected?
> 
> -------------------------------------------
> $ hg heads --topo --rev "branch(default)" --template '{rev}\n'
> 5

Here, rev is expecting a single revision. So it turns "branch(default)"
into 5 (the highest numbered element of the set). Done.

> -------------------------------------------
> 
> More over, I expected this revset expression
> to give me all heads of default, namely 1, 4, 5,
> but it only says "4, 5". Expected?
> 
> -------------------------------------------
> $ hg log --rev "head() and branch(default)" --template '{rev}\n'
> 4
> 5

    "head()"
      Changeset is a named branch head.

1 is not a head of default because it has a descendant on default.

> -------------------------------------------
> 
> And I also believed that the two revset expressions
> 
> "head() and branch(default)"
> "heads(branch(default))"

    "heads(set)"
      Members of set with no children in set.

This predicate is purely about DAG topology and is unaware of named
branches.

-- 
Mathematics is the supreme nostalgia of our time.




More information about the Mercurial mailing list