From patchwork Wed Jan 19 00:00:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Glen Choo X-Patchwork-Id: 12716998 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 B0F7EC433F5 for ; Wed, 19 Jan 2022 00:01:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350324AbiASABI (ORCPT ); Tue, 18 Jan 2022 19:01:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46866 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350322AbiASABH (ORCPT ); Tue, 18 Jan 2022 19:01:07 -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 43E82C061574 for ; Tue, 18 Jan 2022 16:01:07 -0800 (PST) Received: by mail-pj1-x1049.google.com with SMTP id ft15-20020a17090b0f8f00b001b4f9b64cc7so348609pjb.8 for ; Tue, 18 Jan 2022 16:01:07 -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=kZ/9oSC6MX0XDmlNcQ7MKYmprD1BVYL3RonSfGyZKT42E+m4B+rb4PQDDEa2RIcexM s5dcQVViFeoIVXF1M3f6jkFZQtMhBlJ/ZQEmKkEO9sesCPlGcYNIIGRiB4tdS2IcEO+2 BKTMD2Lp9UK9LtP1psO8DV2iVOz1dWQ5aMEw9u9y6NbYS4RBkn4Ap0+iVmJSnzKPlDRS PXGGeYiLwY5fwtZacQmPOXL7vEyfiOSO2sX8YQZdqSn5kmLCEnozOWsCY+IseV8l/XkH L5evVVcQZ0gmPmovXja1K+6sZfbA/ugzv7XI/3GvYZ5g5GBQWQpC3RlJF5xUIjbZ9K4k EbVg== 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=i6ifHrzf+Hrv7grm2fZb3uSegfLB6lV9btVJucnUqJovtpH+9llPCBZhclKc/VROTw ZGA74hCDlIJwxwY4pOrW1YsbyTf+G1Ykt5dVqjzOhYaC9Jd3ZMAXDQRFhGLdO4KndK+e O6MvvoXQCgVNvvmA0CmwzfuWlnX9fIiPIqmRDdfRZVLKUoN78aiH8AXSLdihHXEmYxpN +lC5UFKjsec35N5lW1wYYkqdHm6qeBMhB8SGC+lz616OLXuxQyWnDcK7B8jbkWG7Sri9 HSqMnTUzWU71X/G/EAmkr9Hux60r1qTRdVyl5oCKFNTsSZVCtXQM8nOA0SUsnmXN/t4k 6Bkg== X-Gm-Message-State: AOAM531OFofwz2A6cO+IvfJ6mX1SHLnaWAF7m29tZfng0WhwandknRE1 6iHwxl96taKwvQNrmle7NW6pTD5hzwvBE4McOYq3wmk3vJKnnhHKW083m7hMh9CJ+MGnA14Nv6y w5VT35pwR/dA/2deDI0z12T9JQfmJW/LghtbVpnxa/9WZT5T9+VB3qRsT1pjIEBc= X-Google-Smtp-Source: ABdhPJzYkIBbazZqjYJUPNpijXWzyLCIQrkA6rXXEvO7yRwi3kkxBA9ox1dVW56+q7ggo3phSkpSShttFhewug== X-Received: from chooglen.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:26d9]) (user=chooglen job=sendgmr) by 2002:a17:902:6bcc:b0:14a:bd99:1ae9 with SMTP id m12-20020a1709026bcc00b0014abd991ae9mr11671972plt.62.1642550466470; Tue, 18 Jan 2022 16:01:06 -0800 (PST) Date: Tue, 18 Jan 2022 16:00:54 -0800 In-Reply-To: <20220119000056.58503-1-chooglen@google.com> Message-Id: <20220119000056.58503-2-chooglen@google.com> Mime-Version: 1.0 References: <20220118185453.33710-1-chooglen@google.com> <20220119000056.58503-1-chooglen@google.com> X-Mailer: git-send-email 2.34.1.703.g22d0c6ccf7-goog Subject: [PATCH v6 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 Wed Jan 19 00:00:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Glen Choo X-Patchwork-Id: 12716999 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 242F2C433EF for ; Wed, 19 Jan 2022 00:01:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350331AbiASABK (ORCPT ); Tue, 18 Jan 2022 19:01:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46888 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350326AbiASABJ (ORCPT ); Tue, 18 Jan 2022 19:01:09 -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 D023BC06173E for ; Tue, 18 Jan 2022 16:01:09 -0800 (PST) Received: by mail-pf1-x449.google.com with SMTP id c72-20020a621c4b000000b004c33fe0a79dso513370pfc.21 for ; Tue, 18 Jan 2022 16:01:09 -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=L8lK1D1YgCeWjW2b1QdMkN6K/aDS0t5PU6zU6ORBcJLKftYF7Tzy9QiFP0gn5Go6vW 8zkeqcLgCnY2vuJeweLsF0Qo9t9fAuUySHf7D+0xeIHr+o8eePRVXGPIcyqRSOwrjjex Cp5nGY3XLre3ZDt9oEirULoEw15nmNYDohGgdWxTOPyim9xyyWiL7Fw5SmXEucF4rf8b bxHndf3nfN3lP02D6WtZ5K1aL5XmzZ2lt086Sdwv7l6o2HBG+IoLRrihYXfxnosBzHqT nJ3lA6NagE1CNQ/IJ42rky1rNrXH0yzZRySAqF7AwAP8q7OvAsRJ2KMfBwZZN2QsbVXL hVFg== 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=JCnD2zcTw5PZ9+BT1CO99uQr/VvwjYVcTUtrDwW/dOObVfxKltRbmbmfqHmC5o19mi fkbugRMs0awan8e55PFI4FcRiErtTZGHZGoRnR3/DNz3cCxvb4RODfQhp3Pn0Jp1v6YX E6hyRmWqRIwr6r5KOmJhvfonoZBpPObY6dds+xGcDN1+SXaqBdnu9+p6jVKMxbEO75+0 c7M8q/6czkQK+HfuImAMWjzK0m57/RQQW5Uw9NtUxPKidBCKK3PLgyT9TKK4XZc4MJpo 6MTAsGm3pm6JE3RuxDaZRczfY+53lMg6KApSvjHBUcKvn/rSiyJZMgOSrYyVp73TklIP rcOg== X-Gm-Message-State: AOAM531dr9gRE/KnN5mpRqhaDyHjvTNx3O6LbgjAJS2u7pldUib10qv4 VnCZn//pLtw8cBV4QmrP2E7E8diJXDI2TCY5DIyAC1r4PAmxsjs2sIIk+4ubBJnO7AG79f4eU/A bLHUXyfPsceoab/p3BxqoUg26UQb/EZmXvqn9JovELskKlaEAiAlPT7ultOmdz6Y= X-Google-Smtp-Source: ABdhPJxeHXbrlo4V79kcBhXfKe2AWV06/45dmdnpy3se6b7hiDxv4lB4x5+0bEp49fEq4Y0Y6dcDg0DVXoZAwA== X-Received: from chooglen.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:26d9]) (user=chooglen job=sendgmr) by 2002:a17:90a:410a:: with SMTP id u10mr241879pjf.1.1642550468701; Tue, 18 Jan 2022 16:01:08 -0800 (PST) Date: Tue, 18 Jan 2022 16:00:55 -0800 In-Reply-To: <20220119000056.58503-1-chooglen@google.com> Message-Id: <20220119000056.58503-3-chooglen@google.com> Mime-Version: 1.0 References: <20220118185453.33710-1-chooglen@google.com> <20220119000056.58503-1-chooglen@google.com> X-Mailer: git-send-email 2.34.1.703.g22d0c6ccf7-goog Subject: [PATCH v6 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 Wed Jan 19 00:00:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Glen Choo X-Patchwork-Id: 12717000 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 A048AC433FE for ; Wed, 19 Jan 2022 00:01:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1350338AbiASABM (ORCPT ); Tue, 18 Jan 2022 19:01:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46896 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350322AbiASABL (ORCPT ); Tue, 18 Jan 2022 19:01:11 -0500 Received: from mail-pj1-x104a.google.com (mail-pj1-x104a.google.com [IPv6:2607:f8b0:4864:20::104a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7CE74C061574 for ; Tue, 18 Jan 2022 16:01:11 -0800 (PST) Received: by mail-pj1-x104a.google.com with SMTP id a22-20020a17090abe1600b001b39929b5fdso581361pjs.0 for ; Tue, 18 Jan 2022 16:01:11 -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=rf33oGAQGLNE3IYbv2nOi5fRqqva1j1Bb2HcZzPRLNw=; b=UqKICOVKQ7Hfoy4iHUmNp9hYm9lsX+GJGQF6TSVdGgEJX0es3NKZyWMR8aaMHSqHGz Ek2wVOmn2g2zI8TeSwjN7EevyJooUVFHxPQaXfuzOwO6UPvwF5voASAPxJvNKhQFFzOj 4Cj/seYagYez8zMiJnHGEPxs5dtgDeIjVpxOeKZQyW4/tDBPodLV4gudP3I9GseFfrFY ht68Zebjf8+AD4osv52p4s+42W9lCnNeirJ2dsIij55lLoExodioL89MhQT2LF/2e9Xw VOzWNWeSZEHYhYnnWD48Stfq2SB5iV1f8bdCbBUY3Fv1h6tm16pmCv5CoLCnlEBF/JJ9 ciUA== 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=rf33oGAQGLNE3IYbv2nOi5fRqqva1j1Bb2HcZzPRLNw=; b=SWqYmAZ7iYzZt7ZUUMU1jKOy+ViMrFE2xKnzoQSfTGwP1v0PHGFVtu2ka70GgonHTa JDfQ61wUEbULWbNYYpo9PKfZaDDuzWV/twI/Rc6IUHXco/Yd3IekDKsifWCo90zKc1BI BwO+MWAF+ySOcmOK4n5FBxBRemUL7Y4N7qY+m63criSNylGH+x7rVmp8UhQaVQg4Iky8 AjurOIlfUO+bYAjuaLQXg9NQs3o/tCsYrj4a/3ELqC1gvaBUC6GCD2pAcikufwxbuYJ6 +JQ7IR+vITbB2y2Xi4azxPuO6T3ujCmYU/HUFnZO/EN1Zy2/akCCwIgjhBN3G8GF9S19 cSsQ== X-Gm-Message-State: AOAM530bI3YtOPx2VWehu99Qn391hoT8daPRpCvXQkEcEwcK0FlRdpgj xB9KtgvgfxdM23o3f4Wk4/wX6XHutBlXdLjY4DAUR0CM5ugJQQ5TXfi/KWZ8dUnoYbCIpfm0QMp uI841Tqf9lhGj2zsmHa3Bm+nfM2H1IIuDKE1MJdIlwYpFORvXmf8cmtcLR0qCs/c= X-Google-Smtp-Source: ABdhPJwaBwOMLa8MQ9QYBn2BtjUXWRcweE1PUm22Rb6isOvRcRAIyqLuWMHXgJTzNYXcatIWU9AWNA+VFBRpNA== X-Received: from chooglen.c.googlers.com ([fda3:e722:ac3:cc00:24:72f4:c0a8:26d9]) (user=chooglen job=sendgmr) by 2002:a17:903:1249:b0:149:a59c:145a with SMTP id u9-20020a170903124900b00149a59c145amr30164850plh.108.1642550470894; Tue, 18 Jan 2022 16:01:10 -0800 (PST) Date: Tue, 18 Jan 2022 16:00:56 -0800 In-Reply-To: <20220119000056.58503-1-chooglen@google.com> Message-Id: <20220119000056.58503-4-chooglen@google.com> Mime-Version: 1.0 References: <20220118185453.33710-1-chooglen@google.com> <20220119000056.58503-1-chooglen@google.com> X-Mailer: git-send-email 2.34.1.703.g22d0c6ccf7-goog Subject: [PATCH v6 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..fef4332fb1 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" &&