Merge branch 'da/difftool-dir-diff-fix'
authorJunio C Hamano <gitster@pobox.com>
Mon, 19 Dec 2016 22:45:33 +0000 (14:45 -0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 19 Dec 2016 22:45:33 +0000 (14:45 -0800)
"git difftool --dir-diff" had a minor regression when started from
a subdirectory, which has been fixed.

* da/difftool-dir-diff-fix:
difftool: fix dir-diff index creation when in a subdirectory

git-difftool.perl
t/t7800-difftool.sh
index a5790d03a075884ffe93dbff782b28ec87263051..959822d5f31f60c3b3366292c973e26f0948c45a 100755 (executable)
@@ -182,6 +182,10 @@ sub setup_dir_diff
                }
        }
 
+       # 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";
index 70a2de461af58119f507a915104ba139dd0245df..99d4123461096196c11368864c1f8c3d524d5c1a 100755 (executable)
@@ -374,6 +374,7 @@ test_expect_success PERL 'setup change in subdirectory' '
        echo master >sub/sub &&
        git add sub/sub &&
        git commit -m "added sub/sub" &&
+       git tag v1 &&
        echo test >>file &&
        echo test >>sub/sub &&
        git add file sub/sub &&
@@ -409,12 +410,49 @@ run_dir_diff_test 'difftool --dir-diff ignores --prompt' '
        grep file output
 '
 
-run_dir_diff_test 'difftool --dir-diff from subdirectory' '
+run_dir_diff_test 'difftool --dir-diff branch from subdirectory' '
        (
                cd sub &&
                git difftool --dir-diff $symlinks --extcmd ls branch >output &&
-               grep sub output &&
-               grep file output
+               # "sub" must only exist in "right"
+               # "file" and "file2" must be listed in both "left" and "right"
+               test "1" = $(grep sub output | wc -l) &&
+               test "2" = $(grep file"$" output | wc -l) &&
+               test "2" = $(grep file2 output | wc -l)
+       )
+'
+
+run_dir_diff_test 'difftool --dir-diff v1 from subdirectory' '
+       (
+               cd sub &&
+               git difftool --dir-diff $symlinks --extcmd ls v1 >output &&
+               # "sub" and "file" exist in both v1 and HEAD.
+               # "file2" is unchanged.
+               test "2" = $(grep sub output | wc -l) &&
+               test "2" = $(grep file output | wc -l) &&
+               test "0" = $(grep file2 output | wc -l)
+       )
+'
+
+run_dir_diff_test 'difftool --dir-diff branch from subdirectory w/ pathspec' '
+       (
+               cd sub &&
+               git difftool --dir-diff $symlinks --extcmd ls branch -- .>output &&
+               # "sub" only exists in "right"
+               # "file" and "file2" must not be listed
+               test "1" = $(grep sub output | wc -l) &&
+               test "0" = $(grep file output | wc -l)
+       )
+'
+
+run_dir_diff_test 'difftool --dir-diff v1 from subdirectory w/ pathspec' '
+       (
+               cd sub &&
+               git difftool --dir-diff $symlinks --extcmd ls v1 -- .>output &&
+               # "sub" exists in v1 and HEAD
+               # "file" is filtered out by the pathspec
+               test "2" = $(grep sub output | wc -l) &&
+               test "0" = $(grep file output | wc -l)
        )
 '