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

Re: git cat-file on a submodule

From
Jeff King <peff@peff.net>
Date
Jan 11, 2017, 12:53 UTC
Message-ID
<20170111125330.3skwxdleoooacts6@sigill.intra.peff.net>
In-Reply-To
<1484093500.17967.6.camel@frank>
On Tue, Jan 10, 2017 at 07:11:40PM -0500, David Turner wrote:
> Why does git cat-file -t $sha:foo, where foo is a submodule, not work?

Because "cat-file" is about inspecting items in the object database, and typically the submodule commit is not present in the superproject's database. So we cannot know its type. You can infer what it _should_ be from the surrounding tree, but you cannot actually do the object lookup.

Likewise, "git cat-file -t $sha1:Makefile" is not just telling you that we found a 100644 entry in the tree, so we expect a blob. It's resolving to a sha1, and then checking the type of that sha1 in the database. It _should_ be a blob, but if it isn't, then cat-file is the tool that should tell you that it is not.

> git rev-parse $sha:foo works.

Right. Because that command is about resolving a name to a sha1, which we can do even without the object.

> By "why", I mean "would anyone complain if I fixed it?"  FWIW, I think
> -p should just return the submodule's sha.

I'm not sure if I'm complaining or not. I can't immediately think of something that would be horribly broken. But it really feels like you are using the wrong tool, and patching the tool to handle this case will probably lead to weird cognitive dissonance down the road.

Maybe it would help to describe your use case more fully. If what you care about is the presumed type based on the surrounding tree, then maybe:

  git --literal-pathspecs ls-tree $sha -- foo
would be a better match.
-Peff
Previous: Stefan BellerNext: David Turner
Message 3 of 5 in “git cat-file on a submodule”
  1. David TurnerJan 11, 2017
  2. Stefan BellerJan 11, 2017
  3. Jeff KingJan 11, 2017
  4. David TurnerJan 11, 2017
  5. Junio C HamanoJan 11, 2017

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.