Ramkumar Ramachandra <artag...@gmail.com> writes:

So after a long IRC discussion trying to hash out what you *want* it to
do, here's the summary for everyone else.  This test is wrong on several
counts.  For simplicity I'll denote by M the subtree merge, called
$new_h in the actual test.

> +test_expect_failure 'log pathspec in tree read into prefix' '
> +     git checkout --orphan subtree &&
> +     git rm -rf . &&
> +     echo foodle >ichi &&

'ichi' also exists in M^1 because you reused a name from another test.
So rename detection will never pair the eventual 'bar/ichi' with this
'ichi', because the 'ichi' path was *modified*, not deleted, w.r.t. M^1.

Just to clarify, rename detection is based on seeing

  A foo
  D bar

and changing that to

  R bar -> foo

assuming the blobs were reasonably similar.  And indeed, *copy*
detection (-C) is able to figure it out, because it considers all paths
that were modified as possible candidates for a copy source.

But --follow only uses rename detection.

> +     git add ichi &&
> +     test_tick &&
> +     git commit -m foom &&
> +     echo moodle >unrelated &&
> +     git add unrelated &&
> +     test_tick &&
> +     git commit -m quux &&
> +     subtree_h=$(git rev-parse HEAD) &&
> +     git checkout master &&
> +     orig_h=$(git rev-parse HEAD) &&
> +     git read-tree --prefix=bar $subtree_h &&

You need to supply a trailing / for the prefix, it's not implied.

> +     new_t=$(git write-tree) &&
> +     new_h=$(echo "new subtree" |
> +     git commit-tree $new_t -p $orig_h -p $subtree_h) &&
> +     git reset --hard $new_h &&
> +     (
> +             cd bar &&
> +             git log --oneline ichi >../actual

You need to use --follow, as otherwise the pathspec filtering is
considered fixed.

Note that as discussed in the rest of the thread, --follow is fairly
limited and doesn't *really* solve the problem.  But it does work
assuming the filenames are different and you only have one subtree
merge, like in this case.

Thomas Rast
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to