Skip to contentSkip to conversation

documentation: update git-submodule documentation

PATCH In review James via GitGitGadget 3 participants 3 messages Nov 3, 2022 – Nov 4, 2022 Documentation

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 documentation: update git-submodule documentation

From: James <[email protected]>

Removes reference to custom code execution which is called out by gitmodules as not allowed.

---
Update git-submodule.txt

Remove info about custom commands being allowed in the submodule update command to align with the gitmodules docs which states "For security reasons, the !command form is not accepted here."

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1401%2FEnochPrime%2Fsubmodule-docs-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1401/EnochPrime/submodule-docs-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1401

 Documentation/git-submodule.txt | 6 ------
 1 file changed, 6 deletions(-)
Documentation/git-submodule.txt +0 -6
index 4d3ab6b9f92..b40ac72f753 100644
@@ -163,12 +163,6 @@ checked out in the submodule.
 The following 'update' procedures are only available via the
 `submodule.<name>.update` configuration variable:
 
-	custom command;; arbitrary shell command that takes a single
-	    argument (the sha1 of the commit recorded in the
-	    superproject) is executed. When `submodule.<name>.update`
-	    is set to '!command', the remainder after the exclamation mark
-	    is the custom command.
-
 	none;; the submodule is not updated.
 
 If the submodule is not yet initialized, and you just want to use the

base-commit: c03801e19cb8ab36e9c0d17ff3d5e0c3b0f24193

Signature · 1 line
gitgitgadget
#1 lore raw
Quoted 27 lines · James via GitGitGadget

From: James <[email protected]>

Removes reference to custom code execution which is called out by gitmodules as not allowed.

---
Update git-submodule.txt

Remove info about custom commands being allowed in the submodule update command to align with the gitmodules docs which states "For security reasons, the !command form is not accepted here."

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1401%2FEnochPrime%2Fsubmodule-docs-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1401/EnochPrime/submodule-docs-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1401

 Documentation/git-submodule.txt | 6 ------
 1 file changed, 6 deletions(-)
Documentation/git-submodule.txt +0 -0
index 4d3ab6b9f92..b40ac72f753 100644
@@ -163,12 +163,6 @@ checked out in the submodule.
 The following 'update' procedures are only available via the
 `submodule.<name>.update` configuration variable:

Documentation/git-submodule.txt checked out in the submodule. · line 168

Quoted 10 lines
Documentation/git-submodule.txt +0 -6
 
-	custom command;; arbitrary shell command that takes a single
-	    argument (the sha1 of the commit recorded in the
-	    superproject) is executed. When `submodule.<name>.update`
-	    is set to '!command', the remainder after the exclamation mark
-	    is the custom command.
-
 	none;; the submodule is not updated.
 
 If the submodule is not yet initialized, and you just want to use the

Hrm?

	diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
	index a7683d35299..80e897d5f29 100644
	--- a/builtin/submodule--helper.c
	+++ b/builtin/submodule--helper.c
	@@ -2247,6 +2247,7 @@ static int run_update_command(const struct update_data *ud, int subforce)
	 	case SM_UPDATE_COMMAND:
	 		cp.use_shell = 1;
	 		strvec_push(&cp.args, ud->update_strategy.command);
	+		BUG("unused??");
	 		break;
	 	default:
	 		BUG("unexpected update strategy type: %d",

Will show you that this is used, i.e. this failure in t7406-submodule-update.sh:

[...]
+ cd super
+ git config submodule.submodule.update !git checkout
+ cd super/submodule
+ git reset --hard HEAD^
HEAD is now at 0c90624 upstream
+ cd super
+ cd submodule
+ compare_head
+ git rev-list --max-count=1 main
+ sha_main=0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f
+ git rev-list --max-count=1 HEAD
+ sha_head=0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f
+ test 0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f = 0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f
+ git submodule update submodule
BUG: builtin/submodule--helper.c:2250: unused??
Aborted

I think what you may be confused by is that this isn't allowed in the in-tree .gitmodules file, and indeed you can see another BUG() in determine_submodule_update_strategy() for a panic if we'd ever get as far as reading "command" from there.

But that's not what this part of the docs dicsusses, as the paragraph shown above the removed lines in the context notes.

#2 lore raw

Sorry about the confusion. Just so I'm 100% clear: the submodule.<name>.update referencing a gitconfig and not gitmodules?

Quoted 85 lines · Ævar Arnfjörð Bjarmason
Quoted 27 lines · James via GitGitGadget

From: James <[email protected]>

Removes reference to custom code execution which is called out by gitmodules as not allowed.

---
Update git-submodule.txt

Remove info about custom commands being allowed in the submodule update command to align with the gitmodules docs which states "For security reasons, the !command form is not accepted here."

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1401%2FEnochPrime%2Fsubmodule-docs-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1401/EnochPrime/submodule-docs-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1401

 Documentation/git-submodule.txt | 6 ------
 1 file changed, 6 deletions(-)
Documentation/git-submodule.txt +0 -0
index 4d3ab6b9f92..b40ac72f753 100644
@@ -163,12 +163,6 @@ checked out in the submodule.
 The following 'update' procedures are only available via the
 `submodule.<name>.update` configuration variable:

Documentation/git-submodule.txt checked out in the submodule. · line 168

Quoted 10 lines
Documentation/git-submodule.txt +0 -6
 
-     custom command;; arbitrary shell command that takes a single
-         argument (the sha1 of the commit recorded in the
-         superproject) is executed. When `submodule.<name>.update`
-         is set to '!command', the remainder after the exclamation mark
-         is the custom command.
-
      none;; the submodule is not updated.
 
 If the submodule is not yet initialized, and you just want to use the

Hrm?

        diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
        index a7683d35299..80e897d5f29 100644
        --- a/builtin/submodule--helper.c
        +++ b/builtin/submodule--helper.c
        @@ -2247,6 +2247,7 @@ static int run_update_command(const struct update_data *ud, int subforce)
                case SM_UPDATE_COMMAND:
                        cp.use_shell = 1;
                        strvec_push(&cp.args, ud->update_strategy.command);
        +               BUG("unused??");
                        break;
                default:
                        BUG("unexpected update strategy type: %d",

Will show you that this is used, i.e. this failure in t7406-submodule-update.sh:

[...]
+ cd super
+ git config submodule.submodule.update !git checkout
+ cd super/submodule
+ git reset --hard HEAD^
HEAD is now at 0c90624 upstream
+ cd super
+ cd submodule
+ compare_head
+ git rev-list --max-count=1 main
+ sha_main=0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f
+ git rev-list --max-count=1 HEAD
+ sha_head=0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f
+ test 0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f = 0c90624ab7f1aaa301d3bb79f60dcfed1ec4897f
+ git submodule update submodule
BUG: builtin/submodule--helper.c:2250: unused??
Aborted

I think what you may be confused by is that this isn't allowed in the in-tree .gitmodules file, and indeed you can see another BUG() in determine_submodule_update_strategy() for a panic if we'd ever get as far as reading "command" from there.

But that's not what this part of the docs dicsusses, as the paragraph shown above the removed lines in the context notes.

Signature · 1 line
James McCandlish