From patchwork Thu Mar 10 00:44:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Emily Shaffer X-Patchwork-Id: 12775744 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 8A627C433EF for ; Thu, 10 Mar 2022 00:44:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238039AbiCJApe (ORCPT ); Wed, 9 Mar 2022 19:45:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38700 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236620AbiCJApd (ORCPT ); Wed, 9 Mar 2022 19:45:33 -0500 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 69B93ECB0D for ; Wed, 9 Mar 2022 16:44:33 -0800 (PST) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-2dbf4238d6bso28262237b3.2 for ; Wed, 09 Mar 2022 16:44:33 -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=Bozg4nijLiLzecdCqf0knhUu2/KxfG61cwbxJu4hPRc=; b=YbwJunigJHaUho1j7dHn5JB2oT+UOtwMl0v/wa3C4GbSLO7pt0h8RCQyWVNbxkblpI qH+z5TsgQmW+Os772wsbIPno1bLhL5mdWQPr9aU+LEZsHR/087V0MmN6cmUA/qN6JH1l kbCULs/6Kxt1FtOrlim5ceTzxU/EvhIhMOHRnKYTPgVRNgsLkxFDOd0SHDe61FqunGF5 dUMQ4Zyyo4w6k9ADr6eskls/OkMA5mw3gH9RAQ3gMZYDDCPu60b8G1jDEKOlr4CFDR+W 01qOzoeLrLgmNaFpgtsA+wVvdYLC5wDqJeXUNGcAlv04gCvzhHwhSlAA9ctCGTgg1ER2 Rd7A== 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=Bozg4nijLiLzecdCqf0knhUu2/KxfG61cwbxJu4hPRc=; b=FzGg8SjPxdJmejzSQBuMZvGaPSJG+/HmDm6SDF9Xj8zQXdTlkyRQynQjDf4LMJudc/ +sqcgAtbShCBOGzPb5CGTsfYgK1Z4EsWrD1Dxpq04yD5QdrWS1OMOOPARZJFcBytM72P vF58L/XfW5S8ZmuUlppg6eeh/G5Hxm8MN2m1yI5PvjMixC4AcuXGyChzfcxBNzeDeD3s v+YQf55sWG327+Wqq8dbMu9EXv/swERG3muxF2MD8IGWCE6/aLbt0vLTOf7O/DNNaQRZ 5cNijjxa0ZEk0gW8B8cnf8seGxBgIBkMRwkTtA/XvDQ4mCkkojvF8Un+VszT5ADLxLo8 wtpw== X-Gm-Message-State: AOAM530UGEBnTvyjMKGHs2KtmwAiPyxd7ipgvUgQWgqFkaCAwsa170Tl iDJTBAqLZThlEnrQBEPi+5Bdab1dH+y2DVHYWpu/cM3bsRSkaD97L3APaaxK8gVHMO/r9w3SoFB d/q2O5vq2bpMbzp1VIH6dGI+weo3RUs2QSIwZ/tjydDj5Cl9GDZKJ6DeycGDsbe2HMTBa314oEQ == X-Google-Smtp-Source: ABdhPJxe/9kVkgTpaD5Zo5wyrqeTRkz3uRkFEo7u5+OV3P+DGnpJ07TP2omA/OCgdtr59Z2jmboKyHo32XjTw2sEonQ= X-Received: from podkayne.svl.corp.google.com ([2620:15c:2ce:200:e0ed:468:c28b:9b23]) (user=emilyshaffer job=sendgmr) by 2002:a25:8187:0:b0:628:944c:e2cb with SMTP id p7-20020a258187000000b00628944ce2cbmr1990088ybk.19.1646873072549; Wed, 09 Mar 2022 16:44:32 -0800 (PST) Date: Wed, 9 Mar 2022 16:44:21 -0800 In-Reply-To: <20220310004423.2627181-1-emilyshaffer@google.com> Message-Id: <20220310004423.2627181-2-emilyshaffer@google.com> Mime-Version: 1.0 References: <20220310004423.2627181-1-emilyshaffer@google.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog Subject: [PATCH v9 1/3] t7400-submodule-basic: modernize inspect() helper From: Emily Shaffer To: git@vger.kernel.org Cc: Emily Shaffer Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Since the inspect() helper in the submodule-basic test suite was written, 'git -C ' was added. By using -C, we no longer need a reference to the base directory for the test. This simplifies callsites, and will make the addition of other arguments in later patches more readable. Signed-off-by: Emily Shaffer --- t/t7400-submodule-basic.sh | 40 +++++++++++++++----------------------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index e7cec2e457..40cf8d89aa 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -107,23 +107,15 @@ test_expect_success 'setup - repository to add submodules to' ' # generates, which will expand symbolic links. submodurl=$(pwd -P) -listbranches() { - git for-each-ref --format='%(refname)' 'refs/heads/*' -} - inspect() { - dir=$1 && - dotdot="${2:-..}" && - - ( - cd "$dir" && - listbranches >"$dotdot/heads" && - { git symbolic-ref HEAD || :; } >"$dotdot/head" && - git rev-parse HEAD >"$dotdot/head-sha1" && - git update-index --refresh && - git diff-files --exit-code && - git clean -n -d -x >"$dotdot/untracked" - ) + sub_dir=$1 && + + git -C "$sub_dir" for-each-ref --format='%(refname)' 'refs/heads/*' >heads && + { git -C "$sub_dir" symbolic-ref HEAD || :; } >head && + git -C "$sub_dir" rev-parse HEAD >head-sha1 && + git -C "$sub_dir" update-index --refresh && + git -C "$sub_dir" diff-files --exit-code && + git -C "$sub_dir" clean -n -d -x >untracked } test_expect_success 'submodule add' ' @@ -146,7 +138,7 @@ test_expect_success 'submodule add' ' ) && rm -f heads head untracked && - inspect addtest/submod ../.. && + inspect addtest/submod && test_cmp expect heads && test_cmp expect head && test_must_be_empty untracked @@ -248,7 +240,7 @@ test_expect_success 'submodule add --branch' ' ) && rm -f heads head untracked && - inspect addtest/submod-branch ../.. && + inspect addtest/submod-branch && test_cmp expect-heads heads && test_cmp expect-head head && test_must_be_empty untracked @@ -264,7 +256,7 @@ test_expect_success 'submodule add with ./ in path' ' ) && rm -f heads head untracked && - inspect addtest/dotsubmod/frotz ../../.. && + inspect addtest/dotsubmod/frotz && test_cmp expect heads && test_cmp expect head && test_must_be_empty untracked @@ -280,7 +272,7 @@ test_expect_success 'submodule add with /././ in path' ' ) && rm -f heads head untracked && - inspect addtest/dotslashdotsubmod/frotz ../../.. && + inspect addtest/dotslashdotsubmod/frotz && test_cmp expect heads && test_cmp expect head && test_must_be_empty untracked @@ -296,7 +288,7 @@ test_expect_success 'submodule add with // in path' ' ) && rm -f heads head untracked && - inspect addtest/slashslashsubmod/frotz ../../.. && + inspect addtest/slashslashsubmod/frotz && test_cmp expect heads && test_cmp expect head && test_must_be_empty untracked @@ -312,7 +304,7 @@ test_expect_success 'submodule add with /.. in path' ' ) && rm -f heads head untracked && - inspect addtest/realsubmod ../.. && + inspect addtest/realsubmod && test_cmp expect heads && test_cmp expect head && test_must_be_empty untracked @@ -328,7 +320,7 @@ test_expect_success 'submodule add with ./, /.. and // in path' ' ) && rm -f heads head untracked && - inspect addtest/realsubmod2 ../.. && + inspect addtest/realsubmod2 && test_cmp expect heads && test_cmp expect head && test_must_be_empty untracked @@ -359,7 +351,7 @@ test_expect_success 'submodule add in subdirectory' ' ) && rm -f heads head untracked && - inspect addtest/realsubmod3 ../.. && + inspect addtest/realsubmod3 && test_cmp expect heads && test_cmp expect head && test_must_be_empty untracked From patchwork Thu Mar 10 00:44:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Emily Shaffer X-Patchwork-Id: 12775745 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 4142DC433EF for ; Thu, 10 Mar 2022 00:44:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238998AbiCJApl (ORCPT ); Wed, 9 Mar 2022 19:45:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38916 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236620AbiCJApg (ORCPT ); Wed, 9 Mar 2022 19:45:36 -0500 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B9081124C32 for ; Wed, 9 Mar 2022 16:44:35 -0800 (PST) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-2dcfa6bab2aso27614407b3.22 for ; Wed, 09 Mar 2022 16:44:35 -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=cp6IOYH4t5C+BU7osL6iM6GPWAHCzdtti9ip2r2AJak=; b=A3UHWus1wqTTCztH3TaKr4LOEpiFRqfbJ8SprDIY5ULsp2aj69jhWSq4kn8MSkbfNM oa0Ngon/WqcQvgwo7xeE8qxWurwVS44oRyLwaZuaPOxepuhcqpG8yeQTsWqxfy3OxRfO EEDAxzEoLw9kak/UrM7WdcH4Fg3DVyrD7LOPvQe91hjIxXqeU7HTmmcSWMc4DVgmkrZ4 hgu8BTUBaQNg/JGmRd/39DtuSK/3ejrN170DGu3h+agvvjeVjF8SYcpPCu77N4ERRu00 AOqzYbqNdbgaH/MFjVmQN74vlh9ymq9nlOBitFyANddErz3PFlk9si1u4zNlMnMlfK0U H2yA== 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=cp6IOYH4t5C+BU7osL6iM6GPWAHCzdtti9ip2r2AJak=; b=ZCuUWjOz4EYePKArzYcX2zBwc5EqaH9PBUZGFfu1z0Tah0aTBrl9go8tfPawrLD0xM QmIXjQJK1aLUI7ucKvgMZPb43e1hZ2Hbd553SZLT5musf8VRrQ+nOys5UvxkqmtJ+pfi R7imxUIPQfMOhZUvQYnBzszy1TVppIyzwmVYyC2LMWuhkxsqYsE0LDVzniNPzHvB5zkD kHqv8BODThVjIv2tzQXIiK7uSU89Y2jaevPxtObfrYIdun3cm6QktBRRr7HCMRxKWvkD p2YCADHSKyx2wdBEHkw0kw/f3+O8hwXJpC/7XpmDqlei7pN+RU+aynUes7e+iJnx5He5 RHQg== X-Gm-Message-State: AOAM533pEIXtVRFTNUQuy2FQzzAJzS/Aenap+MktH0XVquy7+YKPmrwI kXdkaK9cYHbCCq7DiTwKRmI2kVHJGX0ttkApqDGNs4FvpZq6i6fDzFUy62nV0FhFDLwrMtv0EGb cMeasMhA40GPyLQgknKrAXPLqmv3EbsjOSknLQJ8nKds16LOh6G/CjbvpQu5Hk/ewRMCY1G8Q+A == X-Google-Smtp-Source: ABdhPJzwnpc4zLxRVBg7paNPLvIKZnp/sMEIGYXdl5CVE1tIUo1L2Tmt1Iq17GTrkxlk9wkhGkfeelW/FIBK27PXPFg= X-Received: from podkayne.svl.corp.google.com ([2620:15c:2ce:200:e0ed:468:c28b:9b23]) (user=emilyshaffer job=sendgmr) by 2002:a25:8487:0:b0:628:9d12:64d5 with SMTP id v7-20020a258487000000b006289d1264d5mr2068983ybk.70.1646873074912; Wed, 09 Mar 2022 16:44:34 -0800 (PST) Date: Wed, 9 Mar 2022 16:44:22 -0800 In-Reply-To: <20220310004423.2627181-1-emilyshaffer@google.com> Message-Id: <20220310004423.2627181-3-emilyshaffer@google.com> Mime-Version: 1.0 References: <20220310004423.2627181-1-emilyshaffer@google.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog Subject: [PATCH v9 2/3] introduce submodule.hasSuperproject record From: Emily Shaffer To: git@vger.kernel.org Cc: Emily Shaffer , Junio C Hamano Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Teach submodules a config variable indicating the fact that they are a submodule. If this config is set to false or unset, Git may assume the current repo is not a submodule. Git commands can use this variable to decide whether to traverse the filesystem and look for a superproject at all. 'git rev-parse --show-superproject-working-tree' can learn to exit early if this config is unset or false. Other newly added or implicit behavior - like "git status" showing the submodule's status in relation to the superproject, or a config shared between the superproject and submodule - can use this config to decide whether to search the parent directory to find a superproject. Introduce this config everywhere we add a new submodule, or touch one that already exists, so that we can proliferate it in repos which are already out in the world using submodules. Signed-off-by: Emily Shaffer Helped-by: Junio C Hamano --- Documentation/config/submodule.txt | 6 ++++ builtin/submodule--helper.c | 11 +++++++ submodule.c | 12 +++++++ t/t7400-submodule-basic.sh | 4 +++ t/t7406-submodule-update.sh | 8 +++++ t/t7412-submodule-absorbgitdirs.sh | 50 ++++++++++++++++++++++++++++-- 6 files changed, 89 insertions(+), 2 deletions(-) diff --git a/Documentation/config/submodule.txt b/Documentation/config/submodule.txt index ee454f8126..99d5260b8e 100644 --- a/Documentation/config/submodule.txt +++ b/Documentation/config/submodule.txt @@ -91,3 +91,9 @@ submodule.alternateErrorStrategy:: `ignore`, `info`, `die`. Default is `die`. Note that if set to `ignore` or `info`, and if there is an error with the computed alternate, the clone proceeds as if no alternate was specified. + +submodule.hasSuperproject:: + Indicates whether this repository is a submodule. If this config is set + to 'true', Git may traverse the filesystem above this submodule in order + to identify the superproject. It is set automatically during submodule + creation, update, and 'git submodule absorbgitdir'. diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index c5d3fc3817..eda9ed550e 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -1839,6 +1839,11 @@ static int clone_submodule(struct module_clone_data *clone_data) git_config_set_in_file(p, "submodule.alternateErrorStrategy", error_strategy); + /* + * Teach the submodule that it's a submodule. + */ + git_config_set_in_file(p, "submodule.hasSuperproject", "true"); + free(sm_alternate); free(error_strategy); @@ -2617,6 +2622,12 @@ static int run_update_procedure(int argc, const char **argv, const char *prefix) free(prefixed_path); + /* + * This entry point is always called from a submodule, so this is a + * good place to set a hint that this repo is a submodule. + */ + git_config_set("submodule.hasSuperproject", "true"); + if (!oideq(&update_data.oid, &update_data.suboid) || update_data.force) return do_run_update_procedure(&update_data); diff --git a/submodule.c b/submodule.c index c689070524..aafbd628ad 100644 --- a/submodule.c +++ b/submodule.c @@ -2097,6 +2097,8 @@ static void relocate_single_git_dir_into_superproject(const char *path) char *old_git_dir = NULL, *real_old_git_dir = NULL, *real_new_git_dir = NULL; struct strbuf new_gitdir = STRBUF_INIT; const struct submodule *sub; + struct config_set sub_cs; + struct strbuf config_path = STRBUF_INIT, sb = STRBUF_INIT; if (submodule_uses_worktrees(path)) die(_("relocate_gitdir for submodule '%s' with " @@ -2127,6 +2129,16 @@ static void relocate_single_git_dir_into_superproject(const char *path) relocate_gitdir(path, real_old_git_dir, real_new_git_dir); + strbuf_addf(&config_path, "%s/config", real_new_git_dir); + git_configset_init(&sub_cs); + git_configset_add_file(&sub_cs, config_path.buf); + + git_config_set_in_file(config_path.buf, "submodule.hasSuperproject", + "true"); + + git_configset_clear(&sub_cs); + strbuf_release(&config_path); + strbuf_release(&sb); free(old_git_dir); free(real_old_git_dir); free(real_new_git_dir); diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index 40cf8d89aa..53c8bf699d 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -115,6 +115,10 @@ inspect() { git -C "$sub_dir" rev-parse HEAD >head-sha1 && git -C "$sub_dir" update-index --refresh && git -C "$sub_dir" diff-files --exit-code && + + # Ensure that submodule.hasSuperproject is set. + test_cmp_config -C "$sub_dir" true --type=bool "submodule.hasSuperproject" + git -C "$sub_dir" clean -n -d -x >untracked } diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh index 11cccbb333..ec2397fc69 100755 --- a/t/t7406-submodule-update.sh +++ b/t/t7406-submodule-update.sh @@ -1061,4 +1061,12 @@ test_expect_success 'submodule update --quiet passes quietness to fetch with a s ) ' +test_expect_success 'submodule update adds submodule.hasSuperproject to older repos' ' + (cd super && + test_unconfig submodule.hasSuperproject && + git submodule update && + test_cmp_config -C submodule true --type=bool submodule.hasSuperproject + ) +' + test_done diff --git a/t/t7412-submodule-absorbgitdirs.sh b/t/t7412-submodule-absorbgitdirs.sh index 1cfa150768..4c33a98efa 100755 --- a/t/t7412-submodule-absorbgitdirs.sh +++ b/t/t7412-submodule-absorbgitdirs.sh @@ -30,7 +30,9 @@ test_expect_success 'absorb the git dir' ' git status >actual.1 && git -C sub1 rev-parse HEAD >actual.2 && test_cmp expect.1 actual.1 && - test_cmp expect.2 actual.2 + test_cmp expect.2 actual.2 && + + test_cmp_config -C sub1 true --type=bool submodule.hasSuperproject ' test_expect_success 'absorbing does not fail for deinitialized submodules' ' @@ -61,7 +63,9 @@ test_expect_success 'absorb the git dir in a nested submodule' ' git status >actual.1 && git -C sub1/nested rev-parse HEAD >actual.2 && test_cmp expect.1 actual.1 && - test_cmp expect.2 actual.2 + test_cmp expect.2 actual.2 && + + test_cmp_config -C sub1/nested true --type=bool submodule.hasSuperproject ' test_expect_success 're-setup nested submodule' ' @@ -130,4 +134,46 @@ test_expect_success 'absorbing fails for a submodule with multiple worktrees' ' test_i18ngrep "not supported" error ' +test_expect_success 'absorbgitdirs works when called from a superproject worktree' ' + # set up a worktree of the superproject + git worktree add wt && + ( + cd wt && + + # create a new unembedded git dir + git init sub4 && + test_commit -C sub4 first && + git submodule add ./sub4 && + test_tick && + + # absorb the git dir + git submodule absorbgitdirs sub4 && + + # make sure the submodule noted the superproject + test_cmp_config -C sub4 true --type=bool submodule.hasSuperproject + ) +' + +test_expect_success 'absorbgitdirs works with a submodule with worktree config' ' + # reuse the worktree of the superproject + ( + cd wt && + + # create a new unembedded git dir + git init sub5 && + test_commit -C sub5 first && + git submodule add ./sub5 && + test_tick && + + # turn on worktree configs for submodule + git -C sub5 config extensions.worktreeConfig true && + + # absorb the git dir + git submodule absorbgitdirs sub5 && + + # make sure the submodule noted the superproject + test_cmp_config -C sub5 true --type=bool submodule.hasSuperproject + ) +' + test_done From patchwork Thu Mar 10 00:44:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Emily Shaffer X-Patchwork-Id: 12775746 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 DF8EDC433F5 for ; Thu, 10 Mar 2022 00:44:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238536AbiCJApm (ORCPT ); Wed, 9 Mar 2022 19:45:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39066 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238641AbiCJAph (ORCPT ); Wed, 9 Mar 2022 19:45:37 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1518112558B for ; Wed, 9 Mar 2022 16:44:38 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id b12-20020a056902030c00b0061d720e274aso3063602ybs.20 for ; Wed, 09 Mar 2022 16:44:37 -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=RffSdoI9rGHS3QDkc4PdZt5EMNurSxkFhWtc/dr9MaU=; b=svJmfEQeqv1aiDcmYluUCS7oOcdJoGRM8u+d14BNsntIJR060495nMUn4VbLYLxNSM wN9RlsdCdXXusCGLdyxA1c86OdlFnlPZ8osLFJwcUFTnyRBdMw77e7jkWVYEUwd8aoLX YtcUtHtAqlhHfTdZAXzrY66+dG5OApqtu7WoPJKZ8PC57Qk8Vj28tsM5IjJ+lfQD4Q95 poqv1y9TcgxSY6F/GdGVtiLOr6ObEkf/T8ANzgFL/+hvOgMjtifuVC6KkkElkf6apcRC pR/4ofRhJKeqgrRktMTy92UUGRT5wqiCc8zdnspWU/wFpOWnMjRdnc5yeOkqdzil66Hq p1zQ== 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=RffSdoI9rGHS3QDkc4PdZt5EMNurSxkFhWtc/dr9MaU=; b=pvEZNdAuGnxDmZcgy0bhJDUT/6qyKSliA+jpWH67XwV9ocbY76uqubBfpEJcte3IR7 UmeG3b8i5b5EFzc1sfK7yR2Y5Vb5jvdt/p8b9wUAjf34QuhbvoBtcgOA24zDpDA1mVcZ bFW4VlWwHSL1kihbwQO/gHfxhO4pVIutltjTdZEhYqCG4yO84y3jW4T3cq+yQfC74XHa r4YccW5IwLqEnCdOdC9a5z4G60+E89q1orOwyOmtLZsUcWy4nsuzkYcbdx7aMXk7zZj8 kvSGanrUvbgfiHJy7fX/vElT9ieGJJJn8+0fAFXtdVvI10WXLA2uBiSZH/UGQigNWnQz zSEw== X-Gm-Message-State: AOAM533D05pylphHR2zQqMRdFqvJd55cjKbAfoGunVFjbwk0pAyP46O/ PuBcUaxka+PjRgn/N7MmJTksqDE1PIsxddgUVVcjkNp4J1WMdhi/yWEke2dlsACx128qyFDXw5E MqSBMWJuYvO2lczSmx4y+KXwW+cf9z0/8+4anIjncflZTXfeZNVwOBIP18baG4sbrrqjw86LMtA == X-Google-Smtp-Source: ABdhPJz5M9HLcn20f79tJ34cpb4PW8Wi7EnoVjfLV7oR1C1aZ/8NcLfBiU7SVD8JxwFNy5sSdW4LDgN3vngKUp/0avg= X-Received: from podkayne.svl.corp.google.com ([2620:15c:2ce:200:e0ed:468:c28b:9b23]) (user=emilyshaffer job=sendgmr) by 2002:a25:8a06:0:b0:628:cac2:146e with SMTP id g6-20020a258a06000000b00628cac2146emr2037096ybl.248.1646873077179; Wed, 09 Mar 2022 16:44:37 -0800 (PST) Date: Wed, 9 Mar 2022 16:44:23 -0800 In-Reply-To: <20220310004423.2627181-1-emilyshaffer@google.com> Message-Id: <20220310004423.2627181-4-emilyshaffer@google.com> Mime-Version: 1.0 References: <20220310004423.2627181-1-emilyshaffer@google.com> X-Mailer: git-send-email 2.35.1.616.g0bdcbb4464-goog Subject: [PATCH v9 3/3] rev-parse: short-circuit superproject worktree when config unset From: Emily Shaffer To: git@vger.kernel.org Cc: Emily Shaffer Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org In the previous commit, submodules learned a config 'submodule.hasSuperproject' to indicate whether or not we should attempt to traverse the filesystem to find their superproject. To help test that this config was added everywhere it should have been, begin using it to decide whether to exit early from 'git rev-parse --show-superproject-working-dir'. Because that command is fairly old, only short-circuit if the new config was explicitly set to false. Signed-off-by: Emily Shaffer --- submodule.c | 18 ++++++++++++++++++ t/t1500-rev-parse.sh | 10 +++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/submodule.c b/submodule.c index aafbd628ad..64760f1e3a 100644 --- a/submodule.c +++ b/submodule.c @@ -2231,6 +2231,7 @@ int get_superproject_working_tree(struct strbuf *buf) struct strbuf sb = STRBUF_INIT; struct strbuf one_up = STRBUF_INIT; const char *cwd = xgetcwd(); + int has_superproject_cfg = 0; int ret = 0; const char *subpath; int code; @@ -2244,6 +2245,23 @@ int get_superproject_working_tree(struct strbuf *buf) */ return 0; + /* + * Because get_superproject_working_tree() is older than + * submodule.hasSuperproject, don't rely on the default "unset = false" + * - instead, only rely on if submodule.hasSuperproject was explicitly + * set to false. + */ + if (! git_config_get_bool("submodule.hassuperproject", &has_superproject_cfg) + && !has_superproject_cfg) { + /* + * If we don't have a superproject, then we're probably not a + * submodule. If this is failing and shouldn't be, investigate + * why the config was set to false. + */ + error(_("Asked to find a superproject, but submodule.hasSuperproject == false")); + return 0; + } + if (!strbuf_realpath(&one_up, "../", 0)) return 0; diff --git a/t/t1500-rev-parse.sh b/t/t1500-rev-parse.sh index 1c2df08333..dd35036bd6 100755 --- a/t/t1500-rev-parse.sh +++ b/t/t1500-rev-parse.sh @@ -244,7 +244,15 @@ test_expect_success 'showing the superproject correctly' ' test_must_fail git -C super merge branch1 && git -C super/dir/sub rev-parse --show-superproject-working-tree >out && - test_cmp expect out + test_cmp expect out && + + # When submodule.hasSuperproject=false, --show-superproject-working-tree + # should fail instead of checking the filesystem. + test_config -C super/dir/sub submodule.hasSuperproject false && + git -C super/dir/sub rev-parse --show-superproject-working-tree >out && + # --show-superproject-working-tree should print an error about the + # broken config + ! grep "error:.*hasSuperproject" out ' # at least one external project depends on this behavior: