* [PATCH] diff: squelch empty diffs even more
@ 2007-08-14 21:09 René Scharfe
2007-08-14 21:29 ` Junio C Hamano
0 siblings, 1 reply; 5+ messages in thread
From: René Scharfe @ 2007-08-14 21:09 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Git Mailing List
When we compare two non-tracked files or explicitly specify
--no-index then the suggestion to run git-status is not helpful.
max_count is set to -2 in these cases; don't print the warning
then.
Signed-off-by: Rene Scharfe <rene.scharfe@lsfire.ath.cx>
---
builtin-diff.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/builtin-diff.c b/builtin-diff.c
index 6ed7b68..b2fd8c8 100644
--- a/builtin-diff.c
+++ b/builtin-diff.c
@@ -346,8 +346,8 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
if (rev.diffopt.exit_with_status)
result = rev.diffopt.has_changes;
- if ((rev.diffopt.output_format & DIFF_FORMAT_PATCH)
- && (1 < rev.diffopt.skip_stat_unmatch))
+ if ((rev.diffopt.output_format & DIFF_FORMAT_PATCH) &&
+ 1 < rev.diffopt.skip_stat_unmatch && rev.max_count != -2)
printf("Warning: %d path%s touched but unmodified. "
"Consider running git-status.\n",
rev.diffopt.skip_stat_unmatch - 1,
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] diff: squelch empty diffs even more
2007-08-14 21:09 [PATCH] diff: squelch empty diffs even more René Scharfe
@ 2007-08-14 21:29 ` Junio C Hamano
2007-08-14 22:41 ` René Scharfe
0 siblings, 1 reply; 5+ messages in thread
From: Junio C Hamano @ 2007-08-14 21:29 UTC (permalink / raw)
To: René Scharfe; +Cc: Git Mailing List
René Scharfe <rene.scharfe@lsrfire.ath.cx> writes:
> When we compare two non-tracked files or explicitly specify
> --no-index then the suggestion to run git-status is not helpful.
That observation is correct but how does skip_stat_unmatch count
up in such a case? Shouldn't diffcore_skip_stat_unmatch()
function be taught about such a "fake" filepair that did not
come from git, and ignore the stat differences?
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] diff: squelch empty diffs even more
2007-08-14 21:29 ` Junio C Hamano
@ 2007-08-14 22:41 ` René Scharfe
2007-08-14 23:52 ` Junio C Hamano
0 siblings, 1 reply; 5+ messages in thread
From: René Scharfe @ 2007-08-14 22:41 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Git Mailing List
Junio C Hamano schrieb:
> René Scharfe <rene.scharfe@lsrfire.ath.cx> writes:
>
>> When we compare two non-tracked files or explicitly specify
>> --no-index then the suggestion to run git-status is not helpful.
>
> That observation is correct but how does skip_stat_unmatch count
> up in such a case? Shouldn't diffcore_skip_stat_unmatch()
> function be taught about such a "fake" filepair that did not
> come from git, and ignore the stat differences?
Hmm. Like this?
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.
René
---
diff-lib.c | 8 ++++++--
diff.c | 3 ++-
diff.h | 1 +
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/diff-lib.c b/diff-lib.c
index 92c0e39..f5568c3 100644
--- a/diff-lib.c
+++ b/diff-lib.c
@@ -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,
*/
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,
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)
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],
diff --git a/diff.c b/diff.c
index f884de7..97cc5bc 100644
--- a/diff.c
+++ b/diff.c
@@ -3185,7 +3185,8 @@ static void diffcore_skip_stat_unmatch(struct diff_options *diffopt)
* to determine how many paths were dirty only
* due to stat info mismatch.
*/
- diffopt->skip_stat_unmatch++;
+ if (!diffopt->no_index)
+ diffopt->skip_stat_unmatch++;
diff_free_filepair(p);
}
}
diff --git a/diff.h b/diff.h
index de21f8e..4546aad 100644
--- a/diff.h
+++ b/diff.h
@@ -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;
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] diff: squelch empty diffs even more
2007-08-14 22:41 ` René Scharfe
@ 2007-08-14 23:52 ` Junio C Hamano
2007-08-15 14:47 ` Johannes Schindelin
0 siblings, 1 reply; 5+ messages in thread
From: Junio C Hamano @ 2007-08-14 23:52 UTC (permalink / raw)
To: René Scharfe; +Cc: Git Mailing List
René Scharfe <rene.scharfe@lsrfire.ath.cx> writes:
> Hmm. Like this?
>
> 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.
Yeah, I've always hated that -2 magic hack, and I think this is
the right way to go. Dscho?
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] diff: squelch empty diffs even more
2007-08-14 23:52 ` Junio C Hamano
@ 2007-08-15 14:47 ` Johannes Schindelin
0 siblings, 0 replies; 5+ messages in thread
From: Johannes Schindelin @ 2007-08-15 14:47 UTC (permalink / raw)
To: Junio C Hamano; +Cc: René Scharfe, Git Mailing List
Hi,
On Tue, 14 Aug 2007, Junio C Hamano wrote:
> Yeah, I've always hated that -2 magic hack, and I think this is the
> right way to go. Dscho?
Right. It is how I should have done it to begin with. If I find the time
(and nobody beats be to it), I'll try to find the rest of the places
tomorrow, and send a fix.
Ciao,
Dscho
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-08-15 14:47 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-08-14 21:09 [PATCH] diff: squelch empty diffs even more René Scharfe
2007-08-14 21:29 ` Junio C Hamano
2007-08-14 22:41 ` René Scharfe
2007-08-14 23:52 ` Junio C Hamano
2007-08-15 14:47 ` Johannes Schindelin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox