git-diff: resurrect the traditional empty "diff --git" behaviour
The warning message to suggest "Consider running git-status" from "git-diff" that we experimented with during the 1.5.3 cycle turns out to be a bad idea. It robbed cache-dirty information from people who valued it, while still asking users to run "update-index --refresh". It was hoped that the new behaviour would at least have some educational value, but not showing the cache-dirty paths like before meant that the user would not even know easily which paths were cache-dirty, and it made the need to refresh the index look like even more unnecessary chore. This commit reinstates the traditional behaviour, but with a twist. By default, the empty "diff --git" output is totally squelched out from "git diff" output. At the end of the command, it automatically runs "update-index --refresh" as needed, without even bothering the user. In other words, people who do not care about the cache-dirtyness do not even have to see the warning. The traditional behaviour to see the stat-dirty output and to bypassing the overhead of content comparison can be specified by setting the configuration variable diff.autorefreshindex to false. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
@ -188,6 +188,30 @@ void add_head(struct rev_info *revs)
|
||||
add_pending_object(revs, obj, "HEAD");
|
||||
}
|
||||
|
||||
static void refresh_index_quietly(void)
|
||||
{
|
||||
struct lock_file *lock_file;
|
||||
int fd;
|
||||
|
||||
lock_file = xcalloc(1, sizeof(struct lock_file));
|
||||
fd = hold_locked_index(lock_file, 0);
|
||||
if (fd < 0)
|
||||
return;
|
||||
discard_cache();
|
||||
read_cache();
|
||||
refresh_cache(REFRESH_QUIET|REFRESH_UNMERGED);
|
||||
if (active_cache_changed) {
|
||||
if (write_cache(fd, active_cache, active_nr) ||
|
||||
close(fd) ||
|
||||
commit_locked_index(lock_file))
|
||||
; /*
|
||||
* silently ignore it -- we haven't mucked
|
||||
* with the real index.
|
||||
*/
|
||||
}
|
||||
rollback_lock_file(lock_file);
|
||||
}
|
||||
|
||||
int cmd_diff(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
int i;
|
||||
@ -222,7 +246,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
|
||||
prefix = setup_git_directory_gently(&nongit);
|
||||
git_config(git_diff_ui_config);
|
||||
init_revisions(&rev, prefix);
|
||||
rev.diffopt.skip_stat_unmatch = 1;
|
||||
rev.diffopt.skip_stat_unmatch = !!diff_auto_refresh_index;
|
||||
|
||||
if (!setup_diff_no_index(&rev, argc, argv, nongit, prefix))
|
||||
argc = 0;
|
||||
@ -346,11 +370,7 @@ 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))
|
||||
printf("Warning: %d path%s touched but unmodified. "
|
||||
"Consider running git-status.\n",
|
||||
rev.diffopt.skip_stat_unmatch - 1,
|
||||
rev.diffopt.skip_stat_unmatch == 2 ? "" : "s");
|
||||
if (1 < rev.diffopt.skip_stat_unmatch)
|
||||
refresh_index_quietly();
|
||||
return result;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user