Skip to content

Commit

Permalink
get rid of num_packed_objects()
Browse files Browse the repository at this point in the history
The coming index format change doesn't allow for the number of objects
to be determined from the size of the index file directly.  Instead, Let's
initialize a field in the packed_git structure with the object count when
the index is validated since the count is always known at that point.

(based on commit 5705909)

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Nicolas Pitre authored and Junio C Hamano committed Jul 16, 2008
1 parent 3205364 commit 852f96b
Show file tree
Hide file tree
Showing 7 changed files with 10 additions and 15 deletions.
2 changes: 1 addition & 1 deletion builtin-count-objects.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ int cmd_count_objects(int ac, const char **av, const char *prefix)
for (p = packed_git; p; p = p->next) {
if (!p->pack_local)
continue;
packed += num_packed_objects(p);
packed += p->num_objects;
}
printf("count: %lu\n", loose);
printf("size: %lu\n", loose_size / 2);
Expand Down
4 changes: 2 additions & 2 deletions builtin-pack-objects.c
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ static int cmp_offset(const void *a_, const void *b_)
static void prepare_pack_revindex(struct pack_revindex *rix)
{
struct packed_git *p = rix->p;
int num_ent = num_packed_objects(p);
int num_ent = p->num_objects;
int i;
const char *index = p->index_data;

Expand Down Expand Up @@ -202,7 +202,7 @@ static struct revindex_entry * find_packed_object(struct packed_git *p,
prepare_pack_revindex(rix);
revindex = rix->revindex;
lo = 0;
hi = num_packed_objects(p) + 1;
hi = p->num_objects + 1;
do {
int mi = (lo + hi) / 2;
if (revindex[mi].offset == ofs) {
Expand Down
2 changes: 1 addition & 1 deletion cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,7 @@ extern struct packed_git {
unsigned long pack_size;
const void *index_data;
void *pack_base;
unsigned int num_objects;
int index_version;
unsigned int pack_last_used;
unsigned int pack_use_cnt;
Expand Down Expand Up @@ -387,7 +388,6 @@ extern struct packed_git *find_sha1_pack(const unsigned char *sha1,
extern int use_packed_git(struct packed_git *);
extern void unuse_packed_git(struct packed_git *);
extern struct packed_git *add_packed_git(char *, int, int);
extern int num_packed_objects(const struct packed_git *p);
extern const unsigned char *nth_packed_object_sha1(const struct packed_git *, unsigned int);
extern unsigned long find_pack_entry_one(const unsigned char *, struct packed_git *);
extern void *unpack_entry_gently(struct packed_git *, unsigned long, char *, unsigned long *);
Expand Down
2 changes: 1 addition & 1 deletion fsck-objects.c
Original file line number Diff line number Diff line change
Expand Up @@ -550,7 +550,7 @@ int main(int argc, char **argv)
verify_pack(p, 0);

for (p = packed_git; p; p = p->next) {
int num = num_packed_objects(p);
int num = p->num_objects;
for (i = 0; i < num; i++)
fsck_sha1(nth_packed_object_sha1(p, i));
}
Expand Down
4 changes: 2 additions & 2 deletions pack-check.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@ static int verify_packfile(struct packed_git *p)
return error("Packfile version %d unsupported",
ntohl(hdr->hdr_version));
nr_objects = ntohl(hdr->hdr_entries);
if (num_packed_objects(p) != nr_objects)
if (p->num_objects != nr_objects)
return error("Packfile claims to have %d objects, "
"while idx size expects %d", nr_objects,
num_packed_objects(p));
p->num_objects);

/* Check integrity of pack data with its SHA-1 checksum */
SHA1_Init(&ctx);
Expand Down
9 changes: 2 additions & 7 deletions sha1_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,7 @@ static int check_packed_git_idx(const char *path, struct packed_git *p)
p->index_version = 1;
p->index_data = idx_map;
p->index_size = idx_size;
p->num_objects = nr;
return 0;
}

Expand Down Expand Up @@ -1171,18 +1172,12 @@ void *unpack_entry_gently(struct packed_git *p, unsigned long offset,
}
}

int num_packed_objects(const struct packed_git *p)
{
/* See check_packed_git_idx() */
return (p->index_size - 20 - 20 - 4*256) / 24;
}

const unsigned char *nth_packed_object_sha1(const struct packed_git *p,
unsigned int n)
{
const unsigned char *index = p->index_data;
index += 4 * 256;
if (num_packed_objects(p) <= n)
if (n >= p->num_objects)
return NULL;
return index + 24 * n + 4;
}
Expand Down
2 changes: 1 addition & 1 deletion sha1_name.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ static int find_short_packed_object(int len, const unsigned char *match, unsigne

prepare_packed_git();
for (p = packed_git; p && found < 2; p = p->next) {
unsigned num = num_packed_objects(p);
unsigned num = p->num_objects;
unsigned first = 0, last = num;
while (first < last) {
unsigned mid = (first + last) / 2;
Expand Down

0 comments on commit 852f96b

Please sign in to comment.