提交 ab90ea5d 编写于 作者: J Junio C Hamano 提交者: Linus Torvalds

[PATCH] Check packs and then files.

This reverses the order of object lookup, to check pack index first and
then go to the filesystem to find .git/objects/??/ hierarchy.

When most of the objects are packed, this saves quite many stat() calls
and negative dcache entries; while the price this approach has to pay is
negligible, even when most of the objects are outside pack, because
checking pack index file is quite cheap.
Signed-off-by: NJunio C Hamano <junkio@cox.net>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 013aab82
......@@ -1035,14 +1035,17 @@ void * read_sha1_file(const unsigned char *sha1, char *type, unsigned long *size
{
unsigned long mapsize;
void *map, *buf;
struct pack_entry e;
if (find_pack_entry(sha1, &e))
return read_packed_sha1(sha1, type, size);
map = map_sha1_file_internal(sha1, &mapsize);
if (map) {
buf = unpack_sha1_file(map, mapsize, type, size);
munmap(map, mapsize);
return buf;
}
return read_packed_sha1(sha1, type, size);
return NULL;
}
void *read_object_with_reference(const unsigned char *sha1,
......@@ -1343,9 +1346,9 @@ int has_sha1_file(const unsigned char *sha1)
struct stat st;
struct pack_entry e;
if (find_sha1_file(sha1, &st))
if (find_pack_entry(sha1, &e))
return 1;
return find_pack_entry(sha1, &e);
return find_sha1_file(sha1, &st) ? 1 : 0;
}
int index_fd(unsigned char *sha1, int fd, struct stat *st, int write_object, const char *type)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册