]> git.ipfire.org Git - thirdparty/git.git/commitdiff
fsmonitor: return invalidated cache-entry count on non-directory event
authorJeff Hostetler <jeffhostetler@github.com>
Mon, 26 Feb 2024 21:39:22 +0000 (21:39 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 6 Mar 2024 17:10:00 +0000 (09:10 -0800)
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>
fsmonitor.c

index a51c17cda70b3715e53016c57a449f4c8dabf826..c16ed5d87585fcdaf5f2cbb3521b95faace4edca 100644 (file)
@@ -196,8 +196,10 @@ static size_t handle_path_with_trailing_slash(
  * do not know it is case-correct or -incorrect.
  *
  * 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)
 {
        /*
@@ -218,7 +220,9 @@ static void handle_path_without_trailing_slash(
                 * at that directory. (That is, assume no D/F conflicts.)
                 */
                istate->cache[pos]->ce_flags &= ~CE_FSMONITOR_VALID;
+               return 1;
        } else {
+               size_t nr_in_cone;
                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_addch(&work_path, '/');
                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);
+               return nr_in_cone;
        }
 }