Hi Paul.  Thanks for your comments.

Paul Burba wrote:

> On Mon, Jul 9, 2012 at 4:16 PM, Julian Foad wrote:
[...]
>>    * The merging history of the root 'R' (the root node of the 
>> requested merge source and target trees), and of a subtree 'S' (a
>> single  node or subtree
> 
> Minor point: I've always considered a single node as a subtree as far
> as mergetracking goes; so file merges are "subtree merges". I mention
> this only because most of the code and testing comments I've written
> over the years assume this.  Again, it's a minor point, but AFAICT we
> can largely ignore the node type for this level of conversation.

Agreed; my parenthesis was meant to clarify this.

>>  whose merging history differs from that of the root node in a significant 
>> way).
> 
> You might want to define this a bit more explicitly.  I'm pretty sure
> I know what you mean, but it might not be clear to others.  Something
> like: "Mergeinfo[1] differences between the root and the subtree, if
> they exist, describe revisions that are inoperative on both the root
> and the subtree".

Yes, something like that.

> [1] "Mergeinfo" interpreted here in the most general way, including
> explicit mergeinfo, inherited mergeinfo, and implicit mergeinfo (i.e.
> natural history).

[...]
>>  CATEGORIZING SUBTREE MERGES: 1.7 Non-Reintegrate
>> 
>>  These cases are for a reintegrate merge A->B.
> 
> A bit confused, the category is "1.7 Non-Reintegrate" but the cases
> are for a reintegrate merge A->B?  Could you clarify?

Sorry, typo: I meant "These cases are for a non-reintegrate merge A->B."

> For example,
> given row 3 below, are we talking about the third merge here:
> 
> A--------------------------->
>   \            ^     \
> subtree      /       \
>   merge    subtree     ?
>      \     merge        \
>       V    /             V
> B--------------------------->

Yes, that.

> or here?
> 
> A--------------------------->
>   \            ^       ^
> subtree      /       /
>   merge    subtree   ?
>      \     merge    /
>       V    /       /
> B--------------------------->

Not that.

>>  In each row of this table, up to two Root merges are indicated, and their 
>> relative ordering is significant; similarly for Subtree merges.  The 
>> ordering of 
>> R merges relative to S merges is not significant.
>> 
>>      Root     | Subtree   | Behaviour
>>      ---------+-----------+-----------------------------------
>>   1. never    | same      | OK (not a subtree scenario)
>>               +-----------+-----------------------------------
>>   2.          | [S<] S>   | Merge all needed changes
>>               +-----------+-----------------------------------
>>   3.          | [S>] S<   | All needed; & some duplicates in S
>>      ---------+-----------+-----------------------------------
>>   4. [R<] R>  | same      | OK (not a subtree scenario)
>>               +-----------+-----------------------------------
>>   5.          | never     | Merge all needed changes
>>   6.          | [S<] S> * |
>>               +-----------+-----------------------------------
>>   7.          | [S>] S<   | All needed; & some duplicates in S
>>      ---------+-----------+-----------------------------------
>>   8. [R>] R<  | same      | All needed; & some duplicates in R
>>               |           | (not a subtree scenario)
>>               +-----------+-----------------------------------
>>   9.          | none      | All needed; & some duplicates in R
> 
> "none" is the same as "never" in the key right?

Yes; sorry, just another typo.

>>  10.          | [S<] S>   |
>>               +-----------+-----------------------------------
>>  11.          | [S>] S< * | All needed; & some duplicates in R and S
>>      ---------+-----------+-----------------------------------
>> 
>>  Key:
>>    *      -- S> not at same revision as R>, or S< not same as R<.
>>    R>     -- last complete Root merge in direction A->B.
>>    R<     -- last complete Root merge in direction B->A.
>>    never  -- never been merged in either direction since the YCA of A and B.
>>    [S<]   -- shorthand for both of the cases: no 'S<' merge and an 'S<' 
>> merge.
> 
> To clarify, do you mean "shorthand for *EITHER* of these cases: no
> 'S<' merge *OR* an 'S<' merge." right?

Yes, if you like.  The row expands to two cases: one with no 'S<' in this 
position, another with 'S<' in this position.  So this row:

  3.          | [S>] S<   | All needed; & some duplicates in S

expands to the following two cases:

  3a.         |      S<   | All needed; & some duplicates in S

(that is, subtree was never merged from A to B, but was merged from B to A)

  3b.         |  S>  S<   | All needed; & some duplicates in S

(that is, the last time the subtree was merged in the A to B direction was 
before the last time it was merged in the B to A direction).

> Either the last complete merge
> of the subtree was in the A->B direction or it was in the B->A
> direction.

No, I don't think that describes it.

> 
>>    duplicates -- changes that are already present in the target.
>> 
>>  Example:  Row 9 represents the case where the Root's last complete 
> merge was in the B->A direction, and its last complete A->B merge was 
> earlier or never; and the Subtree likewise.  The root's last complete merge 
> was before or after but not the same as the subtree's.
> 
> But the last subtree in row 9 is listed as "none"?  Did you mean row 
> 11?

Sigh, yes, you're right and I'm confusing.  (I edited the table after writing 
that.)

> I'll hold off on further comments/questions until I get the above straight.

Thanks.
- Julian

Reply via email to