mirror of
https://github.com/git/git
synced 2024-10-02 14:45:21 +00:00
fsmonitor: return invalidated cache-entry count on directory event
Teach the refresh callback helper function for directory FSEvents to return the number of cache-entries that were invalidated in response to a directory event. This will be used in a later commit to help determine if the observed pathname in the FSEvent was a (possibly) case-incorrect directory prefix (on a case-insensitive filesystem) of one or more actual cache-entries. If there exists at least one case-insensitive prefix match, then we can assume that the directory is a (case-incorrect) prefix of at least one tracked item rather than a completely unknown/untracked file or directory. Signed-off-by: Jeff Hostetler <jeffhostetler@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
7c97174dcd
commit
a52482036c
14
fsmonitor.c
14
fsmonitor.c
|
@ -253,11 +253,20 @@ static void handle_path_without_trailing_slash(
|
|||
* same way and just invalidate the cache-entry and the untracked
|
||||
* cache (and in this case, the forward cache-entry scan won't find
|
||||
* anything and it doesn't hurt to let it run).
|
||||
*
|
||||
* Return the number of cache-entries that we invalidated. We will
|
||||
* use this later to determine if we need to attempt a second
|
||||
* case-insensitive search on case-insensitive file systems. That is,
|
||||
* if the search using the observed-case in the FSEvent yields any
|
||||
* results, we assume the prefix is case-correct. If there are no
|
||||
* matches, we still don't know if the observed path is simply
|
||||
* untracked or case-incorrect.
|
||||
*/
|
||||
static void handle_path_with_trailing_slash(
|
||||
static size_t handle_path_with_trailing_slash(
|
||||
struct index_state *istate, const char *name, int pos)
|
||||
{
|
||||
int i;
|
||||
size_t nr_in_cone = 0;
|
||||
|
||||
/*
|
||||
* Mark the untracked cache dirty for this directory path
|
||||
|
@ -276,7 +285,10 @@ static void handle_path_with_trailing_slash(
|
|||
if (!starts_with(istate->cache[i]->name, name))
|
||||
break;
|
||||
istate->cache[i]->ce_flags &= ~CE_FSMONITOR_VALID;
|
||||
nr_in_cone++;
|
||||
}
|
||||
|
||||
return nr_in_cone;
|
||||
}
|
||||
|
||||
static void fsmonitor_refresh_callback(struct index_state *istate, char *name)
|
||||
|
|
Loading…
Reference in a new issue