Browse Source

diff: squelch empty diffs even more

When we compare two non-tracked files, or explicitly
specify --no-index, the suggestion to run git-status
is not helpful.

The patch adds a new diff_options bitfield member, no_index, that
is used instead of the special value of -2 of the rev_info field
max_count to indicate that the index is not to be used.  This makes
it possible to pass that flag down to diffcore_skip_stat_unmatch(),
which only has one diff_options parameter.

This could even become a cleanup if we removed all assignments of
max_count to a value of -2 (viz. replacement of a magic value with
a self-documenting field name) but I didn't dare to do that so late
in the rc game..

The no_index bit, if set, then tells diffcore_skip_stat_unmatch()
to not account for any skipped stat-mismatches, which avoids the
suggestion to run git-status.

Signed-off-by: Rene Scharfe <rene.scharfe@lsfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
René Scharfe 18 years ago committed by Junio C Hamano
parent
commit
6d2d9e8666
  1. 8
      diff-lib.c
  2. 1
      diff.c
  3. 1
      diff.h

8
diff-lib.c

@ -189,6 +189,7 @@ static int handle_diff_files_args(struct rev_info *revs, @@ -189,6 +189,7 @@ static int handle_diff_files_args(struct rev_info *revs,
!strcmp(argv[1], "--no-index")) {
revs->max_count = -2;
revs->diffopt.exit_with_status = 1;
revs->diffopt.no_index = 1;
}
else if (!strcmp(argv[1], "-q"))
*silent = 1;
@ -204,8 +205,10 @@ static int handle_diff_files_args(struct rev_info *revs, @@ -204,8 +205,10 @@ static int handle_diff_files_args(struct rev_info *revs,
*/
read_cache();
if (!is_in_index(revs->diffopt.paths[0]) ||
!is_in_index(revs->diffopt.paths[1]))
!is_in_index(revs->diffopt.paths[1])) {
revs->max_count = -2;
revs->diffopt.no_index = 1;
}
}

/*
@ -293,6 +296,7 @@ int setup_diff_no_index(struct rev_info *revs, @@ -293,6 +296,7 @@ int setup_diff_no_index(struct rev_info *revs,
else
revs->diffopt.paths = argv + argc - 2;
revs->diffopt.nr_paths = 2;
revs->diffopt.no_index = 1;
revs->max_count = -2;
return 0;
}
@ -304,7 +308,7 @@ int run_diff_files_cmd(struct rev_info *revs, int argc, const char **argv) @@ -304,7 +308,7 @@ int run_diff_files_cmd(struct rev_info *revs, int argc, const char **argv)
if (handle_diff_files_args(revs, argc, argv, &silent_on_removed))
return -1;

if (revs->max_count == -2) {
if (revs->diffopt.no_index) {
if (revs->diffopt.nr_paths != 2)
return error("need two files/directories with --no-index");
if (queue_diff(&revs->diffopt, revs->diffopt.paths[0],

1
diff.c

@ -3185,6 +3185,7 @@ static void diffcore_skip_stat_unmatch(struct diff_options *diffopt) @@ -3185,6 +3185,7 @@ static void diffcore_skip_stat_unmatch(struct diff_options *diffopt)
* to determine how many paths were dirty only
* due to stat info mismatch.
*/
if (!diffopt->no_index)
diffopt->skip_stat_unmatch++;
diff_free_filepair(p);
}

1
diff.h

@ -60,6 +60,7 @@ struct diff_options { @@ -60,6 +60,7 @@ struct diff_options {
color_diff_words:1,
has_changes:1,
quiet:1,
no_index:1,
allow_external:1,
exit_with_status:1;
int context;

Loading…
Cancel
Save