git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/4] pathspec: do exact comparison on the leading non-wildcard part

From
Junio C Hamano <gitster@pobox.com>
Date
Nov 19, 2012, 20:54 UTC
Message-ID
<7vzk2duw3m.fsf@alter.siamese.dyndns.org>
In-Reply-To
<1353229989-13075-3-git-send-email-pclouds@gmail.com>
Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:
Show 28 quoted lines
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---
>  dir.c       | 18 +++++++++++++++++-
>  dir.h       |  8 ++++++++
>  tree-walk.c |  6 ++++--
>  3 files changed, 29 insertions(+), 3 deletions(-)
>
> diff --git a/dir.c b/dir.c
> index c391d46..e4e6ca1 100644
> --- a/dir.c
> +++ b/dir.c
> @@ -34,6 +34,21 @@ int fnmatch_icase(const char *pattern, const char *string, int flags)
>  	return fnmatch(pattern, string, flags | (ignore_case ? FNM_CASEFOLD : 0));
>  }
>  
> +inline int git_fnmatch(const char *pattern, const char *string,
> +		       int flags, int prefix)
> +{
> +	int fnm_flags = 0;
> +	if (flags & GF_PATHNAME)
> +		fnm_flags |= FNM_PATHNAME;
> +	if (prefix > 0) {
> +		if (strncmp(pattern, string, prefix))
> +			return FNM_NOMATCH;
> +		pattern += prefix;
> +		string += prefix;
> +	}
> +	return fnmatch(pattern, string, fnm_flags);
How would we protect this optimization from future breakages?

Once we start using FNM_PERIOD, this becomes unsafe, as the simple part in "foo/bar*baz" would be "foo/bar" with remainder "*baz".

The pattern "foo/bar*baz" should match "foo/bar.baz" with FNM_PERIOD set. But with this optimization, fnmatch is fed pattern="*baz", string=".baz" and they would not match.

Previous: Nguyễn Thái Ngọc DuyNext: Nguyen Thai Ngoc Duy
Message 5 of 11 in “Some pathspec wildcard optimization”
  1. 0/4 Some pathspec wildcard optimizationNguyễn Thái Ngọc Duy, Nov 18, 2012
  2. 1/4 pathspec: save the non-wildcard length partNguyễn Thái Ngọc Duy, Nov 18, 2012
  3. Junio C HamanoNov 19, 2012
  4. 2/4 pathspec: do exact comparison on the leading non-wildcard partNguyễn Thái Ngọc Duy, Nov 18, 2012
  5. Junio C HamanoNov 19, 2012
  6. Nguyen Thai Ngoc DuyNov 20, 2012
  7. 3/4 pathspec: apply "*.c" optimization from excludeNguyễn Thái Ngọc Duy, Nov 18, 2012
  8. Junio C HamanoNov 19, 2012
  9. Nguyen Thai Ngoc DuyNov 20, 2012
  10. Junio C HamanoNov 20, 2012
  11. 4/4 tree_entry_interesting: do basedir compare on wildcard patterns when possibleNguyễn Thái Ngọc Duy, Nov 18, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.