diff options
author | Junio C Hamano <gitster@pobox.com> | 2013-06-06 12:18:47 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-06-06 12:18:47 -0700 |
commit | 2fc0c022e60f54be55d6065b9a8abccdc0f67bab (patch) | |
tree | d3d9bf5d28501b57fd4130c05f9da212c0784936 | |
parent | 5adb37410198bc1d2413df9100bfd5c9f5d844f2 (diff) | |
parent | 32eaf1de7f79c4ba09f3de3261c84e52e0a67af5 (diff) | |
download | git-2fc0c022e60f54be55d6065b9a8abccdc0f67bab.tar.gz git-2fc0c022e60f54be55d6065b9a8abccdc0f67bab.tar.xz |
Merge branch 'ks/difftool-dir-diff-copy-fix'
"difftool --dir-diff" did not copy back changes made by the
end-user in the diff tool backend to the working tree in some
cases.
* ks/difftool-dir-diff-copy-fix:
difftool --dir-diff: allow changing any clean working tree file
-rwxr-xr-x | git-difftool.perl | 9 | ||||
-rwxr-xr-x | t/t7800-difftool.sh | 19 |
2 files changed, 21 insertions, 7 deletions
diff --git a/git-difftool.perl b/git-difftool.perl index 8a7520553..e57d3d129 100755 --- a/git-difftool.perl +++ b/git-difftool.perl @@ -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 @@ EOF 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"; diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh index d46f0411b..241852848 100755 --- a/t/t7800-difftool.sh +++ b/t/t7800-difftool.sh @@ -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 |