From patchwork Tue Jan 18 18:54:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Glen Choo X-Patchwork-Id: 12716784 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 47C64C433EF for ; Tue, 18 Jan 2022 18:55:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1348469AbiARSzE (ORCPT ); Tue, 18 Jan 2022 13:55:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34268 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1348467AbiARSzC (ORCPT ); Tue, 18 Jan 2022 13:55:02 -0500 Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 18375C061574 for ; Tue, 18 Jan 2022 10:55:02 -0800 (PST) Received: by mail-pg1-x549.google.com with SMTP id t27-20020a63461b000000b00342c204e4f3so15624pga.11 for ; Tue, 18 Jan 2022 10:55:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=rMcxUYa+pYWoaPyu7/jTRBRqiC6fopgEoB9QwP13mZM=; b=WIkyDmXc32CObUkOc5fLjWwgOho0z3VX3c3TortpCq9+GraPOSqZU//zeewm00OMZ9 j2sSok5Q4VKHiQQwaik/qCvKJv0LrSmdMSf18Vx6Fp9Czy+E1fgxjZGBEj/0fKe2qlN+ vRDd2xV63EZm2R2yTUP+5tgj0j3yr8Nj1pcjc4r8TGxu0pF8+kfVJ8Hbr7mlVIsEsTi5 +Pm5IF/rbhZpQrd7MNQ53XoPwFF/4IjhfAqS7A2Y9bu460YzWCh8reNpTTqE2OyhCWcx 3Jith/kciF/AtmWBIod1g7ywC72+qkpLlo7Gs/0f8MFrvyK/fPaKVjUGJTBtxW8ITcbA IMuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=rMcxUYa+pYWoaPyu7/jTRBRqiC6fopgEoB9QwP13mZM=; b=X6JFkPtm3T5gMvKJ/ZEDCjYKJE7fYNds3ylqKQhiFcO+iLJIgUI/sJrDMKF8Io+EuB YwmtnhAENraMlfGftPcD3tihj/7QTMd2ikGcGJnGhIq/6HeBZxdqCVXXnB9enIYX8hi1 SR8gUdIZHIuVkNBrQozZX8TFDPxy9BnOz1R78t5OOc9quZxkoG+SQxI9E+tn+WGSoglE OYB+81gKsNFHWvGsUYs9abd0uDInbfvp+/BPviHtVA1XlGbpPDDOgMKSRmgHRO8t9CFS 3DXl26WAAlxwo4jgWqoardTcgGSqEpHiyYgeayU//XAwkU9Fr6yOL37Ra9uX0OfnPs6t mIRg== X-Gm-Message-State: AOAM530CtnojOY+3v81F2g6iEo1XDRSubV4KWVs1CNLoFGHFjRX6t8F4 9+iK7PAMjAM8bSDGPkMQrogg+zx3h4C9s9+TGrwFw59nxQ34CGZjoIBwSvtlpHPzUmsL3JQF9AX nGC0d4+tswak44XgdaFGGHDZXy7W5vW0TRupYIW9OWeC/C9+Numb2PsS7OBAjyR4= X-Google-Smtp-Source: ABdhPJyClfK3PNQkWuJAPlI0GzYi2h9Mkx2A+6fRtLb4zmFbDt2pSr//Re+jhGAZMVveYeezfJSrqF3SVGoOYw== X-Received: from chooglen.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:26d9]) (user=chooglen job=sendgmr) by 2002:a17:90a:ae15:: with SMTP id t21mr32398659pjq.147.1642532101440; Tue, 18 Jan 2022 10:55:01 -0800 (PST) Date: Tue, 18 Jan 2022 10:54:51 -0800 In-Reply-To: <20220118185453.33710-1-chooglen@google.com> Message-Id: <20220118185453.33710-2-chooglen@google.com> Mime-Version: 1.0 References: <20220113004501.78822-1-chooglen@google.com> <20220118185453.33710-1-chooglen@google.com> X-Mailer: git-send-email 2.34.1.703.g22d0c6ccf7-goog Subject: [PATCH v5 1/3] fetch: use goto cleanup in cmd_fetch() From: Glen Choo To: git@vger.kernel.org Cc: Glen Choo , Jonathan Tan , Junio C Hamano Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Replace an early return with 'goto cleanup' in cmd_fetch() so that the string_list is always cleared (the string_list_clear() call is purely cleanup; the string_list is not reused). This makes cleanup consistent so that a subsequent commit can use 'goto cleanup' to bail out early. Signed-off-by: Glen Choo --- builtin/fetch.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/builtin/fetch.c b/builtin/fetch.c index eaab8056bf..0a625cb137 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -2095,7 +2095,8 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) gtransport->smart_options->acked_commits = &acked_commits; } else { warning(_("protocol does not support --negotiate-only, exiting")); - return 1; + result = 1; + goto cleanup; } if (server_options.nr) gtransport->server_options = &server_options; @@ -2151,8 +2152,6 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) strvec_clear(&options); } - string_list_clear(&list, 0); - prepare_repo_settings(the_repository); if (fetch_write_commit_graph > 0 || (fetch_write_commit_graph < 0 && @@ -2170,5 +2169,7 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) if (enable_auto_gc) run_auto_maintenance(verbosity < 0); + cleanup: + string_list_clear(&list, 0); return result; } From patchwork Tue Jan 18 18:54:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Glen Choo X-Patchwork-Id: 12716785 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 69BB3C433EF for ; Tue, 18 Jan 2022 18:55:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347837AbiARSzH (ORCPT ); Tue, 18 Jan 2022 13:55:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34286 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1348482AbiARSzE (ORCPT ); Tue, 18 Jan 2022 13:55:04 -0500 Received: from mail-pg1-x549.google.com (mail-pg1-x549.google.com [IPv6:2607:f8b0:4864:20::549]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2090EC06173F for ; Tue, 18 Jan 2022 10:55:04 -0800 (PST) Received: by mail-pg1-x549.google.com with SMTP id c75-20020a63354e000000b003408e4153d1so21028pga.9 for ; Tue, 18 Jan 2022 10:55:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=kBbByrNFRfyeFLe4U8KRGl9oHeldlad0vXOAejrxrTo=; b=KSaGjWdUtfA68lLvd61OtG2OnetTiUU+GKshAtQX9Vwzx/5tIlOedWCZrlqssmEnPP hV7Yr4XhKIQNqtdiln5qHUR2oQQjSiFGsFag0JBod/hkab0DWK7IYdbBBjeE4/I0v8Jh Z4nIcpUFldId4SGO9tN8AARXTwLLltkg9v+NJwa+V1ec2Afyj7z0TqPgb/D8AiOnncPu XYDg3q4ohgGCbE1Bxrd4f3iqCAwHhkqYl1O1nGLXaNNXYpJ7i3jISuJr8M3ZnBsfp61d aEYjLChWteLoI6HvxPZPSJs1r08LaGPgrzPuUeE/PctpkiBkSYRy+ojv70JTKpp5Dg6j 6S5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=kBbByrNFRfyeFLe4U8KRGl9oHeldlad0vXOAejrxrTo=; b=VsXncVy275hr0btmV1x/MTSKm7UqkTXBE+7OLKuFnsyByPikq963JVGIEsxfgt/7PZ YiXnbkn4FboG+gc9IqwXubv56jbuFTqBbodlfeVHYalIMIi1eUj0G85lbmPZ+0FOBRYx 9MPGI7SynmbrLTm3/YtvPkCwsnTldZSoXv+elnpq19iVgs3EL3i7lEvB74zDw/hJydql Q/73fFiLOi9C+3AYQKUAnzfBw1e1xSymV3NIwRLcqdzPwK4NIwapmIiYaDcNTD9x2eUQ WZek/CK4Q73h+X+20rkrX0YqbwM25CKVWICGEmMv+1idag9OObshue11YEv31f86/O5K SfHQ== X-Gm-Message-State: AOAM532h9qXu/swsUY+q0ev2jzHUPgBeLmSskb+qyX/0HMP1CQRVHNnS +J1w+5j+2UMih9nnP0JYrrfLLp3kRMqWbKEOYQL+s04o4K0/0LYCUj2kGbhGhdgZgT0GcufOJvm dSgJ8F1R4Uk7Jz43mjzlqV1tvo6nHPTK+6Ukiha0P+8Q5RM0rjDwqTnD0Rbp7huc= X-Google-Smtp-Source: ABdhPJx52yk0hBGQdmrMrzP6a0pTHyKCgWUIBloBkZ/fjOSSVZI4Zn1l64DgxJLyddIcvLxiKaOlCIWbVArbyA== X-Received: from chooglen.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:26d9]) (user=chooglen job=sendgmr) by 2002:a05:6a00:1a4a:b0:4c3:18c8:3595 with SMTP id h10-20020a056a001a4a00b004c318c83595mr17807873pfv.61.1642532103488; Tue, 18 Jan 2022 10:55:03 -0800 (PST) Date: Tue, 18 Jan 2022 10:54:52 -0800 In-Reply-To: <20220118185453.33710-1-chooglen@google.com> Message-Id: <20220118185453.33710-3-chooglen@google.com> Mime-Version: 1.0 References: <20220113004501.78822-1-chooglen@google.com> <20220118185453.33710-1-chooglen@google.com> X-Mailer: git-send-email 2.34.1.703.g22d0c6ccf7-goog Subject: [PATCH v5 2/3] fetch: skip tasks related to fetching objects From: Glen Choo To: git@vger.kernel.org Cc: Glen Choo , Jonathan Tan , Junio C Hamano Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org cmd_fetch() does the following with the assumption that objects are fetched: * Run gc * Write commit graphs (if enabled by fetch.writeCommitGraph=true) However, neither of these tasks makes sense if objects are not fetched e.g. `git fetch --negotiate-only` never fetches objects. Speed up cmd_fetch() by bailing out early if we know for certain that objects will not be fetched. cmd_fetch() can bail out early whenever objects are not fetched, but for now this only considers --negotiate-only. The same optimization does not apply to `git fetch --dry-run` because that actually fetches objects; the dry run refers to not updating refs. Signed-off-by: Glen Choo --- builtin/fetch.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/builtin/fetch.c b/builtin/fetch.c index 0a625cb137..7bbff5a029 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -2152,6 +2152,17 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) strvec_clear(&options); } + /* + * Skip irrelevant tasks because we know objects were not + * fetched. + * + * NEEDSWORK: as a future optimization, we can return early + * whenever objects were not fetched e.g. if we already have all + * of them. + */ + if (negotiate_only) + goto cleanup; + prepare_repo_settings(the_repository); if (fetch_write_commit_graph > 0 || (fetch_write_commit_graph < 0 && From patchwork Tue Jan 18 18:54:53 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Glen Choo X-Patchwork-Id: 12716786 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 25BCAC433F5 for ; Tue, 18 Jan 2022 18:55:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1348466AbiARSzI (ORCPT ); Tue, 18 Jan 2022 13:55:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34296 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1348488AbiARSzG (ORCPT ); Tue, 18 Jan 2022 13:55:06 -0500 Received: from mail-pf1-x449.google.com (mail-pf1-x449.google.com [IPv6:2607:f8b0:4864:20::449]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6FEBDC06161C for ; Tue, 18 Jan 2022 10:55:06 -0800 (PST) Received: by mail-pf1-x449.google.com with SMTP id y70-20020a626449000000b004bf3f4ba1c2so101027pfb.11 for ; Tue, 18 Jan 2022 10:55:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=zn4IV2tnoV8nw4gEKGxySsn/vY7hEa2/Wub7c01es2M=; b=LMboqaA+lffW68NB0A1cghV6XiN8jm0zfJ5y8+Aw0pZ43ROKi2KfL3XWsaGLL0SYk3 aNxxOeFwf+WA5NHSOBU0Cfaz1AwfZ2pHI6MxsNoUHrRp3HE9HbYUml15QyKVuLXHqBRT b81Xkra1ZKditM9LqxhNBvR9jc3wAWqoPLWJpmPV9zSt+HwdWaYW4LQ+j1qjFC23HwLO J3xpAk76li55Y4jX/mJIOh7GOdwAoFX5RdYItjUMP6MfAAkOGP5YzqsLtSBgs0H5LMk+ ynvKpns15a0Qp1NKub7O6/i2/DYwcAPSiVEfXgRlox223zfWPbkdjLfGiWpyqYVJZj4Q D1Hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=zn4IV2tnoV8nw4gEKGxySsn/vY7hEa2/Wub7c01es2M=; b=FKZU28H2lGWW7FZPM6vArMbK6hAD7zUusjMsN1ZMf6305Pt/jUpPDe1xUfk9nrTaiY /FhaxrSGJD+YTW0auD6I4sbOdmDQHTVl8MbalkHcOuC0LyP36Xzb+viEhCVlXTNJwxVQ 8uo4qDt8fJgEzRW5nCootII/nPyCsD9NjDNhLIgCFjBDCAEBaU2aS1AB+ULqIVUocCW5 aMRvZejvmgYad794gZmvjcNH2i6wLUTxHxA72NYETNviP39Z9+XqEJwhTUbrQoUraF+l y3sVxqtWz351fcan4PbjKnkVdHxy6lf6UnmAl/PGqNxvEMNddKwyAITJUFvYd8/UPHej 7/KQ== X-Gm-Message-State: AOAM531Ei9QxHZ3zLhv3IyntEYi4AQQt4EdusV8nt5d14xvDAbvv6K0A DoaR7EZIuKEPIAIAcNGCBFp2G6emTK/T940n1mHpDkt1Ij0SQr9ui/8YK5eXXISL0gk2ep7LRX/ 3iDs790PKs2vQO59YWGx9YzyisYwbOQ/nTnIQTmZnCuzqKl4cBSgkS41UdBxsi1c= X-Google-Smtp-Source: ABdhPJyCEWI6ARt+W7FG49MxIhXqRqkWS21Q/v8oE0+gIMKD+Nv6prZvn5XcbemL1dcDL4xm96DbfidnRQRzVQ== X-Received: from chooglen.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:26d9]) (user=chooglen job=sendgmr) by 2002:a17:902:ec83:b0:14a:3c28:6820 with SMTP id x3-20020a170902ec8300b0014a3c286820mr29611996plg.43.1642532105674; Tue, 18 Jan 2022 10:55:05 -0800 (PST) Date: Tue, 18 Jan 2022 10:54:53 -0800 In-Reply-To: <20220118185453.33710-1-chooglen@google.com> Message-Id: <20220118185453.33710-4-chooglen@google.com> Mime-Version: 1.0 References: <20220113004501.78822-1-chooglen@google.com> <20220118185453.33710-1-chooglen@google.com> X-Mailer: git-send-email 2.34.1.703.g22d0c6ccf7-goog Subject: [PATCH v5 3/3] fetch --negotiate-only: do not update submodules From: Glen Choo To: git@vger.kernel.org Cc: Glen Choo , Jonathan Tan , Junio C Hamano Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org `git fetch --negotiate-only` is an implementation detail of push negotiation and, unlike most `git fetch` invocations, does not actually update the main repository. Thus it should not update submodules even if submodule recursion is enabled. This is not just slow, it is wrong e.g. push negotiation with "submodule.recurse=true" will cause submodules to be updated because it invokes `git fetch --negotiate-only`. Fix this by disabling submodule recursion if --negotiate-only was given. Since this makes --negotiate-only and --recurse-submodules incompatible, check for this invalid combination and die. This does not use the "goto cleanup" introduced in the previous commit because we want to recurse through submodules whenever a ref is fetched, and this can happen without introducing new objects. Signed-off-by: Glen Choo --- Documentation/fetch-options.txt | 1 + builtin/fetch.c | 24 +++++++++++++++++++++++- t/t5516-fetch-push.sh | 12 ++++++++++++ t/t5702-protocol-v2.sh | 12 ++++++++++++ 4 files changed, 48 insertions(+), 1 deletion(-) diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt index e967ff1874..f903683189 100644 --- a/Documentation/fetch-options.txt +++ b/Documentation/fetch-options.txt @@ -71,6 +71,7 @@ configuration variables documented in linkgit:git-config[1], and the ancestors of the provided `--negotiation-tip=*` arguments, which we have in common with the server. + +This is incompatible with `--recurse-submodules=[yes|on-demand]`. Internally this is used to implement the `push.negotiate` option, see linkgit:git-config[1]. diff --git a/builtin/fetch.c b/builtin/fetch.c index 7bbff5a029..63f74776a2 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -76,6 +76,7 @@ static struct transport *gtransport; static struct transport *gsecondary; static const char *submodule_prefix = ""; static int recurse_submodules = RECURSE_SUBMODULES_DEFAULT; +static int recurse_submodules_cli = RECURSE_SUBMODULES_DEFAULT; static int recurse_submodules_default = RECURSE_SUBMODULES_ON_DEMAND; static int shown_url = 0; static struct refspec refmap = REFSPEC_INIT_FETCH; @@ -167,7 +168,7 @@ static struct option builtin_fetch_options[] = { N_("prune remote-tracking branches no longer on remote")), OPT_BOOL('P', "prune-tags", &prune_tags, N_("prune local tags no longer on remote and clobber changed tags")), - OPT_CALLBACK_F(0, "recurse-submodules", &recurse_submodules, N_("on-demand"), + OPT_CALLBACK_F(0, "recurse-submodules", &recurse_submodules_cli, N_("on-demand"), N_("control recursive fetching of submodules"), PARSE_OPT_OPTARG, option_fetch_parse_recurse_submodules), OPT_BOOL(0, "dry-run", &dry_run, @@ -2014,6 +2015,27 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) argc = parse_options(argc, argv, prefix, builtin_fetch_options, builtin_fetch_usage, 0); + + if (recurse_submodules_cli != RECURSE_SUBMODULES_DEFAULT) + recurse_submodules = recurse_submodules_cli; + + if (negotiate_only) + switch (recurse_submodules_cli) { + case RECURSE_SUBMODULES_OFF: + case RECURSE_SUBMODULES_DEFAULT: { + /* + * --negotiate-only should never recurse into + * submodules. Skip it by setting recurse_submodules to + * RECURSE_SUBMODULES_OFF. + */ + recurse_submodules = RECURSE_SUBMODULES_OFF; + break; + } + default: + die(_("--negotiate-only and --recurse-submodules cannot be used together")); + } + + if (recurse_submodules != RECURSE_SUBMODULES_OFF) { int *sfjc = submodule_fetch_jobs_config == -1 ? &submodule_fetch_jobs_config : NULL; diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh index 2f04cf9a1c..87881726ed 100755 --- a/t/t5516-fetch-push.sh +++ b/t/t5516-fetch-push.sh @@ -229,6 +229,18 @@ test_expect_success 'push with negotiation proceeds anyway even if negotiation f test_i18ngrep "push negotiation failed" err ' +test_expect_success 'push with negotiation does not attempt to fetch submodules' ' + mk_empty submodule_upstream && + test_commit -C submodule_upstream submodule_commit && + git submodule add ./submodule_upstream submodule && + mk_empty testrepo && + git push testrepo $the_first_commit:refs/remotes/origin/first_commit && + test_commit -C testrepo unrelated_commit && + git -C testrepo config receive.hideRefs refs/remotes/origin/first_commit && + git -c submodule.recurse=true -c protocol.version=2 -c push.negotiate=1 push testrepo refs/heads/main:refs/remotes/origin/main 2>err && + ! grep "Fetching submodule" err +' + test_expect_success 'push without wildcard' ' mk_empty testrepo && diff --git a/t/t5702-protocol-v2.sh b/t/t5702-protocol-v2.sh index 710f33e2aa..1b9023d3f0 100755 --- a/t/t5702-protocol-v2.sh +++ b/t/t5702-protocol-v2.sh @@ -628,6 +628,18 @@ test_expect_success 'usage: --negotiate-only without --negotiation-tip' ' test_cmp err.expect err.actual ' +test_expect_success 'usage: --negotiate-only with --recurse-submodules' ' + cat >err.expect <<-\EOF && + fatal: --negotiate-only and --recurse-submodules cannot be used together + EOF + + test_must_fail git -c protocol.version=2 -C client fetch \ + --negotiate-only \ + --recurse-submodules \ + origin 2>err.actual && + test_cmp err.expect err.actual +' + test_expect_success 'file:// --negotiate-only' ' SERVER="server" && URI="file://$(pwd)/server" &&