]> git.ipfire.org Git - thirdparty/git.git/commitdiff
dir: create untracked_cache_invalidate_trimmed_path()
authorJeff Hostetler <jeffhostetler@github.com>
Mon, 26 Feb 2024 21:39:17 +0000 (21:39 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 26 Feb 2024 23:34:02 +0000 (15:34 -0800)
Create a wrapper function for untracked_cache_invalidate_path()
that silently trims a trailing slash, if present, before calling
the wrapped function.

The untracked cache expects to be called with a pathname that
does not contain a trailing slash.  This can make it inconvenient
for callers that have a directory path.  Lets hide this complexity.

This will be used by a later commit in the FSMonitor code which
may receive directory pathnames from an FSEvent.

Signed-off-by: Jeff Hostetler <jeffhostetler@github.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
dir.c
dir.h

diff --git a/dir.c b/dir.c
index ac699542302cece1d1aea426cd4cc37940e6fead..20ebe4cba2687e027765876ddc57b086fa85dd71 100644 (file)
--- a/dir.c
+++ b/dir.c
@@ -3918,6 +3918,26 @@ void untracked_cache_invalidate_path(struct index_state *istate,
                                 path, strlen(path));
 }
 
+void untracked_cache_invalidate_trimmed_path(struct index_state *istate,
+                                            const char *path,
+                                            int safe_path)
+{
+       size_t len = strlen(path);
+
+       if (!len)
+               BUG("untracked_cache_invalidate_trimmed_path given zero length path");
+
+       if (path[len - 1] != '/') {
+               untracked_cache_invalidate_path(istate, path, safe_path);
+       } else {
+               struct strbuf tmp = STRBUF_INIT;
+
+               strbuf_add(&tmp, path, len - 1);
+               untracked_cache_invalidate_path(istate, tmp.buf, safe_path);
+               strbuf_release(&tmp);
+       }
+}
+
 void untracked_cache_remove_from_index(struct index_state *istate,
                                       const char *path)
 {
diff --git a/dir.h b/dir.h
index 98aa85fcc0ee357a2df50014008c3e5ec12acb25..45a7b9ec5f2d52214e8000dbd68913056a1a2d77 100644 (file)
--- a/dir.h
+++ b/dir.h
@@ -576,6 +576,13 @@ int cmp_dir_entry(const void *p1, const void *p2);
 int check_dir_entry_contains(const struct dir_entry *out, const struct dir_entry *in);
 
 void untracked_cache_invalidate_path(struct index_state *, const char *, int safe_path);
+/*
+ * Invalidate the untracked-cache for this path, but first strip
+ * off a trailing slash, if present.
+ */
+void untracked_cache_invalidate_trimmed_path(struct index_state *,
+                                            const char *path,
+                                            int safe_path);
 void untracked_cache_remove_from_index(struct index_state *, const char *);
 void untracked_cache_add_to_index(struct index_state *, const char *);