summaryrefslogtreecommitdiffstats
path: root/completion.bash
diff options
context:
space:
mode:
Diffstat (limited to 'completion.bash')
-rw-r--r--completion.bash67
1 files changed, 51 insertions, 16 deletions
diff --git a/completion.bash b/completion.bash
index 0b52d29c..09291d5c 100644
--- a/completion.bash
+++ b/completion.bash
@@ -14,6 +14,9 @@
14 14
15# Programmable bash completion. https://github.com/scop/bash-completion 15# Programmable bash completion. https://github.com/scop/bash-completion
16 16
17# TODO: Handle interspersed options. We handle `repo h<tab>`, but not
18# `repo --time h<tab>`.
19
17# Complete the list of repo subcommands. 20# Complete the list of repo subcommands.
18__complete_repo_list_commands() { 21__complete_repo_list_commands() {
19 local repo=${COMP_WORDS[0]} 22 local repo=${COMP_WORDS[0]}
@@ -37,6 +40,7 @@ __complete_repo_list_branches() {
37__complete_repo_list_projects() { 40__complete_repo_list_projects() {
38 local repo=${COMP_WORDS[0]} 41 local repo=${COMP_WORDS[0]}
39 "${repo}" list -n 2>/dev/null 42 "${repo}" list -n 2>/dev/null
43 "${repo}" list -p --relative-to=. 2>/dev/null
40} 44}
41 45
42# Complete the repo <command> argument. 46# Complete the repo <command> argument.
@@ -66,6 +70,48 @@ __complete_repo_command_projects() {
66 COMPREPLY=($(compgen -W "$(__complete_repo_list_projects)" -- "${current}")) 70 COMPREPLY=($(compgen -W "$(__complete_repo_list_projects)" -- "${current}"))
67} 71}
68 72
73# Complete `repo help`.
74__complete_repo_command_help() {
75 local current=$1
76 # CWORD=1 is "start".
77 # CWORD=2 is the <subcommand> which we complete here.
78 if [[ ${COMP_CWORD} -eq 2 ]]; then
79 COMPREPLY=(
80 $(compgen -W "$(__complete_repo_list_commands)" -- "${current}")
81 )
82 fi
83}
84
85# Complete `repo forall`.
86__complete_repo_command_forall() {
87 local current=$1
88 # CWORD=1 is "forall".
89 # CWORD=2+ are <projects> *until* we hit the -c option.
90 local i
91 for (( i = 0; i < COMP_CWORD; ++i )); do
92 if [[ "${COMP_WORDS[i]}" == "-c" ]]; then
93 return 0
94 fi
95 done
96
97 COMPREPLY=(
98 $(compgen -W "$(__complete_repo_list_projects)" -- "${current}")
99 )
100}
101
102# Complete `repo start`.
103__complete_repo_command_start() {
104 local current=$1
105 # CWORD=1 is "start".
106 # CWORD=2 is the <branch> which we don't complete.
107 # CWORD=3+ are <projects> which we complete here.
108 if [[ ${COMP_CWORD} -gt 2 ]]; then
109 COMPREPLY=(
110 $(compgen -W "$(__complete_repo_list_projects)" -- "${current}")
111 )
112 fi
113}
114
69# Complete the repo subcommand arguments. 115# Complete the repo subcommand arguments.
70__complete_repo_arg() { 116__complete_repo_arg() {
71 if [[ ${COMP_CWORD} -le 1 ]]; then 117 if [[ ${COMP_CWORD} -le 1 ]]; then
@@ -86,21 +132,8 @@ __complete_repo_arg() {
86 return 0 132 return 0
87 ;; 133 ;;
88 134
89 help) 135 help|start|forall)
90 if [[ ${COMP_CWORD} -eq 2 ]]; then 136 __complete_repo_command_${command} "${current}"
91 COMPREPLY=(
92 $(compgen -W "$(__complete_repo_list_commands)" -- "${current}")
93 )
94 fi
95 return 0
96 ;;
97
98 start)
99 if [[ ${COMP_CWORD} -gt 2 ]]; then
100 COMPREPLY=(
101 $(compgen -W "$(__complete_repo_list_projects)" -- "${current}")
102 )
103 fi
104 return 0 137 return 0
105 ;; 138 ;;
106 139
@@ -118,4 +151,6 @@ __complete_repo() {
118 return 0 151 return 0
119} 152}
120 153
121complete -F __complete_repo repo 154# Fallback to the default complete methods if we aren't able to provide anything
155# useful. This will allow e.g. local paths to be used when it makes sense.
156complete -F __complete_repo -o bashdefault -o default repo