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

Re: [PATCH] Restore ls-remote reference pattern matching

From
Sergey Vlasov <vsu@altlinux.ru>
Date
Dec 9, 2007, 13:26 UTC
Message-ID
<20071209162632.a16bfd6e.vsu@altlinux.ru>
In-Reply-To
<7v8x44tl7q.fsf@gitster.siamese.dyndns.org>
On Sat, 08 Dec 2007 22:51:05 -0800 Junio C Hamano wrote:
[...]
Show 8 quoted lines
> 	for pat
> 	do
> 		case "/$path" in
> 		*/$pat )
> 			match=yes
> 			break ;;
> 		esac
> 	done
[...]
Show 28 quoted lines
> +/*
> + * pattern is a list of tail-part of accepted refnames.  Is there one
> + * among then that is a suffix of the path?  Directory boundary must
> + * be honored when doing this match.  IOW, patterns "master" and
> + * "sa/master" both match path "refs/hold/sa/master".  On the other
> + * hand, path "refs/hold/foosa/master" is matched by "master" but not
> + * by "sa/master".
> + */
> +
> +static int tail_match(const char **pattern, const char *path)
> +{
> +	int pathlen;
> +	const char *p;
> +
> +	if (!*pattern)
> +		return 1; /* no restriction */
> +
> +	for (pathlen = strlen(path); (p = *pattern); pattern++) {
> +		int pfxlen = pathlen - strlen(p);
> +		if (pfxlen < 0)
> +			continue; /* pattern is longer, will never match */
> +		if (strcmp(path + pfxlen, p))
> +			continue; /* no tail match */
> +		if (!pfxlen || path[pfxlen - 1] == '/')
> +			return 1; /* fully match at directory boundary */
> +	}
> +	return 0;
> +}

This still does not match the behavior of the old shell implementation completely - because $pat was not quoted, shell pattern characters in $pat worked, and things like "git ls-remote . 'refs/heads/something--*'" were possible (and used in some of my scripts), so a full fnmatch() call is still needed.

Previous: Junio C HamanoNext: Eyvind Bernhardsen
Message 5 of 10 in “Restore ls-remote reference pattern matching”
  1. Restore ls-remote reference pattern matchingDaniel Barkalow, Dec 9, 2007
  2. Junio C HamanoDec 9, 2007
  3. Daniel BarkalowDec 9, 2007
  4. Junio C HamanoDec 9, 2007
  5. Sergey VlasovDec 9, 2007
  6. Eyvind BernhardsenDec 9, 2007
  7. Junio C HamanoDec 9, 2007
  8. Junio C HamanoDec 9, 2007
  9. Eyvind BernhardsenDec 10, 2007
  10. Junio C HamanoDec 10, 2007

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.