summaryrefslogtreecommitdiff
path: root/unpack-trees.c
diff options
context:
space:
mode:
authorJonathan Tan <jonathantanmy@google.com>2021-07-23 18:52:22 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-07-23 21:21:57 (GMT)
commitb2896d27391afcbc990439e63972bb33693a7d6b (patch)
tree952dfb651420982f59f61cb4b2ed6d62a17effb8 /unpack-trees.c
parenteb27b338a3e71c7c4079fbac8aeae3f8fbb5c687 (diff)
downloadgit-b2896d27391afcbc990439e63972bb33693a7d6b.zip
git-b2896d27391afcbc990439e63972bb33693a7d6b.tar.gz
git-b2896d27391afcbc990439e63972bb33693a7d6b.tar.bz2
unpack-trees: refactor prefetching code
Refactor the prefetching code in unpack-trees.c into its own function, because it will be used elsewhere in a subsequent commit. Signed-off-by: Jonathan Tan <jonathantanmy@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'unpack-trees.c')
-rw-r--r--unpack-trees.c27
1 files changed, 8 insertions, 19 deletions
diff --git a/unpack-trees.c b/unpack-trees.c
index f88a69f..ed92794 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -392,6 +392,11 @@ static void report_collided_checkout(struct index_state *index)
string_list_clear(&list, 0);
}
+static int must_checkout(const struct cache_entry *ce)
+{
+ return ce->ce_flags & CE_UPDATE;
+}
+
static int check_updates(struct unpack_trees_options *o,
struct index_state *index)
{
@@ -442,28 +447,12 @@ static int check_updates(struct unpack_trees_options *o,
if (should_update_submodules())
load_gitmodules_file(index, &state);
- if (has_promisor_remote()) {
+ if (has_promisor_remote())
/*
* Prefetch the objects that are to be checked out in the loop
* below.
*/
- struct oid_array to_fetch = OID_ARRAY_INIT;
- for (i = 0; i < index->cache_nr; i++) {
- struct cache_entry *ce = index->cache[i];
-
- if (!(ce->ce_flags & CE_UPDATE) ||
- S_ISGITLINK(ce->ce_mode))
- continue;
- if (!oid_object_info_extended(the_repository, &ce->oid,
- NULL,
- OBJECT_INFO_FOR_PREFETCH))
- continue;
- oid_array_append(&to_fetch, &ce->oid);
- }
- promisor_remote_get_direct(the_repository,
- to_fetch.oid, to_fetch.nr);
- oid_array_clear(&to_fetch);
- }
+ prefetch_cache_entries(index, must_checkout);
get_parallel_checkout_configs(&pc_workers, &pc_threshold);
@@ -473,7 +462,7 @@ static int check_updates(struct unpack_trees_options *o,
for (i = 0; i < index->cache_nr; i++) {
struct cache_entry *ce = index->cache[i];
- if (ce->ce_flags & CE_UPDATE) {
+ if (must_checkout(ce)) {
size_t last_pc_queue_size = pc_queue_size();
if (ce->ce_flags & CE_WT_REMOVE)