summaryrefslogtreecommitdiff
path: root/pack-objects.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-28 22:15:57 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-28 22:15:57 -0700
commit01247d87421d621db3866ce7f2124784fc7f46e5 (patch)
tree713dd383b2677965636ec93bb694dcdd8269227c /pack-objects.c
parent69a2d426f0d249bca2c6f754b3c1283c0fa72fd4 (diff)
downloadgit-01247d87421d621db3866ce7f2124784fc7f46e5.tar.gz
Make git pack files use little-endian size encoding
This makes it match the new delta encoding, and admittedly makes the code easier to follow. This also updates the PACK file version to 2, since this (and the delta encoding change in the previous commit) are incompatible with the old format.
Diffstat (limited to 'pack-objects.c')
-rw-r--r--pack-objects.c29
1 files changed, 8 insertions, 21 deletions
diff --git a/pack-objects.c b/pack-objects.c
index feee5600b9..fc969e342a 100644
--- a/pack-objects.c
+++ b/pack-objects.c
@@ -51,32 +51,19 @@ static void *delta_against(void *buf, unsigned long size, struct object_entry *e
*/
static int encode_header(enum object_type type, unsigned long size, unsigned char *hdr)
{
- int n = 1, i;
+ int n = 1;
unsigned char c;
if (type < OBJ_COMMIT || type > OBJ_DELTA)
die("bad type %d", type);
- /*
- * Shift the size up by 7 bits at a time,
- * until you get bits in the "high four".
- * That will be our beginning. We'll have
- * four size bits in 28..31, then groups
- * of seven in 21..27, 14..20, 7..13 and
- * finally 0..6.
- */
- if (size) {
- n = 5;
- while (!(size & 0xfe000000)) {
- size <<= 7;
- n--;
- }
- }
- c = (type << 4) | (size >> 28);
- for (i = 1; i < n; i++) {
+ c = (type << 4) | (size & 15);
+ size >>= 4;
+ while (size) {
*hdr++ = c | 0x80;
- c = (size >> 21) & 0x7f;
- size <<= 7;
+ c = size & 0x7f;
+ size >>= 7;
+ n++;
}
*hdr = c;
return n;
@@ -148,7 +135,7 @@ static void write_pack_file(void)
else
f = sha1create("%s.%s", base_name, "pack");
hdr.hdr_signature = htonl(PACK_SIGNATURE);
- hdr.hdr_version = htonl(1);
+ hdr.hdr_version = htonl(PACK_VERSION);
hdr.hdr_entries = htonl(nr_objects);
sha1write(f, &hdr, sizeof(hdr));
offset = sizeof(hdr);