Re: [PATCH v2 07/16] dir: create untracked_cache_invalidate_trimmed_path()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Feb 23, 2024 at 03:18:11AM +0000, Jeff Hostetler via GitGitGadget wrote:
> From: Jeff Hostetler <jeffhostetler@xxxxxxxxxx>
>
> 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@xxxxxxxxxx>
> ---
>  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
>
>





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux