Browse Source

bash-completion: Support running when set -u is enabled

Under "set -u" semantics, it is an error to access undefined variables.
Some user environments may enable this setting in the interactive shell.

In any context where the completion functions access an undefined
variable, accessing a default empty string (aka "${1-}" instead of "$1")
is a reasonable way to code the function, as it silences the undefined
variable error while still supplying an empty string.

In this patch, functions that should always take an argument still use
$1. Functions that have optional arguments use ${1-}.

Signed-off-by: Ted Pavlic <ted@tedpavlic.com>
Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Ted Pavlic 16 years ago committed by Junio C Hamano
parent
commit
25a31f8140
  1. 18
      contrib/completion/git-completion.bash

18
contrib/completion/git-completion.bash

@ -52,7 +52,7 @@ esac


__gitdir () __gitdir ()
{ {
if [ -z "$1" ]; then if [ -z "${1-}" ]; then
if [ -n "$__git_dir" ]; then if [ -n "$__git_dir" ]; then
echo "$__git_dir" echo "$__git_dir"
elif [ -d .git ]; then elif [ -d .git ]; then
@ -111,7 +111,7 @@ __git_ps1 ()
fi fi
fi fi


if [ -n "$1" ]; then if [ -n "${1-}" ]; then
printf "$1" "${b##refs/heads/}$r" printf "$1" "${b##refs/heads/}$r"
else else
printf " (%s)" "${b##refs/heads/}$r" printf " (%s)" "${b##refs/heads/}$r"
@ -143,8 +143,8 @@ __gitcomp ()
;; ;;
*) *)
local IFS=$'\n' local IFS=$'\n'
COMPREPLY=($(compgen -P "$2" \ COMPREPLY=($(compgen -P "${2-}" \
-W "$(__gitcomp_1 "$1" "$4")" \ -W "$(__gitcomp_1 "${1-}" "${4-}")" \
-- "$cur")) -- "$cur"))
;; ;;
esac esac
@ -152,13 +152,13 @@ __gitcomp ()


__git_heads () __git_heads ()
{ {
local cmd i is_hash=y dir="$(__gitdir "$1")" local cmd i is_hash=y dir="$(__gitdir "${1-}")"
if [ -d "$dir" ]; then if [ -d "$dir" ]; then
git --git-dir="$dir" for-each-ref --format='%(refname:short)' \ git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
refs/heads refs/heads
return return
fi fi
for i in $(git ls-remote "$1" 2>/dev/null); do for i in $(git ls-remote "${1-}" 2>/dev/null); do
case "$is_hash,$i" in case "$is_hash,$i" in
y,*) is_hash=n ;; y,*) is_hash=n ;;
n,*^{}) is_hash=y ;; n,*^{}) is_hash=y ;;
@ -170,13 +170,13 @@ __git_heads ()


__git_tags () __git_tags ()
{ {
local cmd i is_hash=y dir="$(__gitdir "$1")" local cmd i is_hash=y dir="$(__gitdir "${1-}")"
if [ -d "$dir" ]; then if [ -d "$dir" ]; then
git --git-dir="$dir" for-each-ref --format='%(refname:short)' \ git --git-dir="$dir" for-each-ref --format='%(refname:short)' \
refs/tags refs/tags
return return
fi fi
for i in $(git ls-remote "$1" 2>/dev/null); do for i in $(git ls-remote "${1-}" 2>/dev/null); do
case "$is_hash,$i" in case "$is_hash,$i" in
y,*) is_hash=n ;; y,*) is_hash=n ;;
n,*^{}) is_hash=y ;; n,*^{}) is_hash=y ;;
@ -188,7 +188,7 @@ __git_tags ()


__git_refs () __git_refs ()
{ {
local i is_hash=y dir="$(__gitdir "$1")" local i is_hash=y dir="$(__gitdir "${1-}")"
local cur="${COMP_WORDS[COMP_CWORD]}" format refs local cur="${COMP_WORDS[COMP_CWORD]}" format refs
if [ -d "$dir" ]; then if [ -d "$dir" ]; then
case "$cur" in case "$cur" in

Loading…
Cancel
Save