Directory rename detection
==========================

Rename detection logic in diffcore-rename that checks for renames of
individual files is aggregated and analyzed in merge-recursive for cases
where combinations of renames indicate that a full directory has been
renamed.

Scope of abilities
------------------

It is perhaps easiest to start with an example:

  * When all of x/a, x/b and x/c have moved to z/a, z/b and z/c, it is
    likely that x/d added in the meantime would also want to move to z/d by
    taking the hint that the entire directory 'x' moved to 'z'.

More interesting possibilities exist, though, such as:

  * one side of history renames x -> z, and the other renames some file to
    x/e, causing the need for the merge to do a transitive rename.

  * one side of history renames x -> z, but also renames all files within
    x.  For example, x/a -> z/alpha, x/b -> z/bravo, etc.

  * both 'x' and 'y' being merged into a single directory 'z', with a
    directory rename being detected for both x->z and y->z.

  * not all files in a directory being renamed to the same location;
    i.e. perhaps most the files in 'x' are now found under 'z', but a few
    are found under 'w'.

  * a directory being renamed, which also contained a subdirectory that was
    renamed to some entirely different location.  (And perhaps the inner
    directory itself contained inner directories that were renamed to yet
    other locations).

  * combinations of the above; see t/t6043-merge-rename-directories.sh for
    various interesting cases.

Limitations -- applicability of directory renames
-------------------------------------------------

In order to prevent edge and corner cases resulting in either conflicts
that cannot be represented in the index or which might be too complex for
users to try to understand and resolve, a couple basic rules limit when
directory rename detection applies:

  1) If a given directory still exists on both sides of a merge, we do
     not consider it to have been renamed.

  2) If a subset of to-be-renamed files have a file or directory in the
     way (or would be in the way of each other), "turn off" the directory
     rename for those specific sub-paths and report the conflict to the
     user.

  3) If the other side of history did a directory rename to a path that
     your side of history renamed away, then ignore that particular
     rename from the other side of history for any implicit directory
     renames (but warn the user).

Limitations -- detailed rules and testcases
-------------------------------------------

t/t6043-merge-rename-directories.sh contains extensive tests and commentary
which generate and explore the rules listed above.  It also lists a few
additional rules:

  a) If renames split a directory into two or more others, the directory
     with the most renames, "wins".

  b) Avoid directory-rename-detection for a path, if that path is the
     source of a rename on either side of a merge.

  c) Only apply implicit directory renames to directories if the other side
     of history is the one doing the renaming.

Limitations -- support in different commands
--------------------------------------------

Directory rename detection is supported by 'merge' and 'cherry-pick'.
Other git commands which users might be surprised to see limited or no
directory rename detection support in:

  * diff

    Folks have requested in the past that `git diff` detect directory
    renames and somehow simplify its output.  It is not clear whether this
    would be desirable or how the output should be simplified, so this was
    simply not implemented.  Further, to implement this, directory rename
    detection logic would need to move from merge-recursive to
    diffcore-rename.

  * am

    git-am tries to avoid a full three way merge, instead calling
    git-apply.  That prevents us from detecting renames at all, which may
    defeat the directory rename detection.  There is a fallback, though; if
    the initial git-apply fails and the user has specified the -3 option,
    git-am will fall back to a three way merge.  However, git-am lacks the
    necessary information to do a "real" three way merge.  Instead, it has
    to use build_fake_ancestor() to get a merge base that is missing files
    whose rename may have been important to detect for directory rename
    detection to function.

  * rebase

    Since am-based rebases work by first generating a bunch of patches
    (which no longer record what the original commits were and thus don't
    have the necessary info from which we can find a real merge-base), and
    then calling git-am, this implies that am-based rebases will not always
    successfully detect directory renames either (see the 'am' section
    above).  merged-based rebases (rebase -m) and cherry-pick-based rebases
    (rebase -i) are not affected by this shortcoming, and fully support
    directory rename detection.
