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>
This commit is contained in:
@ -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
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
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 *);
|
||||||
|
Reference in New Issue
Block a user