diff --git a/completion/available/git.completion.bash b/completion/available/git.completion.bash index b9bb1bb6..16b21f2c 100644 --- a/completion/available/git.completion.bash +++ b/completion/available/git.completion.bash @@ -1,28 +1,31 @@ -#!/usr/bin/env bash - -# Only operate on MacOS since there are no linux paths -if [[ "$OSTYPE" != 'darwin'* ]] ; then - _log_warning "unsupported operating system - only 'Darwin' is supported" - return 0 -fi +# shellcheck shell=bash +# +# Locate and load completions for `git`. # Make sure git is installed -_command_exists git || return 0 +_command_exists git || return # Don't handle completion if it's already managed -if complete -p git &>/dev/null ; then +if complete -p git &>/dev/null; then _log_warning "completion already loaded - this usually means it is safe to stop using this completion" return 0 fi -_git_bash_completion_found=false +_git_bash_completion_xcrun_git= +if _command_exists xcrun; then + _git_bash_completion_xcrun_git="$(xcrun --find git)" +fi _git_bash_completion_paths=( + # Standard locations + "${GIT_EXE%/*}/../share/git-core/git-completion.bash" + "${GIT_EXE%/*}/../share/git-core/contrib/completion/git-completion.bash" + "${GIT_EXE%/*}/../etc/bash_completion.d/git-completion.bash" # MacOS non-system locations - '/Library/Developer/CommandLineTools/usr/share/git-core/git-completion.bash' - '/Applications/Xcode.app/Contents/Developer/usr/share/git-core/git-completion.bash' + "${_git_bash_completion_xcrun_git%/bin/git}/share/git-core/git-completion.bash" ) # Load the first completion file found +_git_bash_completion_found=false for _comp_path in "${_git_bash_completion_paths[@]}" ; do if [[ -r "$_comp_path" ]] ; then _git_bash_completion_found=true @@ -35,5 +38,4 @@ done if [[ "${_git_bash_completion_found}" == false ]]; then _log_warning "no completion files found - please try enabling the 'system' completion instead." fi -unset _git_bash_completion_paths -unset _git_bash_completion_found +unset "${!_git_bash_completion@}"