提交 e83e71c5 编写于 作者: J Jonathan Tan 提交者: Junio C Hamano

sha1_file: refactor has_sha1_file_with_flags

has_sha1_file_with_flags() implements many mechanisms in common with
sha1_object_info_extended(). Make has_sha1_file_with_flags() a
convenience function for sha1_object_info_extended() instead.
Signed-off-by: NJonathan Tan <jonathantanmy@google.com>
Signed-off-by: NJunio C Hamano <gitster@pobox.com>
上级 cd585e2a
...@@ -249,9 +249,11 @@ static void find_non_local_tags(struct transport *transport, ...@@ -249,9 +249,11 @@ static void find_non_local_tags(struct transport *transport,
*/ */
if (ends_with(ref->name, "^{}")) { if (ends_with(ref->name, "^{}")) {
if (item && if (item &&
!has_object_file_with_flags(&ref->old_oid, HAS_SHA1_QUICK) && !has_object_file_with_flags(&ref->old_oid,
OBJECT_INFO_QUICK) &&
!will_fetch(head, ref->old_oid.hash) && !will_fetch(head, ref->old_oid.hash) &&
!has_sha1_file_with_flags(item->util, HAS_SHA1_QUICK) && !has_sha1_file_with_flags(item->util,
OBJECT_INFO_QUICK) &&
!will_fetch(head, item->util)) !will_fetch(head, item->util))
item->util = NULL; item->util = NULL;
item = NULL; item = NULL;
...@@ -265,7 +267,7 @@ static void find_non_local_tags(struct transport *transport, ...@@ -265,7 +267,7 @@ static void find_non_local_tags(struct transport *transport,
* fetch. * fetch.
*/ */
if (item && if (item &&
!has_sha1_file_with_flags(item->util, HAS_SHA1_QUICK) && !has_sha1_file_with_flags(item->util, OBJECT_INFO_QUICK) &&
!will_fetch(head, item->util)) !will_fetch(head, item->util))
item->util = NULL; item->util = NULL;
...@@ -286,7 +288,7 @@ static void find_non_local_tags(struct transport *transport, ...@@ -286,7 +288,7 @@ static void find_non_local_tags(struct transport *transport,
* checked to see if it needs fetching. * checked to see if it needs fetching.
*/ */
if (item && if (item &&
!has_sha1_file_with_flags(item->util, HAS_SHA1_QUICK) && !has_sha1_file_with_flags(item->util, OBJECT_INFO_QUICK) &&
!will_fetch(head, item->util)) !will_fetch(head, item->util))
item->util = NULL; item->util = NULL;
......
...@@ -794,7 +794,8 @@ static void sha1_object(const void *data, struct object_entry *obj_entry, ...@@ -794,7 +794,8 @@ static void sha1_object(const void *data, struct object_entry *obj_entry,
if (startup_info->have_repository) { if (startup_info->have_repository) {
read_lock(); read_lock();
collision_test_needed = has_sha1_file_with_flags(oid->hash, HAS_SHA1_QUICK); collision_test_needed =
has_sha1_file_with_flags(oid->hash, OBJECT_INFO_QUICK);
read_unlock(); read_unlock();
} }
......
...@@ -1268,15 +1268,10 @@ int read_loose_object(const char *path, ...@@ -1268,15 +1268,10 @@ int read_loose_object(const char *path,
void **contents); void **contents);
/* /*
* Return true iff we have an object named sha1, whether local or in * Convenience for sha1_object_info_extended() with a NULL struct
* an alternate object database, and whether packed or loose. This * object_info. OBJECT_INFO_SKIP_CACHED is automatically set; pass
* function does not respect replace references. * nonzero flags to also set other flags.
*
* If the QUICK flag is set, do not re-check the pack directory
* when we cannot find the object (this means we may give a false
* negative answer if another process is simultaneously repacking).
*/ */
#define HAS_SHA1_QUICK 0x1
extern int has_sha1_file_with_flags(const unsigned char *sha1, int flags); extern int has_sha1_file_with_flags(const unsigned char *sha1, int flags);
static inline int has_sha1_file(const unsigned char *sha1) static inline int has_sha1_file(const unsigned char *sha1)
{ {
......
...@@ -3494,18 +3494,10 @@ int has_sha1_pack(const unsigned char *sha1) ...@@ -3494,18 +3494,10 @@ int has_sha1_pack(const unsigned char *sha1)
int has_sha1_file_with_flags(const unsigned char *sha1, int flags) int has_sha1_file_with_flags(const unsigned char *sha1, int flags)
{ {
struct pack_entry e;
if (!startup_info->have_repository) if (!startup_info->have_repository)
return 0; return 0;
if (find_pack_entry(sha1, &e)) return sha1_object_info_extended(sha1, NULL,
return 1; flags | OBJECT_INFO_SKIP_CACHED) >= 0;
if (has_loose_object(sha1))
return 1;
if (flags & HAS_SHA1_QUICK)
return 0;
reprepare_packed_git();
return find_pack_entry(sha1, &e);
} }
int has_object_file(const struct object_id *oid) int has_object_file(const struct object_id *oid)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册