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: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
cd585e2a33
commit
e83e71c5e1
@ -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,
|
|||||||
* 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,
|
|||||||
* 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,
|
|||||||
|
|
||||||
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
cache.h
11
cache.h
@ -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)
|
||||||
{
|
{
|
||||||
|
12
sha1_file.c
12
sha1_file.c
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user