[PATCH] Enhance sha1_file_size() into sha1_object_info()

This lets us eliminate one use of map_sha1_file() outside
sha1_file.c, to bring us one step closer to the packed GIT.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Junio C Hamano 2005-06-27 03:34:06 -07:00 committed by Linus Torvalds
parent c4584ae3fd
commit 36e4d74a21
4 changed files with 26 additions and 30 deletions

View File

@ -162,7 +162,7 @@ extern char *sha1_file_name(const unsigned char *sha1);
extern void * map_sha1_file(const unsigned char *sha1, unsigned long *size); extern void * map_sha1_file(const unsigned char *sha1, unsigned long *size);
extern int unpack_sha1_header(z_stream *stream, void *map, unsigned long mapsize, void *buffer, unsigned long size); extern int unpack_sha1_header(z_stream *stream, void *map, unsigned long mapsize, void *buffer, unsigned long size);
extern int parse_sha1_header(char *hdr, char *type, unsigned long *sizep); extern int parse_sha1_header(char *hdr, char *type, unsigned long *sizep);
extern int sha1_file_size(const unsigned char *, unsigned long *); extern int sha1_object_info(const unsigned char *, char *, unsigned long *);
extern void * unpack_sha1_file(void *map, unsigned long mapsize, char *type, unsigned long *size); extern void * unpack_sha1_file(void *map, unsigned long mapsize, char *type, unsigned long *size);
extern void * read_sha1_file(const unsigned char *sha1, char *type, unsigned long *size); extern void * read_sha1_file(const unsigned char *sha1, char *type, unsigned long *size);
extern int write_sha1_file(void *buf, unsigned long len, const char *type, unsigned char *return_sha1); extern int write_sha1_file(void *buf, unsigned long len, const char *type, unsigned char *return_sha1);

2
diff.c
View File

@ -425,7 +425,7 @@ int diff_populate_filespec(struct diff_filespec *s, int size_only)
s->size = e->size; s->size = e->size;
return 0; return 0;
} }
if (!sha1_file_size(s->sha1, &s->size)) if (!sha1_object_info(s->sha1, type, &s->size))
locate_size_cache(s->sha1, 0, s->size); locate_size_cache(s->sha1, 0, s->size);
} }
else { else {

View File

@ -160,28 +160,22 @@ static void add_object_entry(unsigned char *sha1, unsigned int hash)
static void check_object(struct object_entry *entry) static void check_object(struct object_entry *entry)
{ {
char buffer[128]; char type[20];
char type[10];
unsigned long mapsize;
z_stream stream;
void *map;
map = map_sha1_file(entry->sha1, &mapsize); if (!sha1_object_info(entry->sha1, type, &entry->size)) {
if (!map) if (!strcmp(type, "commit")) {
die("unable to map %s", sha1_to_hex(entry->sha1)); entry->type = OBJ_COMMIT;
if (unpack_sha1_header(&stream, map, mapsize, buffer, sizeof(buffer)) < 0) } else if (!strcmp(type, "tree")) {
die("unable to unpack %s header", sha1_to_hex(entry->sha1)); entry->type = OBJ_TREE;
munmap(map, mapsize); } else if (!strcmp(type, "blob")) {
if (parse_sha1_header(buffer, type, &entry->size) < 0) entry->type = OBJ_BLOB;
die("unable to parse %s header", sha1_to_hex(entry->sha1)); } else
if (!strcmp(type, "commit")) { die("unable to pack object %s of type %s",
entry->type = OBJ_COMMIT; sha1_to_hex(entry->sha1), type);
} else if (!strcmp(type, "tree")) { }
entry->type = OBJ_TREE; else
} else if (!strcmp(type, "blob")) { die("unable to get type of object %s",
entry->type = OBJ_BLOB; sha1_to_hex(entry->sha1));
} else
die("unable to pack object %s of type %s", sha1_to_hex(entry->sha1), type);
} }
static void get_object_details(void) static void get_object_details(void)

View File

@ -409,20 +409,22 @@ void * unpack_sha1_file(void *map, unsigned long mapsize, char *type, unsigned l
return unpack_sha1_rest(&stream, hdr, *size); return unpack_sha1_rest(&stream, hdr, *size);
} }
int sha1_file_size(const unsigned char *sha1, unsigned long *sizep) int sha1_object_info(const unsigned char *sha1, char *type, unsigned long *sizep)
{ {
int ret, status; int status;
unsigned long mapsize, size; unsigned long mapsize, size;
void *map; void *map;
z_stream stream; z_stream stream;
char hdr[64], type[20]; char hdr[128];
map = map_sha1_file(sha1, &mapsize); map = map_sha1_file(sha1, &mapsize);
if (!map) if (!map)
return -1; return error("unable to map %s", sha1_to_hex(sha1));
ret = unpack_sha1_header(&stream, map, mapsize, hdr, sizeof(hdr)); if (unpack_sha1_header(&stream, map, mapsize, hdr, sizeof(hdr)) < 0)
if (ret < Z_OK || parse_sha1_header(hdr, type, &size) < 0) status = error("unable to unpack %s header",
status = -1; sha1_to_hex(sha1));
if (parse_sha1_header(hdr, type, &size) < 0)
status = error("unable to parse %s header", sha1_to_hex(sha1));
else { else {
status = 0; status = 0;
*sizep = size; *sizep = size;