diff options
author | Josh Steadmon <steadmon@google.com> | 2019-04-19 14:00:13 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-04-21 14:08:53 +0900 |
commit | dfa33a298de2ab724d4812633bb009a90d1df790 (patch) | |
tree | f15ffe4ed29fe4acadffd36d8c49057ecec538ce /connected.c | |
parent | 041f5ea1cf987a4068ef5f39ba0a09be85952064 (diff) | |
download | git-dfa33a298de2ab724d4812633bb009a90d1df790.tar.gz |
clone: do faster object check for partial clones
For partial clones, doing a full connectivity check is wasteful; we skip
promisor objects (which, for a partial clone, is all known objects), and
enumerating them all to exclude them from the connectivity check can
take a significant amount of time on large repos.
At most, we want to make sure that we get the objects referred to by any
wanted refs. For partial clones, just check that these objects were
transferred.
Signed-off-by: Josh Steadmon <steadmon@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'connected.c')
-rw-r--r-- | connected.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/connected.c b/connected.c index 1bba888eff..1ab481fed6 100644 --- a/connected.c +++ b/connected.c @@ -1,4 +1,5 @@ #include "cache.h" +#include "object-store.h" #include "run-command.h" #include "sigchain.h" #include "connected.h" @@ -49,6 +50,22 @@ int check_connected(oid_iterate_fn fn, void *cb_data, strbuf_release(&idx_file); } + if (opt->check_refs_only) { + /* + * For partial clones, we don't want to have to do a regular + * connectivity check because we have to enumerate and exclude + * all promisor objects (slow), and then the connectivity check + * itself becomes a no-op because in a partial clone every + * object is a promisor object. Instead, just make sure we + * received the objects pointed to by each wanted ref. + */ + do { + if (!repo_has_object_file(the_repository, &oid)) + return 1; + } while (!fn(cb_data, &oid)); + return 0; + } + if (opt->shallow_file) { argv_array_push(&rev_list.args, "--shallow-file"); argv_array_push(&rev_list.args, opt->shallow_file); |