Trivial merge rules
===================

This document describes the outcomes of the trivial merge logic in read-tree.

One-way merge
-------------

This replaces the index with a different tree, keeping the stat info
for entries that don't change, and allowing -u to make the minimum
required changes to the working tree to have it match.

Entries marked '+' have stat information. Spaces marked '*' don't
affect the result.

   index   tree    result
   -----------------------
   *       (empty) (empty)
   (empty) tree    tree
   index+  tree    tree
   index+  index   index+

Two-way merge
-------------

It is permitted for the index to lack an entry; this does not prevent
any case from applying.

If the index exists, it is an error for it not to match either the old
or the result.

If multiple cases apply, the one used is listed first.

A result which changes the index is an error if the index is not empty
and not up-to-date.

Entries marked '+' have stat information. Spaces marked '*' don't
affect the result.

 case  index   old     new     result
 -------------------------------------
 0/2   (empty) *       (empty) (empty)
 1/3   (empty) *       new     new
 4/5   index+  (empty) (empty) index+
 6/7   index+  (empty) index   index+
 10    index+  index   (empty) (empty)
 14/15 index+  old     old     index+
 18/19 index+  old     index   index+
 20    index+  index   new     new

Three-way merge
---------------

It is permitted for the index to lack an entry; this does not prevent
any case from applying.

If the index exists, it is an error for it not to match either the
head or (if the merge is trivial) the result.

If multiple cases apply, the one used is listed first.

A result of "no merge" means that index is left in stage 0, ancest in
stage 1, head in stage 2, and remote in stage 3 (if any of these are
empty, no entry is left for that stage). Otherwise, the given entry is
left in stage 0, and there are no other entries.

A result of "no merge" is an error if the index is not empty and not
up-to-date.

*empty* means that the tree must not have a directory-file conflict
 with the entry.

For multiple ancestors, a '+' means that this case applies even if
only one ancestor or remote fits; a '^' means all of the ancestors
must be the same.

case  ancest    head    remote    result
----------------------------------------
1     (empty)+  (empty) (empty)   (empty)
2ALT  (empty)+  *empty* remote    remote
2     (empty)^  (empty) remote    no merge
3ALT  (empty)+  head    *empty*   head
3     (empty)^  head    (empty)   no merge
4     (empty)^  head    remote    no merge
5ALT  *         head    head      head
6     ancest+   (empty) (empty)   no merge
8     ancest^   (empty) ancest    no merge
7     ancest+   (empty) remote    no merge
10    ancest^   ancest  (empty)   no merge
9     ancest+   head    (empty)   no merge
16    anc1/anc2 anc1    anc2      no merge
13    ancest+   head    ancest    head
14    ancest+   ancest  remote    remote
11    ancest+   head    remote    no merge

Only #2ALT and #3ALT use *empty*, because these are the only cases
where there can be conflicts that didn't exist before. Note that we
allow directory-file conflicts between things in different stages
after the trivial merge.

A possible alternative for #6 is (empty), which would make it like
#1. This is not used, due to the likelihood that it arises due to
moving the file to multiple different locations or moving and deleting
it in different branches.

Case #1 is included for completeness, and also in case we decide to
put on '+' markings; any path that is never mentioned at all isn't
handled.

Note that #16 is when both #13 and #14 apply; in this case, we refuse
the trivial merge, because we can't tell from this data which is
right. This is a case of a reverted patch (in some direction, maybe
multiple times), and the right answer depends on looking at crossings
of history or common ancestors of the ancestors.

Note that, between #6, #7, #9, and #11, all cases not otherwise
covered are handled in this table.

For #8 and #10, there is alternative behavior, not currently
implemented, where the result is (empty). As currently implemented,
the automatic merge will generally give this effect.
