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

Re: [PATCH] exclude: fix a bug in prefix comparison optimization

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 14, 2012, 17:36 UTC
Message-ID
<7v8vb9yn09.fsf@alter.siamese.dyndns.org>
In-Reply-To
<1350214522-3242-1-git-send-email-pclouds@gmail.com>
Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
Show 7 quoted lines
> When "namelen" becomes zero at this stage, we have matched the fixed
> part, but whether it actually matches the pattern still depends on the
> pattern in "exclude". As demonstrated in t3001, path "three/a.3"
> exists and it matches the "three/a.3" part in pattern "three/a.3[abc]",
> but that does not mean a true match.
>
> Don't be too optimistic and let fnmatch() do the job.

Yeah, the existing code is correct _only_ if the pattern part can match an empty string (e.g. "three/a.3*") and this is a correct fix.

With your "teach attr.c match the same optimization as dir.c" series, you would need something like this

diff --git i/attr.c w/attr.c
index 6d39406..528e935 100644
--- i/attr.c
+++ w/attr.c
@@ -710,7 +710,7 @@ static int path_matches(const char *pathname, int pathlen,
 	 * if the non-wildcard part is longer than the remaining
 	 * pathname, surely it cannot match.
 	 */
-	if (!namelen || prefix > namelen)
+	if (prefix > namelen)
 		return 0;
 	if (baselen != 0)
 		baselen++;

Comparing the corresponding code in dir.c, there is no "compare the
literal prefix part with strcmp() before doing the fnmatch()"
optimization.  Intended?

(warning: I haven't had my caffeine yet)
Previous: Nguyễn Thái Ngọc DuyNext: Junio C Hamano
Message 2 of 5 in “exclude: fix a bug in prefix comparison optimization”
  1. exclude: fix a bug in prefix comparison optimizationNguyễn Thái Ngọc Duy, Oct 14, 2012
  2. Junio C HamanoOct 14, 2012
  3. Junio C HamanoOct 14, 2012
  4. Nguyen Thai Ngoc DuyOct 15, 2012
  5. Junio C HamanoOct 15, 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.