Merge branch 'ks/difftool-dir-diff-copy-fix' into maint
authorJunio C Hamano <gitster@pobox.com>
Thu, 27 Jun 2013 21:38:22 +0000 (14:38 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 27 Jun 2013 21:38:23 +0000 (14:38 -0700)
* ks/difftool-dir-diff-copy-fix:
difftool --dir-diff: allow changing any clean working tree file

git-difftool.perl
t/t7800-difftool.sh
index 8a7520553776ec9d0c8d38526041dd37742d3bc1..e57d3d1295a5ba0a9c02c19df512c909a0631baa 100755 (executable)
@@ -85,13 +85,9 @@ sub exit_cleanup
 
 sub use_wt_file
 {
-       my ($repo, $workdir, $file, $sha1, $symlinks) = @_;
+       my ($repo, $workdir, $file, $sha1) = @_;
        my $null_sha1 = '0' x 40;
 
-       if ($sha1 ne $null_sha1 and not $symlinks) {
-               return 0;
-       }
-
        if (! -e "$workdir/$file") {
                # If the file doesn't exist in the working tree, we cannot
                # use it.
@@ -213,8 +209,7 @@ sub setup_dir_diff
 
                if ($rmode ne $null_mode) {
                        my ($use, $wt_sha1) = use_wt_file($repo, $workdir,
-                                                         $dst_path, $rsha1,
-                                                         $symlinks);
+                                                         $dst_path, $rsha1);
                        if ($use) {
                                push @working_tree, $dst_path;
                                $wtindex .= "$rmode $wt_sha1\t$dst_path\0";
index d46f0411bd9a08b38035c8fb5ca611723b8baed2..2418528487624bf5497af71c9958a84e0a50328f 100755 (executable)
@@ -385,6 +385,25 @@ test_expect_success PERL,SYMLINKS 'difftool --dir-diff --symlink without unstage
        test_cmp actual expect
 '
 
+write_script modify-right-file <<\EOF
+echo "new content" >"$2/file"
+EOF
+
+run_dir_diff_test 'difftool --dir-diff syncs worktree with unstaged change' '
+       test_when_finished git reset --hard &&
+       echo "orig content" >file &&
+       git difftool -d $symlinks --extcmd "$(pwd)/modify-right-file" branch &&
+       echo "new content" >expect &&
+       test_cmp expect file
+'
+
+run_dir_diff_test 'difftool --dir-diff syncs worktree without unstaged change' '
+       test_when_finished git reset --hard &&
+       git difftool -d $symlinks --extcmd "$(pwd)/modify-right-file" branch &&
+       echo "new content" >expect &&
+       test_cmp expect file
+'
+
 write_script modify-file <<\EOF
 echo "new content" >file
 EOF