1 # bash completion support for StGIT -*- shell-script -*-
3 # Copyright (C) 2006, Karl Hasselström <kha@treskal.com>
4 # Based on git-completion.sh
6 # To use these routines:
8 # 1. Copy this file to somewhere (e.g. ~/.stgit-completion.bash).
10 # 2. Add the following line to your .bashrc:
11 # . ~/.stgit-completion.bash
57 # The path to .git, or empty if we're not in a repository.
60 echo "$(git rev-parse --git-dir 2>/dev/null)"
63 # Name of the current branch, or empty if there isn't one.
66 local b=$(git symbolic-ref HEAD 2>/dev/null)
70 # List of all applied patches.
74 [ "$g" ] && cat "$g/patches/$(_current_branch)/applied"
77 # List of all unapplied patches.
81 [ "$g" ] && cat "$g/patches/$(_current_branch)/unapplied"
84 # List of all applied patches.
88 [ "$g" ] && cat "$g/patches/$(_current_branch)/hidden"
91 # List of all patches.
94 local b=$(_current_branch)
96 [ "$g" ] && cat "$g/patches/$b/applied" "$g/patches/$b/unapplied"
99 # List of all patches except the current patch.
100 _all_other_patches ()
102 local b=$(_current_branch)
104 [ "$g" ] && cat "$g/patches/$b/applied" "$g/patches/$b/unapplied" \
105 | grep -v "^$(cat $g/patches/$b/current 2> /dev/null)$"
111 [ "$g" ] && (cd .git/patches/ && echo *)
114 # List the command options
117 stg $1 --help 2>/dev/null | grep -e " --[A-Za-z]" | sed -e "s/.*\(--[^ =]\+\).*/\1/"
120 # Generate completions for patches and patch ranges from the given
121 # patch list function, and options from the given list.
122 _complete_patch_range ()
124 local patchlist="$1" options="$2"
125 local pfx cur="${COMP_WORDS[COMP_CWORD]}"
130 COMPREPLY=($(compgen -P "$pfx" -W "$($patchlist)" -- "$cur"))
133 COMPREPLY=($(compgen -W "$options $($patchlist)" -- "$cur"))
138 _complete_patch_range_options ()
140 local patchlist="$1" options="$2" patch_options="$3"
141 local prev="${COMP_WORDS[COMP_CWORD-1]}"
142 local cur="${COMP_WORDS[COMP_CWORD]}"
144 for popt in $patch_options; do
145 if [ $prev == $popt ]; then
146 _complete_patch_range $patchlist
150 COMPREPLY=($(compgen -W "$options" -- "$cur"))
155 COMPREPLY=($(compgen -W "$(_cmd_options $1) $($2)" -- "${COMP_WORDS[COMP_CWORD]}"))
158 # Generate completions for options from the given list.
162 COMPREPLY=($(compgen -W "$options" -- "${COMP_WORDS[COMP_CWORD]}"))
167 _complete_options "$(_cmd_options $1)"
172 _complete_patch_range "$2" "$(_cmd_options $1)"
175 _stg_patches_options ()
177 _complete_patch_range_options "$2" "$(_cmd_options $1)" "$3"
182 _complete_options "$_stg_commands"
189 while [ $c -lt $COMP_CWORD ]; do
191 command="${COMP_WORDS[c]}"
196 # Complete name of subcommand.
197 if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
198 COMPREPLY=($(compgen \
199 -W "--help --version copyright help $_stg_commands" \
200 -- "${COMP_WORDS[COMP_CWORD]}"))
204 # Complete arguments to subcommands.
208 # repository commands
209 id) _stg_patches $command _all_patches ;;
211 float) _stg_patches $command _all_patches ;;
212 goto) _stg_patches $command _all_other_patches ;;
213 hide) _stg_patches $command _unapplied_patches ;;
214 pop) _stg_patches $command _applied_patches ;;
215 push) _stg_patches $command _unapplied_patches ;;
216 series) _stg_patches $command _all_patches ;;
217 sink) _stg_patches $command _all_patches ;;
218 unhide) _stg_patches $command _hidden_patches ;;
220 delete) _stg_patches $command _all_patches ;;
221 export) _stg_patches $command _applied_patches ;;
222 files) _stg_patches $command _all_patches ;;
223 log) _stg_patches $command _all_patches ;;
224 mail) _stg_patches $command _all_patches ;;
225 pick) _stg_patches $command _unapplied_patches ;;
226 refresh)_stg_patches_options $command _applied_patches "-p --patch" ;;
227 rename) _stg_patches $command _all_patches ;;
228 show) _stg_patches $command _all_patches ;;
229 sync) _stg_patches $command _applied_patches ;;
230 # working-copy commands
231 diff) _stg_patches_options $command _applied_patches "-r --range" ;;
232 # commands that usually raher accept branches
233 branch) _complete_branch $command _all_branches ;;
234 rebase) _complete_branch $command _all_branches ;;
235 # all the other commands
236 *) _stg_common $command ;;
240 complete -o default -F _stg stg