From patchwork Thu Jan 20 17:49:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Glen Choo X-Patchwork-Id: 12718913 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 5DAAFC433EF for ; Thu, 20 Jan 2022 17:49:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232618AbiATRtw (ORCPT ); Thu, 20 Jan 2022 12:49:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50612 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232647AbiATRtv (ORCPT ); Thu, 20 Jan 2022 12:49:51 -0500 Received: from mail-pg1-x54a.google.com (mail-pg1-x54a.google.com [IPv6:2607:f8b0:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 77A15C061574 for ; Thu, 20 Jan 2022 09:49:51 -0800 (PST) Received: by mail-pg1-x54a.google.com with SMTP id o20-20020a656a54000000b003441a994d60so4071816pgu.6 for ; Thu, 20 Jan 2022 09:49:51 -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=R3xxZDa5hwL3RUM1zkTtxKM4EqLfkPwizsjDm2dMPnOiJuW8LsTHkDv53/+IsY6qyJ d4jeDnlEH2AcYLonj8TzZ+QZptjQMpZAeQJd85gGRdmCr66BwVRjXjPUDHXYZPu8ti7A ZeOjGmj27TkcmJuOk8eIzyxNU1VP5U9r8PeAn42oojBQa7/6dtQcjX8TG0GKbODn1O0S p072N0yK6SzVBiCnwjjj44wgOVSRmu37VDKq4WZIeQy5JSqN9vMSRFYTeHOyYsP9KSrw bEx/S0gJvCjgUdqkFsAE7ZtwID45oRTFVSG6LpjVhl9J4mgzOMQPHo0x+HMnspouzaCE kDKQ== 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=FC9t8tQfNyr9q7n6Qfjz48pt2RuSm+PNhnPibqEQ/Bj9FnS0QdwPekGSywzkfynjVc 1jxkK16dzii/tQIoK5ZOavcaIn3lvcncZyyGfTDhbhIb7cZEm/DMPvst3SpIr61vXXKv PCBT+A1c9m0fJUd2tyfObtbZQA00S2oYK5A0pVI1qq7ioPLTY84fUe9/RbOWc8J7pb9j hMMkMPRQrt0VvKTTQn5iCHlEQp594B+AxIs+ICiVwIzwDsTteKkozEkPB/zLZ2oNOVZz Nk5Vkn9WNK+jNGnir7h4Ob7KGjEaSdBIBywi+ekDw/YmlpENHS0WcMmTyIGOH51ZhRf2 rqYA== X-Gm-Message-State: AOAM532CyWGnMBj4yPoWH42uPWPCDqeuDNDE0/WNqjCZT9NnVukY7aNk I6dnTvdri8SuiiwnTrRy+Dq4SE9WFTRPfeV40YQNAKkxcUKKGzJFA+i6NjIipCd40LfIXta0HSN 3e5jPckn9yz/KK+5RHKWeF66j8MbZuvlHZ5wo+0ShnUejmxkApTzBZpbO+0GoIKU= X-Google-Smtp-Source: ABdhPJwHRUI+D4AlTUpHuQ2TWkt0jx7wQDRhCmVJKAURN8w8aRd3NYdjaOwh71oWPtfcZsVJ2ZQO0PQwpT2vYQ== X-Received: from chooglen.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:26d9]) (user=chooglen job=sendgmr) by 2002:a17:902:d883:b0:14a:4ba5:6e72 with SMTP id b3-20020a170902d88300b0014a4ba56e72mr149780plz.27.1642700990908; Thu, 20 Jan 2022 09:49:50 -0800 (PST) Date: Thu, 20 Jan 2022 09:49:40 -0800 In-Reply-To: <20220120174942.94231-1-chooglen@google.com> Message-Id: <20220120174942.94231-2-chooglen@google.com> Mime-Version: 1.0 References: <20220119000056.58503-1-chooglen@google.com> <20220120174942.94231-1-chooglen@google.com> X-Mailer: git-send-email 2.34.1.703.g22d0c6ccf7-goog Subject: [PATCH v7 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 , Jiang Xin 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 Thu Jan 20 17:49:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Glen Choo X-Patchwork-Id: 12718914 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 4A51DC433F5 for ; Thu, 20 Jan 2022 17:49:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232796AbiATRty (ORCPT ); Thu, 20 Jan 2022 12:49:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50628 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232699AbiATRtx (ORCPT ); Thu, 20 Jan 2022 12:49:53 -0500 Received: from mail-pj1-x1049.google.com (mail-pj1-x1049.google.com [IPv6:2607:f8b0:4864:20::1049]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 714A3C061574 for ; Thu, 20 Jan 2022 09:49:53 -0800 (PST) Received: by mail-pj1-x1049.google.com with SMTP id x1-20020a17090ab00100b001b380b8ed35so4503711pjq.7 for ; Thu, 20 Jan 2022 09:49:53 -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=OIJouwVsalDBlS7TQKacnG+NtsiD5BGvH5BDAA2cXcjWmW7Mp662C56rCSyCVApUpr X0S/3LtVVMtX52sdhBVS7AtvwPHdRCy1XY82UTRxy9w1sU7zGFejwvOiPZqxzm8sF66N LKyHLRBfEQZfxjF79YI2Vy61CLhyTOs1SZHRsPPjI7AFFdR5+hF3Q/+oiJ31Gswib1IT 3F/IJE7SEtBr/Os0FriCos1PI4FZ22VfFi48c3k2/adN7z34uUReIhJ58DKwKQo3pBbk aYzZDYTBQCs+8EgwiRBuJiYbx7NTV658shMYZU3N40P7RnyOdNETZfdx3Vcw5fcqne9w bMwg== 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=fOxwOt7kJowdu1R64cqfl6gZWEWk7PFPIprJAcrSQByFYUAhcRsZA9C7Bqj5f/mFi2 jsm6AItxQ5zUcLdvs2KTdwF1RnKwmOgDp+Lj8XzkZ3dS0/PX0p2LqTe8ebOKOtt20pm8 eEdg88KTcGvcW5pJzq098ifHExgbScXSXhz6S2uT7tAUJ+3MBriu8BgrCzmyEhugH5N7 vrWaOD8OS9usInK4E+Es3Z9+xWMzBBKO0i1Yze75LpgYIPsojdbaNjvkRbz8fdE1OtAC mtHKCMhqWJpvE5bvkR4dICv11GVLjsa1KLRsFG7iQdAALjmyynZKd5JpaP9q5dMy61bm Cvbw== X-Gm-Message-State: AOAM531qQdfboGi7ZmhiO0nOFZ+3VmhHRp6ksfL6bdd7I9434rNEJQTU MyFWnfwD9Hi5zP9KCPyd13UiBm5Lk8FkQIljsCu8ZfrvJHIkPqqoA0r+QABNGPaDKKmbQUVeqtf DLPIRyWWVbQPQFl7MBuCHj7XqsdS+kFesw8LWV4LaXJIhylXvgIvfJPOgHvHxgYk= X-Google-Smtp-Source: ABdhPJxYGt2Hkf3X1NN/bBDcmU1HOIx6sNEGrIBtkC7wXS6FNtP58+HROSZjasWRj+gRZgfpmQamb2nnv4Jo0g== X-Received: from chooglen.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:26d9]) (user=chooglen job=sendgmr) by 2002:a17:902:9343:b0:148:a2e7:fb5f with SMTP id g3-20020a170902934300b00148a2e7fb5fmr78013plp.160.1642700992866; Thu, 20 Jan 2022 09:49:52 -0800 (PST) Date: Thu, 20 Jan 2022 09:49:41 -0800 In-Reply-To: <20220120174942.94231-1-chooglen@google.com> Message-Id: <20220120174942.94231-3-chooglen@google.com> Mime-Version: 1.0 References: <20220119000056.58503-1-chooglen@google.com> <20220120174942.94231-1-chooglen@google.com> X-Mailer: git-send-email 2.34.1.703.g22d0c6ccf7-goog Subject: [PATCH v7 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 , Jiang Xin 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 Thu Jan 20 17:49:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Glen Choo X-Patchwork-Id: 12718915 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 DA898C433EF for ; Thu, 20 Jan 2022 17:49:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232820AbiATRt4 (ORCPT ); Thu, 20 Jan 2022 12:49:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50642 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232647AbiATRtz (ORCPT ); Thu, 20 Jan 2022 12:49:55 -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 8B4AFC061574 for ; Thu, 20 Jan 2022 09:49:55 -0800 (PST) Received: by mail-pg1-x549.google.com with SMTP id t27-20020a63461b000000b00342c204e4f3so4070759pga.11 for ; Thu, 20 Jan 2022 09:49:55 -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=a4Fmbf7OX4NlFD+yy2HAKDoRFTVn4+1yZVnOsBDbZJQ=; b=R079yfba2LPNbVDl9w/bGgG+CQBf+CJnPm1PcRfolWEC6xhObzBKVSdmpmfZyrA/G+ YujORdNiwmH24DNkmsnst7UDFaa5cm44JNaz0IqNMoWtraan4yASsSxNSgPcBPZ5miS6 Q/NEOOd8wss1kPu3sy0+33UF1Q15kHaftq3/MfbswGsN0ETdhj985gH9DddaCQo55Aaz EyZbQbIXxzWHB9u2ZUHpL1Yp0IO6PHn5zmK+l/jjeoBwqUeuZTaq8ATrxCZIhbWOv88E XcwYpjUFt4zPXQhyGcTRbi6+8VkSe7ab3pgVDLn5VbTFs1k7TmIjPsMKlr14LKI0Th78 2kHA== 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=a4Fmbf7OX4NlFD+yy2HAKDoRFTVn4+1yZVnOsBDbZJQ=; b=EFWPOqrj6Q8XzvPr8zi1b08/tPuu02HKn25O8HpfXXKATeQcM/IamxjUPZDPAnPIjc 36yxPpyPwxf2M41fb2c571/EtIbAwJlIXhXCt3wafly90q4ifwFs6TCpencNPsrC4l/f 12F6yPi7qN3G8iE3x22vGjb9p6uOF5hLWrYhoqNw4xcg/Zpf3grgsr56/e7GG+JmAJ0A 2SswHCg2iknn4X61FN/GimLw9plsBbH81GYw3ZozWV41iCNw2llvkFlkcwViCmAeNXjA FcD0FqClPuqP2AaKb83Hzh9zMgHzvP3JO4IS6PLuH6wlhqGiDWveSKLz1P/CAPCynZex xA5Q== X-Gm-Message-State: AOAM532bgtDguy5rLbP2LqmRKdxI4lblYgC+gcRDk2vn5+kHXdRDKckz O3NH35rMGyFYSfyf5HX0ymeQ5YsahYjJkEZ/HjeZAe7Onn5GD2dQL/gXx856Uf+nIRQC79R4aqr B6OA9oP9PBRvpWcDtVRIilEzK8q1Xrq8FKuMZ4oekZk0/g28MCE0rUM4u0OQtSHk= X-Google-Smtp-Source: ABdhPJxoVkvT5K8F8ul6qHQxw0hsYQj0tRPDgmx/I6wBKg0bAANNaTlfwcFTiOLRiaXIXdNJpY0GYu7tVsF6ow== X-Received: from chooglen.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:26d9]) (user=chooglen job=sendgmr) by 2002:a17:90b:17d2:: with SMTP id me18mr80460pjb.79.1642700994966; Thu, 20 Jan 2022 09:49:54 -0800 (PST) Date: Thu, 20 Jan 2022 09:49:42 -0800 In-Reply-To: <20220120174942.94231-1-chooglen@google.com> Message-Id: <20220120174942.94231-4-chooglen@google.com> Mime-Version: 1.0 References: <20220119000056.58503-1-chooglen@google.com> <20220120174942.94231-1-chooglen@google.com> X-Mailer: git-send-email 2.34.1.703.g22d0c6ccf7-goog Subject: [PATCH v7 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 , Jiang Xin 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 | 25 ++++++++++++++++++++++++- t/t5516-fetch-push.sh | 12 ++++++++++++ t/t5702-protocol-v2.sh | 12 ++++++++++++ 4 files changed, 49 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..efd1c9bb41 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,28 @@ 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(_("options '%s' and '%s' cannot be used together"), + "--negotiate-only", "--recurse-submodules"); + } + } + 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" &&