Browse Source

Merge branch 'jk/index-pack-reduce-recheck' into maint

Disable "have we lost a race with competing repack?" check while
receiving a huge object transfer that runs index-pack.

* jk/index-pack-reduce-recheck:
  index-pack: avoid excessive re-reading of pack directory
maint
Junio C Hamano 10 years ago
parent
commit
de62fe8c42
  1. 2
      builtin/index-pack.c
  2. 11
      cache.h
  3. 4
      sha1_file.c

2
builtin/index-pack.c

@ -730,7 +730,7 @@ static void sha1_object(const void *data, struct object_entry *obj_entry, @@ -730,7 +730,7 @@ static void sha1_object(const void *data, struct object_entry *obj_entry,
assert(data || obj_entry);

read_lock();
collision_test_needed = has_sha1_file(sha1);
collision_test_needed = has_sha1_file_with_flags(sha1, HAS_SHA1_QUICK);
read_unlock();

if (collision_test_needed && !data) {

11
cache.h

@ -901,8 +901,17 @@ extern int has_sha1_pack(const unsigned char *sha1); @@ -901,8 +901,17 @@ extern int has_sha1_pack(const unsigned char *sha1);
* Return true iff we have an object named sha1, whether local or in
* an alternate object database, and whether packed or loose. This
* function does not respect replace references.
*
* 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).
*/
extern int has_sha1_file(const unsigned char *sha1);
#define HAS_SHA1_QUICK 0x1
extern int has_sha1_file_with_flags(const unsigned char *sha1, int flags);
static inline int has_sha1_file(const unsigned char *sha1)
{
return has_sha1_file_with_flags(sha1, 0);
}

/*
* Return true iff an alternate object database has a loose object

4
sha1_file.c

@ -3084,7 +3084,7 @@ int has_sha1_pack(const unsigned char *sha1) @@ -3084,7 +3084,7 @@ int has_sha1_pack(const unsigned char *sha1)
return find_pack_entry(sha1, &e);
}

int has_sha1_file(const unsigned char *sha1)
int has_sha1_file_with_flags(const unsigned char *sha1, int flags)
{
struct pack_entry e;

@ -3092,6 +3092,8 @@ int has_sha1_file(const unsigned char *sha1) @@ -3092,6 +3092,8 @@ int has_sha1_file(const unsigned char *sha1)
return 1;
if (has_loose_object(sha1))
return 1;
if (flags & HAS_SHA1_QUICK)
return 0;
reprepare_packed_git();
return find_pack_entry(sha1, &e);
}

Loading…
Cancel
Save