diff --git a/git_completion.sh b/git_completion.sh new file mode 100755 index 0000000000..c1baa2cdd2 --- /dev/null +++ b/git_completion.sh @@ -0,0 +1,65 @@ +# Copyright (c) 2023 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +# This adds completion to bash shells for git commands. It is +# meant for developers and not needed for inclusion by any automated +# processes that will, of course, specify the full command, not rely +# on or benefit from tab-completion. +# +# Requires: +# Installed git bash completion. +# +# Usage: +# Add this to your .bashrc: +# +# # The next lines enable bash completion for git commands from +# # depot_tools. +# if [ -f "$HOME/bin/depot_tools/git_completion.sh" ]; then +# . "$HOME/bin/depot_tools/git_completion.sh" +# fi + + +_git_new_branch () +{ + case "$cur" in + -*) + __gitcomp_nl_append "--upstream_current" + __gitcomp_nl_append "--upstream" + __gitcomp_nl_append "--lkgr" + __gitcomp_nl_append "--inject_current" + ;; + *) + case "$prev,$cur" in + --upstream,o*) + # By default (only local branch heads are shown after --upstream, see + # the case below. If, however, the user types "--upstream o", also + # remote branches (origin/*) are shown. + __git_complete_refs --cur="$cur" + ;; + --upstream,*) + __gitcomp_nl "$(__git_heads '' $cur)" + ;; + esac + esac +} + +_git_reparent_branch () +{ + case "$cur" in + -*) + __gitcomp_nl_append "--lkgr" + __gitcomp_nl_append "--root" + ;; + o*) + # By default (only local branch heads are shown after --upstream, see the + # case below. If, however, the user types "--upstream o", also remote + # branches (origin/*) are shown. + __git_complete_refs --cur="$cur" + ;; + *) + __gitcomp_nl "$(__git_heads '' $cur)" + ;; + esac +}