1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-11 06:36:10 +02:00

[PATCH] Emit base objects of a delta chain when the delta is output.

Deltas are useless by themselves and when you use them you need to get
to their base objects.  A base object should inherit recency from the
most recent deltified object that is based on it and that is what this
patch teaches git-pack-objects.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Junio C Hamano 2005-06-28 17:49:27 -07:00 committed by Linus Torvalds
parent 67e5a5ece4
commit 9d5ab9625d

View File

@ -118,6 +118,23 @@ static unsigned long write_object(struct sha1file *f, struct object_entry *entry
return hdrlen + datalen;
}
static unsigned long write_one(struct sha1file *f,
struct object_entry *e,
unsigned long offset)
{
if (e->offset)
/* offset starts from header size and cannot be zero
* if it is written already.
*/
return offset;
e->offset = offset;
offset += write_object(f, e);
/* if we are delitified, write out its base object. */
if (e->delta)
offset = write_one(f, e->delta, offset);
return offset;
}
static void write_pack_file(void)
{
int i;
@ -135,11 +152,9 @@ static void write_pack_file(void)
hdr.hdr_entries = htonl(nr_objects);
sha1write(f, &hdr, sizeof(hdr));
offset = sizeof(hdr);
for (i = 0; i < nr_objects; i++) {
struct object_entry *entry = objects + i;
entry->offset = offset;
offset += write_object(f, entry);
}
for (i = 0; i < nr_objects; i++)
offset = write_one(f, objects + i, offset);
sha1close(f, pack_file_sha1, 1);
mb = offset >> 20;
offset &= 0xfffff;