difftool: Check all return codes from compare()

Handle the case where compare() is unable to read its inputs.
Emit a warning so that the user knows that something went wrong.

We may later want to restructure the code so that we can inhibit
tempdir cleanup when this condition is reached.

Signed-off-by: David Aguilar <davvid@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
David Aguilar 2012-07-24 20:14:23 -07:00 committed by Junio C Hamano
parent 7c7584b970
commit 283abb2c8a

View file

@ -370,7 +370,16 @@ sub dir_diff
# external tool did not replace the original link with a file.
for my $file (@worktree) {
next if $symlinks && -l "$b/$file";
if (-f "$b/$file" && compare("$b/$file", "$workdir/$file")) {
next if ! -f "$b/$file";
my $diff = compare("$b/$file", "$workdir/$file");
if ($diff == 0) {
next;
} elsif ($diff == -1) {
my $errmsg = "warning: Could not compare ";
$errmsg += "'$b/$file' with '$workdir/$file'\n";
warn $errmsg;
} elsif ($diff == 1) {
copy("$b/$file", "$workdir/$file") or die $!;
my $mode = stat("$b/$file")->mode;
chmod($mode, "$workdir/$file") or die $!;