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

Re: git cat-file --batch surprising carriage return behavior

From
Jeff King <peff@peff.net>
Date
Oct 11, 2019, 06:21 UTC
Message-ID
<20191011062136.GA25741@sigill.intra.peff.net>
In-Reply-To
<20191009152851.GC19679@kitenet.net>
On Wed, Oct 09, 2019 at 11:28:51AM -0400, Joey Hess wrote:
Show 7 quoted lines
> > I suspect it's not entirely sufficient for clean input, though. You're
> > not feeding filenames but rather full "object names". I wouldn't be
> > surprised if we mis-parse "$rev:$path" when $path has "@{}" or similar
> > in it.
> 
> Nothing I've tried along the lines of "HEAD:{yesterday}" has misparsed
> the part after the colon as anything but a filename.

It's possible we've fixed them all. We definitely don't parse strictly left-to-right. The first thing we try to do is strip bits like ^{commit} off the end, before we even find the colon. But after doing so, we should generally be left with a resolvable name, and I think that uses the "basic" parser which will not allow colons. I.e., this:

  mkdir subdir
  echo whatever >subdir/file
  git add subdir
  git commit -m 'add directory'
  git show HEAD:subdir^{tree}

really does look for the file "subdir^{tree}" in HEAD, and not "HEAD:subdir" as a tree.

We have had bugs in the past; I'm thinking specifically of 8cd4249c4c (interpret_branch_name: always respect "namelen" parameter, 2014-01-15). But I couldn't find any problematic inputs after poking around for a few minutes.

> The one I can think of where there's a parse ambiguity is that while
> :foo gets file foo, :1:foo does not get file "1:foo". Instead it's
> treated as a stage number. Using either HEAD:1:foo or :./1:foo
> will avoid that ambiguity.
Yeah, that makes sense.
-Peff
Previous: Joey Hess
Message 4 of 4 in “git cat-file --batch surprising carriage return behavior”
  1. Joey HessOct 8, 2019
  2. Jeff KingOct 8, 2019
  3. Joey HessOct 9, 2019
  4. Jeff KingOct 11, 2019

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.