diff options
author | David Aguilar <davvid@gmail.com> | 2016-12-07 02:16:08 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2016-12-11 16:18:31 -0800 |
commit | 86defcbe3f6c54a31dc898cb3adb4a3b25f1eb1a (patch) | |
tree | 3694210813ff6fc37f6e074763bc65b7c88d3a14 /git-difftool.perl | |
parent | 32b8c581ecf35e73bebe2c6e9f6de617807b7f91 (diff) | |
download | git-86defcbe3f6c54a31dc898cb3adb4a3b25f1eb1a.tar.gz |
difftool: fix dir-diff index creation when in a subdirectory
9ec26e7977 (difftool: fix argument handling in subdirs, 2016-07-18)
corrected how path arguments are handled in a subdirectory, but
it introduced a regression in how entries outside of the
subdirectory are handled by dir-diff.
When preparing the right-side of the diff we only include the
changed paths in the temporary area.
The left side of the diff is constructed from a temporary
index that is built from the same set of changed files, but it
was being constructed from within the subdirectory. This is a
problem because the indexed paths are toplevel-relative, and
thus they were not getting added to the index.
Teach difftool to chdir to the toplevel of the repository before
preparing its temporary indexes. This ensures that all of the
toplevel-relative paths are valid.
Add test cases to more thoroughly exercise this scenario.
Reported-by: Frank Becker <fb@mooflu.com>
Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-difftool.perl')
-rwxr-xr-x | git-difftool.perl | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/git-difftool.perl b/git-difftool.perl index a5790d03a0..959822d5f3 100755 --- a/git-difftool.perl +++ b/git-difftool.perl @@ -182,6 +182,10 @@ EOF } } + # Go to the root of the worktree so that the left index files + # are properly setup -- the index is toplevel-relative. + chdir($workdir); + # Setup temp directories my $tmpdir = tempdir('git-difftool.XXXXX', CLEANUP => 0, TMPDIR => 1); my $ldir = "$tmpdir/left"; |