diff --git a/diff.c b/diff.c index 7b5601de2f..eeeca39c30 100644 --- a/diff.c +++ b/diff.c @@ -1357,6 +1357,9 @@ static void emit_diff_symbol_from_struct(struct diff_options *o, int len = eds->len; unsigned flags = eds->flags; + if (o->dry_run) + return; + switch (s) { case DIFF_SYMBOL_NO_LF_EOF: context = diff_get_color_opt(o, DIFF_CONTEXT); @@ -4426,7 +4429,7 @@ static void run_external_diff(const struct external_diff *pgm, { struct child_process cmd = CHILD_PROCESS_INIT; struct diff_queue_struct *q = &diff_queued_diff; - int quiet = !(o->output_format & DIFF_FORMAT_PATCH); + int quiet = !(o->output_format & DIFF_FORMAT_PATCH) || o->dry_run; int rc; /* diff --git a/t/t4013-diff-various.sh b/t/t4013-diff-various.sh index cfeec239e0..3a47b2f7cb 100755 --- a/t/t4013-diff-various.sh +++ b/t/t4013-diff-various.sh @@ -661,6 +661,27 @@ test_expect_success 'diff -I: ignore matching file' ' test_grep ! "file1" actual ' +test_expect_success 'diff -I: ignore all content changes' ' + test_when_finished "git rm -f file1 file2" && + : >file1 && + git add file1 && + : >file2 && + git add file2 && + + rm -f file1 file2 && + mkdir file2 && + test_diff_no_content_changes () { + git diff $1 --ignore-blank-lines -I".*" >actual && + test_line_count = 2 actual && + test_grep "file1" actual && + test_grep "file2" actual && + test_grep ! "diff --git" actual + } && + test_diff_no_content_changes "--raw" && + test_diff_no_content_changes "--name-only" && + test_diff_no_content_changes "--name-status" +' + # check_prefix # check only lines with paths to avoid dependency on exact oid/contents check_prefix () {