Fix bug importing from a special remote into a subdirectory more than one level deep
authorJoey Hess <joeyh@joeyh.name>
Fri, 26 Mar 2021 20:01:55 +0000 (16:01 -0400)
committerSean Whitton <spwhitton@spwhitton.name>
Wed, 14 Apr 2021 17:04:08 +0000 (10:04 -0700)
commit03c7dd4373e8ad7e51cbf42e9b1f96ad5ded18f5
treef4f5f490a182d37e043c0b02c92e263d2eaea5ff
parent442725ec417cfa03f468ffa3f8d8a96ad42083f0
Fix bug importing from a special remote into a subdirectory more than one level deep

Which generated unusual git trees that could confuse git merge,
since they incorrectly had 2 subtrees with the same name.

Root of the bug was a) not testing that at all! but also
b) confusing graftdirs, which contains eg "foo/bar" with
non-recursively read trees, which would contain eg "bar"
when reading a subtree of "foo".

It's worth noting that Annex.Import uses graftTree, but it really
shouldn't have needed to. Eg, when importing into foo/bar from a remote,
it's enough to generate a tree of foo/bar/x, foo/bar/y, and does not
include other files that are at the top of the master branch. It uses
graftTree, so it does include the other files, as well as the foo/bar
tree. git merge will do the same thing for both trees. With that said,
switching it away from graftTree would result in another import
generating a new commit that seems to delete files that were there in a
previous commit, so it probably has to keep using graftTree since it
used it before.
Git/Tree.hs