fsmonitor: return invalidated cache-entry count on non-directory event
Teach the refresh callback helper function for unqualified FSEvents (pathnames without a trailing slash) to return the number of cache-entries that were invalided in response to the event. This will be used in a later commit to help determine if the observed pathname was (possibly) case-incorrect when (on a case-insensitive file system). Signed-off-by: Jeff Hostetler <jeffhostetler@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
558d146d13
commit
9e34e56280
10
fsmonitor.c
10
fsmonitor.c
@ -196,8 +196,10 @@ static size_t handle_path_with_trailing_slash(
|
|||||||
* do not know it is case-correct or -incorrect.
|
* do not know it is case-correct or -incorrect.
|
||||||
*
|
*
|
||||||
* Assume it is case-correct and try an exact match.
|
* Assume it is case-correct and try an exact match.
|
||||||
|
*
|
||||||
|
* Return the number of cache-entries that we invalidated.
|
||||||
*/
|
*/
|
||||||
static void handle_path_without_trailing_slash(
|
static size_t handle_path_without_trailing_slash(
|
||||||
struct index_state *istate, const char *name, int pos)
|
struct index_state *istate, const char *name, int pos)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -218,7 +220,9 @@ static void handle_path_without_trailing_slash(
|
|||||||
* at that directory. (That is, assume no D/F conflicts.)
|
* at that directory. (That is, assume no D/F conflicts.)
|
||||||
*/
|
*/
|
||||||
istate->cache[pos]->ce_flags &= ~CE_FSMONITOR_VALID;
|
istate->cache[pos]->ce_flags &= ~CE_FSMONITOR_VALID;
|
||||||
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
|
size_t nr_in_cone;
|
||||||
struct strbuf work_path = STRBUF_INIT;
|
struct strbuf work_path = STRBUF_INIT;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -232,8 +236,10 @@ static void handle_path_without_trailing_slash(
|
|||||||
strbuf_add(&work_path, name, strlen(name));
|
strbuf_add(&work_path, name, strlen(name));
|
||||||
strbuf_addch(&work_path, '/');
|
strbuf_addch(&work_path, '/');
|
||||||
pos = index_name_pos(istate, work_path.buf, work_path.len);
|
pos = index_name_pos(istate, work_path.buf, work_path.len);
|
||||||
handle_path_with_trailing_slash(istate, work_path.buf, pos);
|
nr_in_cone = handle_path_with_trailing_slash(
|
||||||
|
istate, work_path.buf, pos);
|
||||||
strbuf_release(&work_path);
|
strbuf_release(&work_path);
|
||||||
|
return nr_in_cone;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user