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>
This commit is contained in:
parent
7647b17f1d
commit
6d2d9e8666
@ -189,6 +189,7 @@ static int handle_diff_files_args(struct rev_info *revs,
|
|||||||
!strcmp(argv[1], "--no-index")) {
|
!strcmp(argv[1], "--no-index")) {
|
||||||
revs->max_count = -2;
|
revs->max_count = -2;
|
||||||
revs->diffopt.exit_with_status = 1;
|
revs->diffopt.exit_with_status = 1;
|
||||||
|
revs->diffopt.no_index = 1;
|
||||||
}
|
}
|
||||||
else if (!strcmp(argv[1], "-q"))
|
else if (!strcmp(argv[1], "-q"))
|
||||||
*silent = 1;
|
*silent = 1;
|
||||||
@ -204,8 +205,10 @@ static int handle_diff_files_args(struct rev_info *revs,
|
|||||||
*/
|
*/
|
||||||
read_cache();
|
read_cache();
|
||||||
if (!is_in_index(revs->diffopt.paths[0]) ||
|
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->max_count = -2;
|
||||||
|
revs->diffopt.no_index = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -293,6 +296,7 @@ int setup_diff_no_index(struct rev_info *revs,
|
|||||||
else
|
else
|
||||||
revs->diffopt.paths = argv + argc - 2;
|
revs->diffopt.paths = argv + argc - 2;
|
||||||
revs->diffopt.nr_paths = 2;
|
revs->diffopt.nr_paths = 2;
|
||||||
|
revs->diffopt.no_index = 1;
|
||||||
revs->max_count = -2;
|
revs->max_count = -2;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -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))
|
if (handle_diff_files_args(revs, argc, argv, &silent_on_removed))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (revs->max_count == -2) {
|
if (revs->diffopt.no_index) {
|
||||||
if (revs->diffopt.nr_paths != 2)
|
if (revs->diffopt.nr_paths != 2)
|
||||||
return error("need two files/directories with --no-index");
|
return error("need two files/directories with --no-index");
|
||||||
if (queue_diff(&revs->diffopt, revs->diffopt.paths[0],
|
if (queue_diff(&revs->diffopt, revs->diffopt.paths[0],
|
||||||
|
3
diff.c
3
diff.c
@ -3185,7 +3185,8 @@ static void diffcore_skip_stat_unmatch(struct diff_options *diffopt)
|
|||||||
* to determine how many paths were dirty only
|
* to determine how many paths were dirty only
|
||||||
* due to stat info mismatch.
|
* due to stat info mismatch.
|
||||||
*/
|
*/
|
||||||
diffopt->skip_stat_unmatch++;
|
if (!diffopt->no_index)
|
||||||
|
diffopt->skip_stat_unmatch++;
|
||||||
diff_free_filepair(p);
|
diff_free_filepair(p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user