diff options
author | David Aguilar <davvid@gmail.com> | 2015-10-29 11:19:01 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-10-29 13:43:10 -0700 |
commit | cfe2d4be9126f03d8ca198f9da36762cdf59b52f (patch) | |
tree | 546f848b68df28848aa5cf03b1100f89f63f679c /git-difftool.perl | |
parent | 441c4a40173fe1ee8a5c0094e587dfc47e2a6460 (diff) | |
download | git-cfe2d4be9126f03d8ca198f9da36762cdf59b52f.tar.gz |
difftool: ignore symbolic links in use_wt_file
The caller is preparing a narrowed-down copy of the working tree and
this function is asked if the path should be included in that copy.
If we say yes, the path from the working tree will be either symlinked
or copied into the narrowed-down copy.
For any path that is a symbolic link, the caller later fixes up the
narrowed-down copy by unlinking the path and replacing it with a
regular file it writes out that mimics the way how "git diff"
compares symbolic links.
Let's answer "no, you do not want to copy/symlink the working tree
file" for all symbolic links from this function, as we know the
result will not be used because it will be overwritten anyway.
Incidentally, this also stops the function from feeding a symbolic
link in the working tree to hash-object, which is a wrong thing to
do to begin with. The link may be pointing at a directory, or worse
may be dangling (both would be noticed as an error). Even if the
link points at a regular file, hashing the contents of a file that
is pointed at by the link is not correct (Git hashes the contents of
the link itself, not the pointee).
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, 1 insertions, 3 deletions
diff --git a/git-difftool.perl b/git-difftool.perl index 7df7c8a9a7..488d14b153 100755 --- a/git-difftool.perl +++ b/git-difftool.perl @@ -70,9 +70,7 @@ sub use_wt_file my ($repo, $workdir, $file, $sha1) = @_; my $null_sha1 = '0' x 40; - if (! -e "$workdir/$file") { - # If the file doesn't exist in the working tree, we cannot - # use it. + if (-l "$workdir/$file" || ! -e _) { return (0, $null_sha1); } |