OSDN Git Service

pack-objects: use fixup_pack_header_footer()'s validation mode
authorNicolas Pitre <nico@cam.org>
Fri, 29 Aug 2008 20:08:00 +0000 (16:08 -0400)
committerJunio C Hamano <gitster@pobox.com>
Sat, 30 Aug 2008 04:51:27 +0000 (21:51 -0700)
When limiting the pack size, a new header has to be written to the
pack and a new SHA1 computed.  Make sure that the SHA1 of what is being
read back matches the SHA1 of what was written.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-pack-objects.c
csum-file.c

index 501f936..a02c673 100644 (file)
@@ -492,9 +492,9 @@ static void write_pack_file(void)
                } else if (nr_written == nr_remaining) {
                        sha1close(f, sha1, CSUM_FSYNC);
                } else {
-                       int fd = sha1close(f, NULL, 0);
+                       int fd = sha1close(f, sha1, 0);
                        fixup_pack_header_footer(fd, sha1, pack_tmp_name,
-                                                nr_written, NULL, 0);
+                                                nr_written, sha1, offset);
                        close(fd);
                }
 
index ace64f1..2838954 100644 (file)
@@ -42,11 +42,11 @@ int sha1close(struct sha1file *f, unsigned char *result, unsigned int flags)
                sha1flush(f, offset);
                f->offset = 0;
        }
+       SHA1_Final(f->buffer, &f->ctx);
+       if (result)
+               hashcpy(result, f->buffer);
        if (flags & (CSUM_CLOSE | CSUM_FSYNC)) {
                /* write checksum and close fd */
-               SHA1_Final(f->buffer, &f->ctx);
-               if (result)
-                       hashcpy(result, f->buffer);
                sha1flush(f, 20);
                if (flags & CSUM_FSYNC)
                        fsync_or_die(f->fd, f->name);