Subject: Re: [PATCH v3 1/1] docs: highlight that .gitmodules does not support !command

From: Junio C Hamano <[email-masked]>
Date: Tue, 25 Jul 2023 11:17:33 -0700

Petar Vutov <[email-masked]> writes:

> I applied your patch and then made some additions, which I'll append
> at the end of this message. Summary:
>
> * Added your rewrite from yesterday. I like that it's more precise
>   than the current docs, but I struggle with the complexity of the
>   first sentence. I wanted to make it easier to follow by splitting it
>   in two somehow. Instead I ended up with an introductory sentence
>   summarizing the functionality with small words.
>
> * In gitmodules.txt, moved the security disclaimer so people are more
>   likely to see it before they follow the link to git-submodule.txt.
>
> * Explicitly called out `none` and `custom command` as being unusable
>   on the command line (and in .gitmodules). I expect that you won't
>   want that .gitmodules mention anymore, but I left it in for now, up
>  to you.
>
> The diff below is based on top of your patch from yesterday, since I
> assume that you don't want to look at a mishmash of both patches.

Sorry for a very slow response; I seem to have missed this one.

The end result looks good.  Care to wrap it up into a single patch
(iow, make a "mishmash of both patches") with a good log message so
we can move the topic forward?

Thanks.

> diff --git a/Documentation/git-submodule.txt
> b/Documentation/git-submodule.txt
> index 5248840b18..695730609a 100644
> --- a/Documentation/git-submodule.txt
> +++ b/Documentation/git-submodule.txt
> @@ -165,13 +165,18 @@ checked out in the submodule.
>  	merge;; the commit recorded in the superproject will be merged
>  	    into the current branch in the submodule.
>
> -	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.
> +The following update procedures have additional limitations:
> +
> +	custom command;; mechanism for running arbitrary commands with the
> +	    commit ID as an argument. Specifically, if the
> +	    `submodule.<name>.update` configuration variable is set to
> +	    `!custom command`, the object name of the commit recorded in the
> +	    superproject for the submodule is appended to the `custom command`
> +	    string and executed. Note that this mechanism is not supported in
> +	    the `.gitmodules` file or on the command line.
> +
> +	none;; the submodule is not updated. This update procedure is not
> +	    allowed on the command line.
>
>  If the submodule is not yet initialized, and you just want to use the
>  setting as stored in `.gitmodules`, you can automatically initialize the
> diff --git a/Documentation/gitmodules.txt b/Documentation/gitmodules.txt
> index dcee09b500..d9bec8b187 100644
> --- a/Documentation/gitmodules.txt
> +++ b/Documentation/gitmodules.txt
> @@ -43,9 +43,9 @@ submodule.<name>.update::
>  	command in the superproject. This is only used by `git
>  	submodule init` to initialize the configuration variable of
>  	the same name. Allowed values here are 'checkout', 'rebase',
> -	'merge' or 'none'. See description of 'update' command in
> -	linkgit:git-submodule[1] for their meaning. For security
> -	reasons, the '!command' form is not accepted here.
> +	'merge' or 'none', but not '!command' (for security reasons).
> +	See the description of the 'update' command in
> +	linkgit:git-submodule[1] for more details.
>
>  submodule.<name>.branch::
>  	A remote branch name for tracking updates in the upstream submodule.