Merge branch 'nk/diff-files-vs-fsmonitor'
"git diff" and other commands that share the same machinery to compare with working tree files have been taught to take advantage of the fsmonitor data when available. * nk/diff-files-vs-fsmonitor: p7519-fsmonitor: add a git add benchmark p7519-fsmonitor: refactor to avoid code duplication perf lint: add make test-lint to perf tests t/perf: add fsmonitor perf test for git diff t/perf/p7519-fsmonitor.sh: warm cache on first git status t/perf/README: elaborate on output format fsmonitor: use fsmonitor data in `git diff`
This commit is contained in:
15
diff-lib.c
15
diff-lib.c
@ -98,6 +98,8 @@ int run_diff_files(struct rev_info *revs, unsigned int option)
|
||||
|
||||
diff_set_mnemonic_prefix(&revs->diffopt, "i/", "w/");
|
||||
|
||||
refresh_fsmonitor(istate);
|
||||
|
||||
if (diff_unmerged_stage < 0)
|
||||
diff_unmerged_stage = 2;
|
||||
entries = istate->cache_nr;
|
||||
@ -198,8 +200,17 @@ int run_diff_files(struct rev_info *revs, unsigned int option)
|
||||
if (ce_uptodate(ce) || ce_skip_worktree(ce))
|
||||
continue;
|
||||
|
||||
/* If CE_VALID is set, don't look at workdir for file removal */
|
||||
if (ce->ce_flags & CE_VALID) {
|
||||
/*
|
||||
* When CE_VALID is set (via "update-index --assume-unchanged"
|
||||
* or via adding paths while core.ignorestat is set to true),
|
||||
* the user has promised that the working tree file for that
|
||||
* path will not be modified. When CE_FSMONITOR_VALID is true,
|
||||
* the fsmonitor knows that the path hasn't been modified since
|
||||
* we refreshed the cached stat information. In either case,
|
||||
* we do not have to stat to see if the path has been removed
|
||||
* or modified.
|
||||
*/
|
||||
if (ce->ce_flags & (CE_VALID | CE_FSMONITOR_VALID)) {
|
||||
changed = 0;
|
||||
newmode = ce->ce_mode;
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user