Merge branch 'bp/fsmonitor'
We learned to talk to watchman to speed up "git status" and other operations that need to see which paths have been modified. * bp/fsmonitor: fsmonitor: preserve utf8 filenames in fsmonitor-watchman log fsmonitor: read entirety of watchman output fsmonitor: MINGW support for watchman integration fsmonitor: add a performance test fsmonitor: add a sample integration script for Watchman fsmonitor: add test cases for fsmonitor extension split-index: disable the fsmonitor extension when running the split index test fsmonitor: add a test tool to dump the index extension update-index: add fsmonitor support to update-index ls-files: Add support in ls-files to display the fsmonitor valid bit fsmonitor: add documentation for the fsmonitor extension. fsmonitor: teach git to optionally utilize a file system monitor to speed up detecting new or changed files. update-index: add a new --force-write-index option preload-index: add override to enable testing preload-index bswap: add 64 bit endianness helper get_be64
This commit is contained in:
27
dir.c
27
dir.c
@ -18,6 +18,7 @@
|
||||
#include "utf8.h"
|
||||
#include "varint.h"
|
||||
#include "ewah/ewok.h"
|
||||
#include "fsmonitor.h"
|
||||
|
||||
/*
|
||||
* Tells read_directory_recursive how a file or directory should be treated.
|
||||
@ -1733,17 +1734,23 @@ static int valid_cached_dir(struct dir_struct *dir,
|
||||
if (!untracked)
|
||||
return 0;
|
||||
|
||||
if (stat(path->len ? path->buf : ".", &st)) {
|
||||
invalidate_directory(dir->untracked, untracked);
|
||||
memset(&untracked->stat_data, 0, sizeof(untracked->stat_data));
|
||||
return 0;
|
||||
}
|
||||
if (!untracked->valid ||
|
||||
match_stat_data_racy(istate, &untracked->stat_data, &st)) {
|
||||
if (untracked->valid)
|
||||
/*
|
||||
* With fsmonitor, we can trust the untracked cache's valid field.
|
||||
*/
|
||||
refresh_fsmonitor(istate);
|
||||
if (!(dir->untracked->use_fsmonitor && untracked->valid)) {
|
||||
if (stat(path->len ? path->buf : ".", &st)) {
|
||||
invalidate_directory(dir->untracked, untracked);
|
||||
fill_stat_data(&untracked->stat_data, &st);
|
||||
return 0;
|
||||
memset(&untracked->stat_data, 0, sizeof(untracked->stat_data));
|
||||
return 0;
|
||||
}
|
||||
if (!untracked->valid ||
|
||||
match_stat_data_racy(istate, &untracked->stat_data, &st)) {
|
||||
if (untracked->valid)
|
||||
invalidate_directory(dir->untracked, untracked);
|
||||
fill_stat_data(&untracked->stat_data, &st);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (untracked->check_only != !!check_only) {
|
||||
|
Reference in New Issue
Block a user