mirror of
https://github.com/git/git
synced 2024-08-25 02:35:46 +00: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:
parent
67e5a5ece4
commit
9d5ab9625d
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue