Browse Source

write_pack_header(): a helper function

Factor out a small logic out of the private write_pack_file() function
in builtin/pack-objects.c

Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Junio C Hamano 14 years ago
parent
commit
c0ad465725
  1. 9
      builtin/pack-objects.c
  2. 12
      pack-write.c
  3. 2
      pack.h

9
builtin/pack-objects.c

@ -571,7 +571,6 @@ static void write_pack_file(void)
uint32_t i = 0, j; uint32_t i = 0, j;
struct sha1file *f; struct sha1file *f;
off_t offset; off_t offset;
struct pack_header hdr;
uint32_t nr_remaining = nr_result; uint32_t nr_remaining = nr_result;
time_t last_mtime = 0; time_t last_mtime = 0;
struct object_entry **write_order; struct object_entry **write_order;
@ -596,11 +595,9 @@ static void write_pack_file(void)
f = sha1fd(fd, pack_tmp_name); f = sha1fd(fd, pack_tmp_name);
} }


hdr.hdr_signature = htonl(PACK_SIGNATURE); offset = write_pack_header(f, nr_remaining);
hdr.hdr_version = htonl(PACK_VERSION); if (!offset)
hdr.hdr_entries = htonl(nr_remaining); die_errno("unable to write pack header");
sha1write(f, &hdr, sizeof(hdr));
offset = sizeof(hdr);
nr_written = 0; nr_written = 0;
for (; i < nr_objects; i++) { for (; i < nr_objects; i++) {
struct object_entry *e = write_order[i]; struct object_entry *e = write_order[i];

12
pack-write.c

@ -178,6 +178,18 @@ const char *write_idx_file(const char *index_name, struct pack_idx_entry **objec
return index_name; return index_name;
} }


off_t write_pack_header(struct sha1file *f, uint32_t nr_entries)
{
struct pack_header hdr;

hdr.hdr_signature = htonl(PACK_SIGNATURE);
hdr.hdr_version = htonl(PACK_VERSION);
hdr.hdr_entries = htonl(nr_entries);
if (sha1write(f, &hdr, sizeof(hdr)))
return 0;
return sizeof(hdr);
}

/* /*
* Update pack header with object_count and compute new SHA1 for pack data * Update pack header with object_count and compute new SHA1 for pack data
* associated to pack_fd, and write that SHA1 at the end. That new SHA1 * associated to pack_fd, and write that SHA1 at the end. That new SHA1

2
pack.h

@ -2,6 +2,7 @@
#define PACK_H #define PACK_H


#include "object.h" #include "object.h"
#include "csum-file.h"


/* /*
* Packed object header * Packed object header
@ -74,6 +75,7 @@ extern const char *write_idx_file(const char *index_name, struct pack_idx_entry
extern int check_pack_crc(struct packed_git *p, struct pack_window **w_curs, off_t offset, off_t len, unsigned int nr); extern int check_pack_crc(struct packed_git *p, struct pack_window **w_curs, off_t offset, off_t len, unsigned int nr);
extern int verify_pack_index(struct packed_git *); extern int verify_pack_index(struct packed_git *);
extern int verify_pack(struct packed_git *); extern int verify_pack(struct packed_git *);
extern off_t write_pack_header(struct sha1file *f, uint32_t);
extern void fixup_pack_header_footer(int, unsigned char *, const char *, uint32_t, unsigned char *, off_t); extern void fixup_pack_header_footer(int, unsigned char *, const char *, uint32_t, unsigned char *, off_t);
extern char *index_pack_lockfile(int fd); extern char *index_pack_lockfile(int fd);
extern int encode_in_pack_object_header(enum object_type, uintmax_t, unsigned char *); extern int encode_in_pack_object_header(enum object_type, uintmax_t, unsigned char *);

Loading…
Cancel
Save