From: Junio C Hamano Date: Mon, 13 May 2019 14:50:31 +0000 (+0900) Subject: Merge branch 'js/partial-clone-connectivity-check' X-Git-Tag: v2.22.0-rc0~12 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/5b51f0d38d24a21dc69a53e972497928183d399e?hp=-c Merge branch 'js/partial-clone-connectivity-check' During an initial "git clone --depth=..." partial clone, it is pointless to spend cycles for a large portion of the connectivity check that enumerates and skips promisor objects (which by definition is all objects fetched from the other side). This has been optimized out. * js/partial-clone-connectivity-check: t/perf: add perf script for partial clones clone: do faster object check for partial clones --- 5b51f0d38d24a21dc69a53e972497928183d399e diff --combined builtin/clone.c index 31a47d190a,fdbbd8942a..ffdd94e8f6 --- a/builtin/clone.c +++ b/builtin/clone.c @@@ -66,7 -66,6 +66,7 @@@ static int option_dissociate static int max_jobs = -1; static struct string_list option_recurse_submodules = STRING_LIST_INIT_NODUP; static struct list_objects_filter_options filter_options; +static struct string_list server_options = STRING_LIST_INIT_NODUP; static int recurse_submodules_cb(const struct option *opt, const char *arg, int unset) @@@ -138,8 -137,6 +138,8 @@@ static struct option builtin_clone_opti N_("separate git dir from working tree")), OPT_STRING_LIST('c', "config", &option_config, N_("key=value"), N_("set config inside the new repository")), + OPT_STRING_LIST(0, "server-option", &server_options, + N_("server-specific"), N_("option to transmit")), OPT_SET_INT('4', "ipv4", &family, N_("use IPv4 addresses only"), TRANSPORT_FAMILY_IPV4), OPT_SET_INT('6', "ipv6", &family, N_("use IPv6 addresses only"), @@@ -660,7 -657,8 +660,8 @@@ static void update_remote_refs(const st const char *branch_top, const char *msg, struct transport *transport, - int check_connectivity) + int check_connectivity, + int check_refs_only) { const struct ref *rm = mapped_refs; @@@ -669,6 -667,7 +670,7 @@@ opt.transport = transport; opt.progress = transport->progress; + opt.check_refs_only = !!check_refs_only; if (check_connected(iterate_ref_map, &rm, &opt)) die(_("remote did not send all necessary objects")); @@@ -1139,9 -1138,6 +1141,9 @@@ int cmd_clone(int argc, const char **ar transport_set_option(transport, TRANS_OPT_UPLOADPACK, option_upload_pack); + if (server_options.nr) + transport->server_options = &server_options; + if (filter_options.choice) { struct strbuf expanded_filter_spec = STRBUF_INIT; expand_list_objects_filter_spec(&filter_options, @@@ -1230,7 -1226,7 +1232,7 @@@ update_remote_refs(refs, mapped_refs, remote_head_points_at, branch_top.buf, reflog_msg.buf, transport, - !is_local); + !is_local, filter_options.choice); update_head(our_head_points_at, remote_head, reflog_msg.buf);