Re: [PATCH v5 8/8] sha1_file: refactor has_sha1_file_with_flags
- From
Christian Couder <christian.couder@gmail.com>
- Date
- Jul 18, 2017, 10:30 UTC
- Message-ID
- <CAP8UFD24QVAuTXXH3zvR5zwZwub20o37uGyt8Uf+rRtjjk8QTA@mail.gmail.com>
- In-Reply-To
- <a4f04b3ec9cc1ba08a5dd7f459dce95411fb03e2.1498091579.git.jonathantanmy@google.com>
On Thu, Jun 22, 2017 at 2:40 AM, Jonathan Tan <jonathantanmy@google.com> wrote:
Show 23 quoted lines
> diff --git a/sha1_file.c b/sha1_file.c
> index bf6b64ec8..778f01d92 100644
> --- a/sha1_file.c
> +++ b/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)
> {
> - struct pack_entry e;
> -
> if (!startup_info->have_repository)
> return 0;
> - if (find_pack_entry(sha1, &e))
> - 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);
> + return sha1_object_info_extended(sha1, NULL,
> + flags | OBJECT_INFO_SKIP_CACHED) >= 0;
> }I am not sure if it could affect performance (in one way or another) a lot or not but I just wanted to note that has_loose_object() calls check_and_freshen() which calls access() on loose object files, while sha1_object_info_extended() calls sha1_loose_object_info() which calls stat_sha1_file() which calls lstat() on loose object files.
So depending on the relative performance of access() and lstat() there could be a performance impact on repos that have a lot of loose object files.