From: Philip Oakley Date: Sun, 05 Feb 2012 22:49:59 GMT Subject: Re: Specifying revisions in the future Message-ID: <178AA8FDB02246D9AA9416C0D54E51A8@PhilipOakley> In-Reply-To: <201202052324.59941.jnareb@gmail.com> From: "Jakub Narebski" To: "Andreas Schwab" Cc: "Matthieu Moy" ; ; Sent: Sunday, February 05, 2012 10:24 PM > On Sun, 5 Feb 2012, Andreas Schwab wrote: >> Jakub Narebski writes: >>> Andreas Schwab writes: >>>> Matthieu Moy writes: >>>> >>>>> "the successor of ", OTOH, is not well defined, since there >>>>> can >>>>> be several successors, and one can't order them reliably (you can't >>>>> really know the set of successors, because they can exist in different >>>>> repositories). >>>> >>>> Yet it would be nice to have a concise notation for "the nth successor >>>> of towards " (using --first-parent ordering when >>>> ambiguous). >>> >>> First, "the nth successor"... from which refs? >> >> From the first given commit towards the other given commit (the latter >> defaulting to HEAD). > > That helps some, but not all situations, see below. > >> > Second, `--first-parent' won't help here. Take for example the >> > following situation: >> > >> > ---X<---*<---.<---A >> > \ >> > \--.<---B >> > >> > X+3 is A or B? >> >> If "towards A" then it is A, if "towards B", it is B. In other words, >> to get the "nth successor of C1 towards C2" take the leftmost possible >> parent when walking from C2 to C1, then walk back n commits along this >> path. This way you should have an unambigous definition. > > Nope, still ambiguous: > > > > ---X<---*<---.<---A<---.<---M<--- > \ / > \--.<---B<------/ > > Is X+3 A or B? Though '--first-parent + towards N' is I think > unambiguous. > -- Is there also a rule missing for X+2, viewed from D, in this example X<---Y<---Z<--- \ \ A<----B<----C<----D as to which order the first parent rule should _not_ be applied when D's first parent chain doesn't reach X (it reaches A). Using 'oldest' first for alternate parent testing would make X+2 = B, whilst 'newest' first would make X+2=Z. I have used the chain order for 'newest/oldest', rather than commit date. (I'm sure that there already exists a natural rule in the dag walk order). Philip