summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Tan <jonathantanmy@google.com>2020-01-12 04:15:25 (GMT)
committerJunio C Hamano <gitster@pobox.com>2020-01-30 18:55:47 (GMT)
commit2df1aa239cd50698ab3e0c2cb18b9c1d2f0e44d7 (patch)
tree1ce9d6a03e13ca4385bb9cc80f9d59521e0496a3
parent50033772d50ef3c4023d63561d20bc61db96500e (diff)
downloadgit-2df1aa239cd50698ab3e0c2cb18b9c1d2f0e44d7.zip
git-2df1aa239cd50698ab3e0c2cb18b9c1d2f0e44d7.tar.gz
git-2df1aa239cd50698ab3e0c2cb18b9c1d2f0e44d7.tar.bz2
fetch: forgo full connectivity check if --filter
If a filter is specified, we do not need a full connectivity check on the contents of the packfile we just fetched; we only need to check that the objects referenced are promisor objects. This significantly speeds up fetches into repositories that have many promisor objects, because during the connectivity check, all promisor objects are enumerated (to mark them UNINTERESTING), and that takes a significant amount of time. Signed-off-by: Jonathan Tan <jonathantanmy@google.com> Reviewed-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin/fetch.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/builtin/fetch.c b/builtin/fetch.c
index b4c6d92..6fb5032 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -906,8 +906,17 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
url = xstrdup("foreign");
if (!connectivity_checked) {
+ struct check_connected_options opt = CHECK_CONNECTED_INIT;
+
+ if (filter_options.choice)
+ /*
+ * Since a filter is specified, objects indirectly
+ * referenced by refs are allowed to be absent.
+ */
+ opt.check_refs_are_promisor_objects_only = 1;
+
rm = ref_map;
- if (check_connected(iterate_ref_map, &rm, NULL)) {
+ if (check_connected(iterate_ref_map, &rm, &opt)) {
rc = error(_("%s did not send all necessary objects\n"), url);
goto abort;
}