Message ID | 99c0d3e0742c1a7e0f7608707402a772ec112716.1708658300.git.gitgitgadget@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | FSMonitor edge cases on case-insensitive file systems | expand |
On Fri, Feb 23, 2024 at 03:18:11AM +0000, Jeff Hostetler via GitGitGadget wrote: > From: Jeff Hostetler <jeffhostetler@github.com> > > 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> > --- > dir.c | 20 ++++++++++++++++++++ > dir.h | 7 +++++++ > 2 files changed, 27 insertions(+) > > diff --git a/dir.c b/dir.c > index ac699542302..1157f3e43fa 100644 > --- 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) > + return; /* should not happen */ Should a BUG() be used ? Or bug(), for the record: Please see Documentation/technical/api-error-handling.txt > + > + 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 98aa85fcc0e..45a7b9ec5f2 100644 > --- 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 *); > > -- > gitgitgadget > >
diff --git a/dir.c b/dir.c index ac699542302..1157f3e43fa 100644 --- 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) + return; /* should not happen */ + + 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 98aa85fcc0e..45a7b9ec5f2 100644 --- 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 *);