git count-objects: handle packs bigger than 4G

Use off_t to count sizes of packs and objects to avoid overflow after
4Gb.

Signed-off-by: Andreas Schwab <schwab@linux-m68k.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Andreas Schwab 2009-12-29 20:09:15 +01:00 committed by Junio C Hamano
parent 66fd74ea5d
commit c985ddf318

View File

@ -10,7 +10,7 @@
static void count_objects(DIR *d, char *path, int len, int verbose, static void count_objects(DIR *d, char *path, int len, int verbose,
unsigned long *loose, unsigned long *loose,
unsigned long *loose_size, off_t *loose_size,
unsigned long *packed_loose, unsigned long *packed_loose,
unsigned long *garbage) unsigned long *garbage)
{ {
@ -78,7 +78,7 @@ int cmd_count_objects(int argc, const char **argv, const char *prefix)
int len = strlen(objdir); int len = strlen(objdir);
char *path = xmalloc(len + 50); char *path = xmalloc(len + 50);
unsigned long loose = 0, packed = 0, packed_loose = 0, garbage = 0; unsigned long loose = 0, packed = 0, packed_loose = 0, garbage = 0;
unsigned long loose_size = 0; off_t loose_size = 0;
struct option opts[] = { struct option opts[] = {
OPT__VERBOSE(&verbose), OPT__VERBOSE(&verbose),
OPT_END(), OPT_END(),
@ -104,7 +104,7 @@ int cmd_count_objects(int argc, const char **argv, const char *prefix)
if (verbose) { if (verbose) {
struct packed_git *p; struct packed_git *p;
unsigned long num_pack = 0; unsigned long num_pack = 0;
unsigned long size_pack = 0; off_t size_pack = 0;
if (!packed_git) if (!packed_git)
prepare_packed_git(); prepare_packed_git();
for (p = packed_git; p; p = p->next) { for (p = packed_git; p; p = p->next) {
@ -117,15 +117,15 @@ int cmd_count_objects(int argc, const char **argv, const char *prefix)
num_pack++; num_pack++;
} }
printf("count: %lu\n", loose); printf("count: %lu\n", loose);
printf("size: %lu\n", loose_size / 1024); printf("size: %lu\n", (unsigned long) (loose_size / 1024));
printf("in-pack: %lu\n", packed); printf("in-pack: %lu\n", packed);
printf("packs: %lu\n", num_pack); printf("packs: %lu\n", num_pack);
printf("size-pack: %lu\n", size_pack / 1024); printf("size-pack: %lu\n", (unsigned long) (size_pack / 1024));
printf("prune-packable: %lu\n", packed_loose); printf("prune-packable: %lu\n", packed_loose);
printf("garbage: %lu\n", garbage); printf("garbage: %lu\n", garbage);
} }
else else
printf("%lu objects, %lu kilobytes\n", printf("%lu objects, %lu kilobytes\n",
loose, loose_size / 1024); loose, (unsigned long) (loose_size / 1024));
return 0; return 0;
} }