Re: [PATCH 04/12] fsmonitor: refactor refresh callback on directory events
From: Patrick Steinhardt <hidden>
Date: 2024-02-15 09:32:13
On Tue, Feb 13, 2024 at 08:52:13PM +0000, Jeff Hostetler via GitGitGadget wrote:
quoted hunk ↗ jump to hunk
From: Jeff Hostetler <redacted> Signed-off-by: Jeff Hostetler <redacted> --- fsmonitor.c | 52 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 30 insertions(+), 22 deletions(-)diff --git a/fsmonitor.c b/fsmonitor.c index f670c509378..b1ef01bf3cd 100644 --- a/fsmonitor.c +++ b/fsmonitor.c@@ -183,6 +183,35 @@ static int query_fsmonitor_hook(struct repository *r, return result; } +static void fsmonitor_refresh_callback_slash( + struct index_state *istate, const char *name, int len, int pos)
`len` should be `size_t` as it tracks the length of the name. This is a preexisting issue already because `fsmonitor_refresh_callback()` assigns `int len = strlen(name)`, which is wrong.
+{
+ int i;`i` is used to iterate through `istate->cache_nr`, which is an `unsigned int` and not an `int`. I really wish we would compile the Git code base with `-Wconversion`, but that's a rather big undertaking. Anyway, none of these issues are new as you merely move the code into a new function. Patrick
quoted hunk ↗ jump to hunk
+ /* + * The daemon can decorate directory events, such as + * moves or renames, with a trailing slash if the OS + * FS Event contains sufficient information, such as + * MacOS. + * + * Use this to invalidate the entire cone under that + * directory. + * + * We do not expect an exact match because the index + * does not normally contain directory entries, so we + * start at the insertion point and scan. + */ + if (pos < 0) + pos = -pos - 1; + + /* Mark all entries for the folder invalid */ + for (i = pos; i < istate->cache_nr; i++) { + if (!starts_with(istate->cache[i]->name, name)) + break; + istate->cache[i]->ce_flags &= ~CE_FSMONITOR_VALID; + } +} + static void fsmonitor_refresh_callback(struct index_state *istate, char *name) { int i, len = strlen(name);@@ -193,28 +222,7 @@ static void fsmonitor_refresh_callback(struct index_state *istate, char *name) name, pos); if (name[len - 1] == '/') { - /* - * The daemon can decorate directory events, such as - * moves or renames, with a trailing slash if the OS - * FS Event contains sufficient information, such as - * MacOS. - * - * Use this to invalidate the entire cone under that - * directory. - * - * We do not expect an exact match because the index - * does not normally contain directory entries, so we - * start at the insertion point and scan. - */ - if (pos < 0) - pos = -pos - 1; - - /* Mark all entries for the folder invalid */ - for (i = pos; i < istate->cache_nr; i++) { - if (!starts_with(istate->cache[i]->name, name)) - break; - istate->cache[i]->ce_flags &= ~CE_FSMONITOR_VALID; - } + fsmonitor_refresh_callback_slash(istate, name, len, pos); /* * We need to remove the traling "/" from the path-- gitgitgadget
Attachments
- signature.asc [application/pgp-signature] 833 bytes