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

Re: [PATCH] describe: confirm that blobs actually exist

From
Jeff King <peff@peff.net>
Date
Feb 12, 2018, 17:29 UTC
Message-ID
<20180212172921.GA5004@sigill.intra.peff.net>
In-Reply-To
<20180212172306.GA4918@sigill.intra.peff.net>
On Mon, Feb 12, 2018 at 12:23:06PM -0500, Jeff King wrote:
Show 8 quoted lines
> We can fix this by replacing the lookup_blob() call with a
> check of the true type via sha1_object_info(). This is not
> quite as efficient as we could possibly make this check. We
> know in most cases that the object was already parsed in the
> earlier commit lookup, so we could call lookup_object(),
> which does auto-create, and check the resulting struct's
> type (or NULL).  However it's not worth the fragility nor
> code complexity to save a single object lookup.

By the way, I did notice one other inefficiency here: we always call lookup_commit_reference_gently() first, which will call parse_object(). So if you were to "git describe" an enormous blob, we'd load the whole thing into memory for no purpose. We could structure this as:

  type = sha1_object_info(oid.hash, NULL);
  if (type == OBJ_BLOB)
          describe_blob(&oid);
  else if (lookup_commit_reference_gently(&oid, 1))
          describe_commit(&oid);
  else
          describe("neither commit nor blob");

That incurs an extra object lookup for the commit case, but potentially saves reading the blob. We could have our cake and eat it, too, if sha1_file.c had a function like "parse this object unless it's a blob, in which case just fill in the type info".

Arguably that should be the default when parse_object() is called on a blob, but I suspect some older code may rely on parse_object() to check that the object is present and consistent.

Anyway, I don't know that it's really worth caring about too much, but just something I noticed.

Maybe a #leftoverbits if somebody cares.
-Peff
Previous: Jeff KingNext: Stefan Beller
Message 2 of 3 in “describe: confirm that blobs actually exist”
  1. describe: confirm that blobs actually existJeff King, Feb 12, 2018
  2. Jeff KingFeb 12, 2018
  3. Stefan BellerFeb 12, 2018

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.