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

Re: RFC: Allow missing objects during packing

From
Shawn O. Pearce <spearce@spearce.org>
Date
Aug 12, 2008, 01:28 UTC
Message-ID
<20080812012859.GT26363@spearce.org>
In-Reply-To
<20080811224404.GQ26363@spearce.org>
Show 5 quoted lines
> Junio C Hamano <gitster@pobox.com> wrote:
> > If the check is only about a thin delta base that is not going to be
> > transmit, I'd agree.  But I do not see how you are distinguishing that
> > case and the case where an object you are actually sending is missing (in
> > which case we would want to error out, wouldn't we?)

Turns out to be pretty simple I think. We just delay the error handling for ->type < 0 until write_object(). If we get this far we know we wanted to include the object but we really don't have it. Up until that point its fine for us to get objects which are missing, we'll just wind up with a suboptimal pack.

We also don't even need to report the error from sha1_object_info as it already issues an error message (see sha1_loose_object_info).

--8<-- pack-objects: Allow missing base objects when creating thin packs

If we are building a thin pack and one of the base objects we would consider for deltification is missing its OK, the other side already has that base object. We may be able to get a delta from another object, or we can simply send the new object whole (no delta).

This allows a shallow clone which may have only commits and trees (but only partial blobs) to generate a pack for a fetch client, so the shallow clone only needs to contain objects that are not in the common base.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 builtin-pack-objects.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c
index 2dadec1..187cb19 100644
--- a/builtin-pack-objects.c
+++ b/builtin-pack-objects.c
@@ -243,6 +243,8 @@ static unsigned long write_object(struct sha1file *f,
 		crc32_begin(f);
 
 	type = entry->type;
+	if (type < 0)
+		die("unable to read object %s", sha1_to_hex(entry->idx.sha1));
 
 	/* write limit if limited packsize and not first object */
 	limit = pack_size_limit && nr_written ?
@@ -1096,9 +1098,6 @@ static void check_object(struct object_entry *entry)
 	}
 
 	entry->type = sha1_object_info(entry->idx.sha1, &entry->size);
-	if (entry->type < 0)
-		die("unable to get type of object %s",
-		    sha1_to_hex(entry->idx.sha1));
 }
 
 static int pack_offset_sort(const void *_a, const void *_b)
-- 
1.6.0.rc2.22.g71b99

-- 
Shawn.
Previous: Shawn O. PearceNext: Junio C Hamano
Message 4 of 12 in “RFC: Allow missing objects during packing”
  1. Shawn O. PearceAug 11, 2008
  2. Junio C HamanoAug 11, 2008
  3. Shawn O. PearceAug 11, 2008
  4. Shawn O. PearceAug 12, 2008
  5. Junio C HamanoAug 12, 2008
  6. Nicolas PitreAug 12, 2008
  7. pack-objects: Allow missing base objects when creating thin packsShawn O. Pearce, Aug 12, 2008
  8. Nicolas PitreAug 12, 2008
  9. Shawn O. PearceAug 12, 2008
  10. Nicolas PitreAug 12, 2008
  11. pack-objects: Allow missing base objects when creating thin packsShawn O. Pearce, Aug 12, 2008
  12. Nicolas PitreAug 12, 2008

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.