Skip to content

Commit

Permalink
fsmonitor: return invalidated cache-entry count on directory event
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
jeffhostetler committed Mar 21, 2024
1 parent 9628e45 commit c3c49b4
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion fsmonitor.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
Expand Down

0 comments on commit c3c49b4

Please sign in to comment.