git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] git-prompt.sh: make `option` a local variable

From
Junio C Hamano <gitster@pobox.com>
Date
Oct 31, 2020, 22:45 UTC
Message-ID
<xmqqmu02xbe6.fsf@gitster.c.googlers.com>
In-Reply-To
<pull.775.git.1604182187195.gitgitgadget@gmail.com>
"Sibo Dong via GitGitGadget" <gitgitgadget@gmail.com> writes:
Show 11 quoted lines
> From: Sibo Dong <sibo.dong@outlook.com>
>
> Other variables like `key` and `value` are local to this completion
> script, so I think the same should be done with `option`.
>
> Signed-off-by: Sibo Dong <sibo.dong@outlook.com>
> ---
>     git-prompt.sh: make option a local variable
>     
>     This is very trivial, but variables like key and value are local to 
>     git-prompt.sh, so I think the same should be done with option.

That explains why we might consider localizing option; another thing to consider is if it is safe to just blindly localize it.

Here is how I would explain and justify the change, if I were writing it:

    git-prompt.sh: localize `option` in __git_ps1_show_upstream
    The variable 'option' is used in __git_ps1_show_upstream()
    without being localized.
    This clobbers the variable the user may be using for other
    purposes, which is bad.  Luckily, $option is not used to carry
    information around in the script as a global variable.  The use
    of it in this script has very limited scope (namely, only inside
    this function), so just declare that it is "local".
following the usual pattern:
 - start with the observation on the codebase before your change,
 - explain what the problem is with the current state,
 - outline the solution and explain why it is the right thing to do, and
 - order the codebase to "be like so".
Show 12 quoted lines
> diff --git a/contrib/completion/git-prompt.sh b/contrib/completion/git-prompt.sh
> index 16260bab73..5116016d39 100644
> --- a/contrib/completion/git-prompt.sh
> +++ b/contrib/completion/git-prompt.sh
> @@ -137,6 +137,7 @@ __git_ps1_show_upstream ()
>  	done <<< "$output"
>  
>  	# parse configuration values
> +	local option
>  	for option in ${GIT_PS1_SHOWUPSTREAM}; do
>  		case "$option" in
>  		git|svn) upstream="$option" ;;
Looks OK to me.
Previous: Sibo Dong via GitGitGadgetNext: Sibo Dong
Message 2 of 4 in “git-prompt.sh: make `option` a local variable”
  1. git-prompt.sh: make `option` a local variableSibo Dong via GitGitGadget, Oct 31, 2020
  2. Junio C HamanoOct 31, 2020
  3. Sibo DongNov 1, 2020
  4. Junio C HamanoNov 2, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.