diff --git a/clean_files.txt b/clean_files.txt index da7e41bc..0cc1ecb3 100644 --- a/clean_files.txt +++ b/clean_files.txt @@ -49,6 +49,7 @@ completion/available/docker-machine.completion.bash completion/available/docker.completion.bash completion/available/gcloud.completion.bash completion/available/gem.completion.bash +completion/available/git.completion.bash completion/available/github-cli.completion.bash completion/available/go.completion.bash completion/available/helm.completion.bash diff --git a/completion/available/git.completion.bash b/completion/available/git.completion.bash index b9bb1bb6..31b77fa3 100644 --- a/completion/available/git.completion.bash +++ b/completion/available/git.completion.bash @@ -1,39 +1,42 @@ -#!/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 - _log_warning "completion already loaded - this usually means it is safe to stop using this completion" - return 0 +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=( - # 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' + # 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 + "${_git_bash_completion_xcrun_git%/bin/git}/share/git-core/git-completion.bash" ) # Load the first completion file found -for _comp_path in "${_git_bash_completion_paths[@]}" ; do - if [[ -r "$_comp_path" ]] ; then - _git_bash_completion_found=true - source "$_comp_path" - break - fi +_git_bash_completion_found=false +for _comp_path in "${_git_bash_completion_paths[@]}"; do + if [[ -r "$_comp_path" ]]; then + _git_bash_completion_found=true + # shellcheck disable=SC1090 # don't follow + source "$_comp_path" + break + fi done # Cleanup if [[ "${_git_bash_completion_found}" == false ]]; then - _log_warning "no completion files found - please try enabling the 'system' completion instead." + _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@}"