diff --no-index: refuse to compare stdin to a directory
When the user runs git diff --no-index file directory we follow the behavior of POSIX diff and rewrite the arguments as git diff --no-index file directory/file Doing that when "file" is "-" (which means "read from stdin") does not make sense so we should error out if the user asks us to compare "-" to a directory. This matches the behavior of GNU diff and diff on *BSD. Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
a9e066fa63
commit
498198453d
@ -218,11 +218,13 @@ static void fixup_paths(const char **path, struct strbuf *replacement)
|
||||
{
|
||||
unsigned int isdir0, isdir1;
|
||||
|
||||
if (path[0] == file_from_standard_input ||
|
||||
path[1] == file_from_standard_input)
|
||||
return;
|
||||
isdir0 = is_directory(path[0]);
|
||||
isdir1 = is_directory(path[1]);
|
||||
isdir0 = path[0] != file_from_standard_input && is_directory(path[0]);
|
||||
isdir1 = path[1] != file_from_standard_input && is_directory(path[1]);
|
||||
|
||||
if ((path[0] == file_from_standard_input && isdir1) ||
|
||||
(isdir0 && path[1] == file_from_standard_input))
|
||||
die(_("cannot compare stdin to a directory"));
|
||||
|
||||
if (isdir0 == isdir1)
|
||||
return;
|
||||
if (isdir0) {
|
||||
|
@ -205,4 +205,9 @@ test_expect_success POSIXPERM,SYMLINKS 'diff --no-index normalizes: mode not lik
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
test_expect_success 'diff --no-index refuses to diff stdin and a directory' '
|
||||
test_must_fail git diff --no-index -- - a </dev/null 2>err &&
|
||||
grep "fatal: cannot compare stdin to a directory" err
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Reference in New Issue
Block a user