From patchwork Thu Nov 4 23:49:39 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Emily Shaffer X-Patchwork-Id: 12603883 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EB098C433EF for ; Thu, 4 Nov 2021 23:49:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CD66660F02 for ; Thu, 4 Nov 2021 23:49:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232397AbhKDXw2 (ORCPT ); Thu, 4 Nov 2021 19:52:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57498 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231148AbhKDXw1 (ORCPT ); Thu, 4 Nov 2021 19:52:27 -0400 Received: from mail-qt1-x849.google.com (mail-qt1-x849.google.com [IPv6:2607:f8b0:4864:20::849]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C4D0DC061714 for ; Thu, 4 Nov 2021 16:49:48 -0700 (PDT) Received: by mail-qt1-x849.google.com with SMTP id w12-20020ac80ecc000000b002a7a4cd22faso4462097qti.4 for ; Thu, 04 Nov 2021 16:49:48 -0700 (PDT) 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=Ehy1gfPuZPpt5vTCt7qL8FWJE7G8MNrarg2OHwyOr9U=; b=FzGCjUuGAtmULxgifXDkvy/X0eGC0mbXiT2Ze6MCtLk3n0IxHaIz9CzYI3dqKh15A2 tHwfRnb3JsJB/rlymMLl0nLSAqnqLZw86AnWJ12gLeJr9q4deO2onj5KSJmZa0rAokNx nyBh8ONM/WCesWSG1r0sCk9lFnIvrbHaNCIIdHb4Jr4giR/RX+4U0FeaOieB9+npUbwG W7uEOhauYVolOo+G4kUfkLJj+HmPJ50IPJW4PF8zckJfMOdAXW3/3EUCqNZCdaVDY7Da 6b5B25gWe9KgXwltOQgwUrzg7ZtUExy8snBzBmTqC9CxJrIoNpwm6GoVdjyOYc78Qvrr BfDg== 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=Ehy1gfPuZPpt5vTCt7qL8FWJE7G8MNrarg2OHwyOr9U=; b=kIE9XOmi8XgiM7OfZQ0t5AFBvKXTvA7b2+dg1bhx0CzAjhYdU0qdKFF/sTv5ZKq3vQ rHQlO3g2mRuyeif9PbMyWFTg8MZHsNYJzhFEbpUSl+sIsjZoqOK2YaNhsn4Hi6EtiCKT Ms5eaHDg6yogr9YzgJGaCandNYl5f8Uz7pAADPLUd22Wju30dcPPy74b2EwQXz8Io/+M xriQCpmBDozxWjACRtnpL/R3HcM47GzMMhICIvLnMGMpZFKQmjAbsl6ONl0HT0i7rPTl Kq+0T3bEG9IIytXeSZPciUKmj6+11Ezn9qtXW4u2L11RCNOEm/B1oO1iIXsBER7bw0b1 R4JA== X-Gm-Message-State: AOAM530DskLU7L2h3DPWBus3MBthYjcoMjLkMB238THdBpDLz/5jPJ4R e+TNfWX3HjyKQ1v8a89id3TKoAb4pqcv9JDB344LU5V3u+JSqJaRL2nEQM1ueF2oSN3Hoc+i4MM Q6ZExRVD3ijCNylUyZsH1B2B/OvP+ZRfJqM0uslHs/AqlWpfOdRmZGIJjjpg5w973eIRiYVyp9Q == X-Google-Smtp-Source: ABdhPJzfDnhxhkZAc1mMMfwbfU9+MAMQe3ElGYLkWfjzZQALI4kDIC6BcBZls0F7cOQWGfiXmfCLeOaL2h7VUmc78Rs= X-Received: from podkayne.svl.corp.google.com ([2620:15c:2ce:200:35a1:c171:b6f3:d46c]) (user=emilyshaffer job=sendgmr) by 2002:a05:622a:1788:: with SMTP id s8mr28948597qtk.388.1636069787946; Thu, 04 Nov 2021 16:49:47 -0700 (PDT) Date: Thu, 4 Nov 2021 16:49:39 -0700 In-Reply-To: <20211104234942.3473650-1-emilyshaffer@google.com> Message-Id: <20211104234942.3473650-2-emilyshaffer@google.com> Mime-Version: 1.0 References: <20211104234942.3473650-1-emilyshaffer@google.com> X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog Subject: [PATCH v5 1/4] 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 cb1b8e35db..d69a5c0032 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 Nov 4 23:49:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Emily Shaffer X-Patchwork-Id: 12603885 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3B740C433F5 for ; Thu, 4 Nov 2021 23:49:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1A19560F02 for ; Thu, 4 Nov 2021 23:49:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232415AbhKDXw3 (ORCPT ); Thu, 4 Nov 2021 19:52:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57504 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232402AbhKDXw3 (ORCPT ); Thu, 4 Nov 2021 19:52:29 -0400 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A3772C061714 for ; Thu, 4 Nov 2021 16:49:50 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id y13-20020a1709029b8d00b0013dc7c668e2so4206424plp.16 for ; Thu, 04 Nov 2021 16:49:50 -0700 (PDT) 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=SwOaVOY5z9LF3CpKcVitR0yjFpL2vCrfdlNA18x0pF0=; b=CzLIrqDWoXrjL9YnxlKtnC5tirPgVCk37pjH2b3jBfK5ZXRDhXeUKevpetgMzVQCsE hZZCltWJFdSzgOcK/m+sxm/GMfybsh+b32aULQ07cGiDtCzAiWkjUKVIvIamxwNcx29B zZKU26HxmWxipiqa9ri4KXkML077zIhOvfgJ2EZDWPJj9iftOdDHQqzNV4ZN4Q0Gbwea gnATw1ihUO8EhDCCLubHjYP6lvIOQ0uUYWzVl7/Saw+EqNSMQURPhNNmcdvwORN8xcLT oC/gGoMYWVZVNSQ624zhk6hBPS+UjiwfKV8DbhL5bx1pTMK7nme4ayj3vKaBkoRYkSpy M2sg== 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=SwOaVOY5z9LF3CpKcVitR0yjFpL2vCrfdlNA18x0pF0=; b=sKXeqK+9Z2uHq6Hnj0HsdihZYHC8UVEjeWqHm8/VzOwetob4GMUJelW0GCBszNBgVL 0KRy0TexJS0dB+S7BJ7SDwuclbizyEofxQxhPV/6NVPVx9vFt1T+0g6RD6khJgFNaghg BPqcXYc59rTOm4D6BmqY7tOFLIrLr9KbERYbdaWkM1ljP0XuOCb7JzeFZJc3Zc8XMcId DqX8X5eNa0gOcwnryPCU7PKVXcM0jazjQ1c5pNqzwew6hJ7X/3Vezpqk2ykmGNUj1UlJ 17d/GCUdj9p/gVrXC+/tXovQ3X42M7xuDHV8SNni5kzsAVlTjpZNRSoCDJIsiyr+/O/B bKjg== X-Gm-Message-State: AOAM532qZfvjRRvE1sv7/Rcxe3MHUVTDTessT+mKOb7sCgvGPsOSBUwm 1iXLVmYw+X1uw6/txse0bOp5K98zQUcH6sR+N29rC91K/bmpSRAaEX2O+C8ZHPzydZDKVPBXvWo CXADUYeErf1lI988TcXePwZqBN8CPl3pP1MOhXx2uOJbip07uQr+xpdyP+qaEPCLn8H0NWWnfMw == X-Google-Smtp-Source: ABdhPJwrCRBKtM+smSuWZ0hjrH9jLuxFaf1GCrGs5+ZBeyi2kL38XmpFgNb+7essxtx7njFVSTtP7uLm7STOEm7lB8A= X-Received: from podkayne.svl.corp.google.com ([2620:15c:2ce:200:35a1:c171:b6f3:d46c]) (user=emilyshaffer job=sendgmr) by 2002:a17:902:8605:b0:13f:7c1d:56d1 with SMTP id f5-20020a170902860500b0013f7c1d56d1mr47751598plo.57.1636069789989; Thu, 04 Nov 2021 16:49:49 -0700 (PDT) Date: Thu, 4 Nov 2021 16:49:40 -0700 In-Reply-To: <20211104234942.3473650-1-emilyshaffer@google.com> Message-Id: <20211104234942.3473650-3-emilyshaffer@google.com> Mime-Version: 1.0 References: <20211104234942.3473650-1-emilyshaffer@google.com> X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog Subject: [PATCH v5 2/4] introduce submodule.superprojectGitDir 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 reference to their superproject's gitdir. This allows us to A) know that we're running from a submodule, and B) have a shortcut to the superproject's vitals, for example, configs. By using a relative path instead of an absolute path, we can move the superproject directory around on the filesystem without breaking the submodule's cache. And by using the path from gitdir to gitdir, we can move the submodule within the superproject's tree structure without breaking the submodule's cache, too. Finally, by pointing at "get_git_common_dir()" instead of "get_git_dir()", we ensure the link will refer to the parent repo, not to a specific worktree. Since this hint value is only introduced during new submodule creation via `git submodule add`, though, there is more work to do to allow the record to be created at other times. If the new config is present, we can do some optional value-added behavior, like letting "git status" print additional info about the submodule's status in relation to its superproject, or like letting the superproject and submodule share an additional config file separate from either one's local config. Signed-off-by: Emily Shaffer Helped-by: Junio C Hamano --- Documentation/config/submodule.txt | 12 +++++++++++ builtin/submodule--helper.c | 4 ++++ t/t7400-submodule-basic.sh | 32 ++++++++++++++++++++---------- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/Documentation/config/submodule.txt b/Documentation/config/submodule.txt index ee454f8126..8cc57fe1c1 100644 --- a/Documentation/config/submodule.txt +++ b/Documentation/config/submodule.txt @@ -91,3 +91,15 @@ 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.superprojectGitDir:: + The relative path from the submodule's gitdir to its superproject's + common dir. When Git is run in a repository, it usually makes no + difference whether this repository is standalone or a submodule, but if + this configuration variable is present, additional behavior may be + possible, such as "git status" printing additional information about + this submodule's status with respect to its superproject. This config + should only be present in projects which are submodules, but is not + guaranteed to be present in every submodule, so only optional + value-added behavior should be linked to it. It is set automatically + during submodule creation. diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 6298cbdd4e..f803812225 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -1838,6 +1838,10 @@ static int clone_submodule(struct module_clone_data *clone_data) git_config_set_in_file(p, "submodule.alternateErrorStrategy", error_strategy); + git_config_set_in_file(p, "submodule.superprojectGitdir", + relative_path(absolute_path(get_git_common_dir()), + sm_gitdir, &sb)); + free(sm_alternate); free(error_strategy); diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index d69a5c0032..3c20d42fbe 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -109,12 +109,24 @@ submodurl=$(pwd -P) inspect() { sub_dir=$1 && + super_dir=$2 && 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 && + + # Ensure that submodule.superprojectGitDir contains the path from the + # submodule's gitdir to the superproject's gitdir. + + super_abs_gitdir=$(git -C "$super_dir" rev-parse --path-format=absolute --git-common-dir) && + sub_abs_gitdir=$(git -C "$sub_dir" rev-parse --path-format=absolute --git-common-dir) && + + [ "$(git -C "$sub_dir" config --get submodule.superprojectGitDir)" = \ + "$(test-tool path-utils relative_path "$super_abs_gitdir" \ + "$sub_abs_gitdir")" ] && + git -C "$sub_dir" clean -n -d -x >untracked } @@ -138,7 +150,7 @@ test_expect_success 'submodule add' ' ) && rm -f heads head untracked && - inspect addtest/submod && + inspect addtest/submod addtest && test_cmp expect heads && test_cmp expect head && test_must_be_empty untracked @@ -240,7 +252,7 @@ test_expect_success 'submodule add --branch' ' ) && rm -f heads head untracked && - inspect addtest/submod-branch && + inspect addtest/submod-branch addtest && test_cmp expect-heads heads && test_cmp expect-head head && test_must_be_empty untracked @@ -256,7 +268,7 @@ test_expect_success 'submodule add with ./ in path' ' ) && rm -f heads head untracked && - inspect addtest/dotsubmod/frotz && + inspect addtest/dotsubmod/frotz addtest && test_cmp expect heads && test_cmp expect head && test_must_be_empty untracked @@ -272,7 +284,7 @@ test_expect_success 'submodule add with /././ in path' ' ) && rm -f heads head untracked && - inspect addtest/dotslashdotsubmod/frotz && + inspect addtest/dotslashdotsubmod/frotz addtest && test_cmp expect heads && test_cmp expect head && test_must_be_empty untracked @@ -288,7 +300,7 @@ test_expect_success 'submodule add with // in path' ' ) && rm -f heads head untracked && - inspect addtest/slashslashsubmod/frotz && + inspect addtest/slashslashsubmod/frotz addtest && test_cmp expect heads && test_cmp expect head && test_must_be_empty untracked @@ -304,7 +316,7 @@ test_expect_success 'submodule add with /.. in path' ' ) && rm -f heads head untracked && - inspect addtest/realsubmod && + inspect addtest/realsubmod addtest && test_cmp expect heads && test_cmp expect head && test_must_be_empty untracked @@ -320,7 +332,7 @@ test_expect_success 'submodule add with ./, /.. and // in path' ' ) && rm -f heads head untracked && - inspect addtest/realsubmod2 && + inspect addtest/realsubmod2 addtest && test_cmp expect heads && test_cmp expect head && test_must_be_empty untracked @@ -351,7 +363,7 @@ test_expect_success 'submodule add in subdirectory' ' ) && rm -f heads head untracked && - inspect addtest/realsubmod3 && + inspect addtest/realsubmod3 addtest && test_cmp expect heads && test_cmp expect head && test_must_be_empty untracked @@ -492,7 +504,7 @@ test_expect_success 'update should work when path is an empty dir' ' git submodule update -q >update.out && test_must_be_empty update.out && - inspect init && + inspect init . && test_cmp expect head-sha1 ' @@ -551,7 +563,7 @@ test_expect_success 'update should checkout rev1' ' echo "$rev1" >expect && git submodule update init && - inspect init && + inspect init . && test_cmp expect head-sha1 ' From patchwork Thu Nov 4 23:49:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Emily Shaffer X-Patchwork-Id: 12603887 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B6E06C433F5 for ; Thu, 4 Nov 2021 23:49:55 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 95C5D6121E for ; Thu, 4 Nov 2021 23:49:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232432AbhKDXwd (ORCPT ); Thu, 4 Nov 2021 19:52:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57520 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232402AbhKDXwb (ORCPT ); Thu, 4 Nov 2021 19:52:31 -0400 Received: from mail-pl1-x649.google.com (mail-pl1-x649.google.com [IPv6:2607:f8b0:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DE852C061203 for ; Thu, 4 Nov 2021 16:49:52 -0700 (PDT) Received: by mail-pl1-x649.google.com with SMTP id r11-20020a170902be0b00b0013f4f30d71cso4190942pls.21 for ; Thu, 04 Nov 2021 16:49:52 -0700 (PDT) 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=fV5D4pQFLfA71bOd38Q0C8+XTC5euEmmysSKNSx4C+w=; b=SjGkhcYzTeCtFzl87fGnMWOkwcPbVgabGW5DU1pdmQ/3XC5NEYd346IByw8oqCzW5N nHA/fkL8vCkeTzQqdwH30+Cte3fo+Iw83p6WTjvR9v5lzEnq8wHnDBwi4LtHD9XI0jiu TCbNo4auHEqyWxlxAwg8pSJ4v2dAIHsmeWiNiT5FretTssM3Ib07poypI2ZsMtG09QZh FoWTfDdJ0YBBVLJYbJVdef5aSFfe0twWWX0ARIor9/4s4C9gyc8RbR4Ex44IHHV1YW/N eRdySwi1J4s7ElWKbJl2Jn7d4cjMpyKvoeFQU83rPSDqPh7Fwbe5qGrzU+CjHM/C6Xdc GWug== 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=fV5D4pQFLfA71bOd38Q0C8+XTC5euEmmysSKNSx4C+w=; b=aYAZaDP9JpLgQ/c93T5H1C17cETUv7Hz3wqO5DlZRwMRz+szYAGEsdBCPYHh6E4MNE wDluu8y62YKGCI7BaWOUCZot1VdYmWg/1GKwRVNqey28SYzDDRlcQWleVHJ7hvagdWsv UDsWUFTI7nfmcnupkPIuufJyf4oFF3JlsXPOiAmh1pnisaenBPhGmKYb79gdKDPPgrJx 73TLUxlG8RvfPdRXDObfltndqWJy1/NV17lNv84L3NXcBrhcvOl7L0CWB8LKw7qUVD9r F5NGzD2/OOYSWZ/xeYdhpqojCM+3+z+y3tv1LWOvTPkShLZ2O0+Q5QQmTHFlLY/dzZmU 1UYA== X-Gm-Message-State: AOAM5336E+Qy3d2gde2fZou6g9lyV9AIJDD1je3ZQYx4/CEEdMs8IUnA hCnig7XoHXs9rLZYHQBAG6y5GWtJeZFAv1WqI11QGy9DdErdu0rL4wBgGPSJtGlkWI3sLHo42Zp 4a3Wyf6NDP1epSoUXws4DFlvNpz/xr9LVFZ4OlTGIy/vKIJIH+2/Usi3j9GjZogDSLq7DejyBDQ == X-Google-Smtp-Source: ABdhPJzCpBc0LTgez+CQKO/igJXiyJ8tWh7+yTUgO0gI9gS0F8zY12536Q78QVg6GCVn2t1hbvJHTiWlGiZqER9itiA= X-Received: from podkayne.svl.corp.google.com ([2620:15c:2ce:200:35a1:c171:b6f3:d46c]) (user=emilyshaffer job=sendgmr) by 2002:a17:90a:c3:: with SMTP id v3mr79647pjd.0.1636069791761; Thu, 04 Nov 2021 16:49:51 -0700 (PDT) Date: Thu, 4 Nov 2021 16:49:41 -0700 In-Reply-To: <20211104234942.3473650-1-emilyshaffer@google.com> Message-Id: <20211104234942.3473650-4-emilyshaffer@google.com> Mime-Version: 1.0 References: <20211104234942.3473650-1-emilyshaffer@google.com> X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog Subject: [PATCH v5 3/4] submodule: record superproject gitdir during absorbgitdirs From: Emily Shaffer To: git@vger.kernel.org Cc: Emily Shaffer Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Already during 'git submodule add' we record a pointer to the superproject's gitdir. However, this doesn't help brand-new submodules created with 'git init' and later absorbed with 'git submodule absorbgitdirs'. Let's start adding that pointer during 'git submodule absorbgitdirs' too. Signed-off-by: Emily Shaffer --- submodule.c | 9 ++++++ t/t7412-submodule-absorbgitdirs.sh | 50 ++++++++++++++++++++++++++++-- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/submodule.c b/submodule.c index c689070524..2e54dcf1a2 100644 --- a/submodule.c +++ b/submodule.c @@ -2097,6 +2097,7 @@ 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 strbuf config_path = STRBUF_INIT, sb = STRBUF_INIT; if (submodule_uses_worktrees(path)) die(_("relocate_gitdir for submodule '%s' with " @@ -2127,6 +2128,14 @@ static void relocate_single_git_dir_into_superproject(const char *path) relocate_gitdir(path, real_old_git_dir, real_new_git_dir); + /* cache pointer to superproject's gitdir */ + strbuf_addf(&config_path, "%s/config", real_new_git_dir); + git_config_set_in_file(config_path.buf, "submodule.superprojectGitdir", + relative_path(absolute_path(get_git_common_dir()), + real_new_git_dir, &sb)); + + 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/t7412-submodule-absorbgitdirs.sh b/t/t7412-submodule-absorbgitdirs.sh index 1cfa150768..b6f229043d 100755 --- a/t/t7412-submodule-absorbgitdirs.sh +++ b/t/t7412-submodule-absorbgitdirs.sh @@ -30,7 +30,17 @@ 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 && + + # make sure the submodule cached the superproject gitdir correctly + submodule_gitdir="$(git -C sub1 rev-parse --path-format=absolute --git-common-dir)" && + superproject_gitdir="$(git rev-parse --path-format=absolute --git-common-dir)" && + + test-tool path-utils relative_path "$superproject_gitdir" \ + "$submodule_gitdir" >expect && + git -C sub1 config submodule.superprojectGitDir >actual && + + test_cmp expect actual ' test_expect_success 'absorbing does not fail for deinitialized submodules' ' @@ -61,7 +71,16 @@ 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 && + + sub1_gitdir="$(git -C sub1 rev-parse --path-format=absolute --git-common-dir)" && + sub1_nested_gitdir="$(git -C sub1/nested rev-parse --path-format=absolute --git-common-dir)" && + + test-tool path-utils relative_path "$sub1_gitdir" "$sub1_nested_gitdir" \ + >expect && + git -C sub1/nested config submodule.superprojectGitDir >actual && + + test_cmp expect actual ' test_expect_success 're-setup nested submodule' ' @@ -130,4 +149,31 @@ 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 cached the superproject gitdir correctly + submodule_gitdir="$(git -C sub4 rev-parse --path-format=absolute --git-common-dir)" && + superproject_gitdir="$(git rev-parse --path-format=absolute --git-common-dir)" && + + test-tool path-utils relative_path "$superproject_gitdir" \ + "$submodule_gitdir" >expect && + git -C sub4 config submodule.superprojectGitDir >actual && + + test_cmp expect actual + ) +' + test_done From patchwork Thu Nov 4 23:49:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Emily Shaffer X-Patchwork-Id: 12603889 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3515DC433EF for ; Thu, 4 Nov 2021 23:49:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1936861215 for ; Thu, 4 Nov 2021 23:49:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232443AbhKDXwf (ORCPT ); Thu, 4 Nov 2021 19:52:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57534 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231148AbhKDXwd (ORCPT ); Thu, 4 Nov 2021 19:52:33 -0400 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 82C9AC061714 for ; Thu, 4 Nov 2021 16:49:54 -0700 (PDT) Received: by mail-pf1-x449.google.com with SMTP id k63-20020a628442000000b004812ea67c34so4886398pfd.2 for ; Thu, 04 Nov 2021 16:49:54 -0700 (PDT) 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=VP1JQEESXQRZnGmzjO+twoEcTFqKxG/iXsJViD0Mfog=; b=eLgOtEGJJgBLvNqlLJYMDu/tSV+Kt3Hxz34Ib/zaWf2ecRPTHoDY4SyQLEP+D2u0MK QPS2yc64xuKAmsGN+wIDOcMQHy9iydwdozH6ztvNMJ2UHbBhiSht7gWqZkOlCtDf+PIr bIoxDHOD6uM/3ECGDIgU1InFnFH1ULk0t6PdspMX0vNc+pVijK93TMLKLcgn6H0/2Gkb ummCZK+ms05oL66izQSgETjaHxvKc/pJENzik/YtzUURm0dhFs24HxpM72044ACfEWhv 30iSuw49A9qgC26GwnKQJ27ZTZ9AZknzr7mGsjzvkyn9nZ7sHmMlZeKWp1Uq7h48YS/I j9Ew== 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=VP1JQEESXQRZnGmzjO+twoEcTFqKxG/iXsJViD0Mfog=; b=wt8hyVCrJezD+Iam4N+6ZS1HSoa5FxgTB3pGrruI7nFSEUUbjdfSHhbqKFH2JyKIA6 /bxR6dXzcLdBO4jZOh6j02Lmvee+mJ5pcNVzFhusObd0VwjImWWCaQ2XZ1VRfsBpPYUs Emp4B+WLD7j0YSEYhevlKZN8HkFvIHvbRXALrzAT8c2MaHssXiWT88lXpXxhAFMLLKMU ARqwBSv6+rip8f64wsjFgN9bbiwsgF6Beut9bmKTvcjTI1o8htYCmx/6Ap8IW66lUQh7 0sEfoOHhyFJilxubr8/4CHh4M7pZYRkegNmzLEODggN43B0fv7usOETI8Zee3V2MLd/0 t/8w== X-Gm-Message-State: AOAM531PqRR48+FM4YTdOPlz/7mFcun+47r4E0lvfPM8kYU7D5NJQoYg 4yCmnEa1oVe6y+rFWnCH9fv31FaPCdiUeW6jbw9Fx/FWL+AQuPRnyXq5WuVGfozh5F0bYXN2wMU s1HEd9NtMJnDMZjWQjM54hWuhaQLtRd2UErhHs43DoRAGbcE9UIEVWstkRLsZyHKQmBPeMhdSmQ == X-Google-Smtp-Source: ABdhPJwsFHP9fYWpeypv6YpZHL6RWlk6zITMCqwZl0ycV/20OiG1ny8q7mSFWXIfNQ1DJImzdg0Q2yXVDZ/5ao4qdyk= X-Received: from podkayne.svl.corp.google.com ([2620:15c:2ce:200:35a1:c171:b6f3:d46c]) (user=emilyshaffer job=sendgmr) by 2002:a17:902:654b:b0:13d:c967:9cbd with SMTP id d11-20020a170902654b00b0013dc9679cbdmr47627732pln.88.1636069793943; Thu, 04 Nov 2021 16:49:53 -0700 (PDT) Date: Thu, 4 Nov 2021 16:49:42 -0700 In-Reply-To: <20211104234942.3473650-1-emilyshaffer@google.com> Message-Id: <20211104234942.3473650-5-emilyshaffer@google.com> Mime-Version: 1.0 References: <20211104234942.3473650-1-emilyshaffer@google.com> X-Mailer: git-send-email 2.34.0.rc0.344.g81b53c2807-goog Subject: [PATCH v5 4/4] submodule: record superproject gitdir during 'update' From: Emily Shaffer To: git@vger.kernel.org Cc: Emily Shaffer Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org A recorded hint path to the superproject's gitdir might be added during 'git submodule add', but in some cases - like submodules which were created before 'git submodule add' learned to record that info - it might be useful to update the hint. Let's do it during 'git submodule update', when we already have a handle to the superproject while calling operations on the submodules. Signed-off-by: Emily Shaffer --- git-submodule.sh | 14 ++++++++++++++ t/t7406-submodule-update.sh | 12 ++++++++++++ 2 files changed, 26 insertions(+) diff --git a/git-submodule.sh b/git-submodule.sh index 652861aa66..873d64eb99 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -449,6 +449,20 @@ cmd_update() ;; esac + # Cache a pointer to the superproject's common dir. This may have + # changed, unless it's a fresh clone. Writes it to worktree + # if applicable, otherwise to local. + if test -z "$just_cloned" + then + sm_gitdir="$(git -C "$sm_path" rev-parse --absolute-git-dir)" + relative_gitdir="$(git rev-parse --path-format=relative \ + --prefix "${sm_gitdir}" \ + --git-common-dir)" + + git -C "$sm_path" config --worktree \ + submodule.superprojectgitdir "$relative_gitdir" + fi + if test -n "$recursive" then ( diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh index 11cccbb333..5146237abc 100755 --- a/t/t7406-submodule-update.sh +++ b/t/t7406-submodule-update.sh @@ -1061,4 +1061,16 @@ test_expect_success 'submodule update --quiet passes quietness to fetch with a s ) ' +test_expect_success 'submodule update adds superproject gitdir to older repos' ' + (cd super && + git -C submodule config --unset submodule.superprojectGitdir && + git submodule update && + test-tool path-utils relative_path \ + "$(git rev-parse --path-format=absolute --git-common-dir)" \ + "$(git -C submodule rev-parse --path-format=absolute --git-common-dir)" >expect && + git -C submodule config submodule.superprojectGitdir >actual && + test_cmp expect actual + ) +' + test_done