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.