Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: bash_completion

Issue 3156025: Handle tilde expansion in cros_workon tab completion. (Closed) Base URL: http://src.chromium.org/git/crosutils.git
Patch Set: reword Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 # Add programmable completion to some Chromium OS build scripts 5 # Add programmable completion to some Chromium OS build scripts
6 6
7 7
8 # Echo a list of -- flags that the current command accepts. The 8 # Echo a list of -- flags that the current command accepts. The
9 # function assumes that the command supports shflags' --help flag. 9 # function assumes that the command supports shflags' --help flag.
10 _flags() { 10 _flags() {
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 127
128 # Complete the cros_workon <command> argument. 128 # Complete the cros_workon <command> argument.
129 # 129 #
130 # TODO(petkov): We should probably extract the list of commands from 130 # TODO(petkov): We should probably extract the list of commands from
131 # cros_workon --help, just like we do for flags (see _flag_complete). 131 # cros_workon --help, just like we do for flags (see _flag_complete).
132 # 132 #
133 # TODO(petkov): Currently, this assumes that the command is the first 133 # TODO(petkov): Currently, this assumes that the command is the first
134 # argument. In practice, the command is the first non-flag 134 # argument. In practice, the command is the first non-flag
135 # argument. I.e., this should be fixed to support something like 135 # argument. I.e., this should be fixed to support something like
136 # "./cros_workon --all list". 136 # "./cros_workon --all list".
137 _cros_workon_command_complete() { 137 _complete_cros_workon_command() {
138 [ ${COMP_CWORD} -eq 1 ] || return 1 138 [ ${COMP_CWORD} -eq 1 ] || return 1
139 local command="${COMP_WORDS[1]}" 139 local command="${COMP_WORDS[1]}"
140 COMPREPLY=($(compgen -W "start stop list iterate" -- "$command")) 140 COMPREPLY=($(compgen -W "start stop list iterate" -- "$command"))
141 return 0 141 return 0
142 } 142 }
143 143
144 # Prints the full path to the cros_workon executable, handling tilde
145 # expansion for the current user.
146 _cros_workon_executable() {
147 local cros_workon="${COMP_WORDS[0]}"
148 if [[ "$cros_workon" == '~/'* ]]; then
149 cros_workon="$HOME/${cros_workon#'~/'}"
150 fi
151 echo "$cros_workon"
152 }
153
144 # Lists the workon (or live, if --all is passed in) ebuilds. Lists 154 # Lists the workon (or live, if --all is passed in) ebuilds. Lists
145 # both the full names (e.g., chromeos-base/metrics) as well as just 155 # both the full names (e.g., chromeos-base/metrics) as well as just
146 # the ebuild names (e.g., metrics). 156 # the ebuild names (e.g., metrics).
147 _cros_workon_list() { 157 _cros_workon_list() {
148 local cros_workon="${COMP_WORDS[0]}" 158 local cros_workon=$(_cros_workon_executable)
149 ${cros_workon} list $1 | sed 's,\(.\+\)/\(.\+\),\1/\2 \2,' 159 ${cros_workon} list $1 | sed 's,\(.\+\)/\(.\+\),\1/\2 \2,'
150 } 160 }
151 161
152 # Completes the current cros_workon argument assuming it's a 162 # Completes the current cros_workon argument assuming it's a
153 # package/ebuild name. 163 # package/ebuild name.
154 _cros_workon_package_complete() { 164 _complete_cros_workon_package() {
155 [ ${COMP_CWORD} -gt 1 ] || return 1 165 [ ${COMP_CWORD} -gt 1 ] || return 1
156 local package="${COMP_WORDS[COMP_CWORD]}" 166 local package="${COMP_WORDS[COMP_CWORD]}"
157 local command="${COMP_WORDS[1]}" 167 local command="${COMP_WORDS[1]}"
158 # If "start", complete based on all workon packages. 168 # If "start", complete based on all workon packages.
159 if [[ ${command} == "start" ]]; then 169 if [[ ${command} == "start" ]]; then
160 COMPREPLY=($(compgen -W "$(_cros_workon_list --all)" -- "$package")) 170 COMPREPLY=($(compgen -W "$(_cros_workon_list --all)" -- "$package"))
161 return 0 171 return 0
162 fi 172 fi
163 # If "stop" or "iterate", complete based on all live packages. 173 # If "stop" or "iterate", complete based on all live packages.
164 if [[ ${command} == "stop" ]] || [[ ${command} == "iterate" ]]; then 174 if [[ ${command} == "stop" ]] || [[ ${command} == "iterate" ]]; then
165 COMPREPLY=($(compgen -W "$(_cros_workon_list)" -- "$package")) 175 COMPREPLY=($(compgen -W "$(_cros_workon_list)" -- "$package"))
166 return 0 176 return 0
167 fi 177 fi
168 return 1 178 return 1
169 } 179 }
170 180
171 # Complete the cros_workon arguments. 181 # Complete the cros_workon arguments.
172 _cros_workon() { 182 _cros_workon() {
173 COMPREPLY=() 183 COMPREPLY=()
174 _flag_complete && return 0 184 _flag_complete && return 0
175 _complete_board_sysroot_flag && return 0 185 _complete_board_sysroot_flag && return 0
176 _cros_workon_command_complete && return 0 186 _complete_cros_workon_command && return 0
177 _cros_workon_package_complete && return 0 187 _complete_cros_workon_package && return 0
178 return 0 188 return 0
179 } 189 }
180 190
181 complete -o bashdefault -o default -F _board_sysroot \ 191 complete -o bashdefault -o default -F _board_sysroot \
182 build_autotest.sh \ 192 build_autotest.sh \
183 build_image \ 193 build_image \
184 build_packages \ 194 build_packages \
185 image_to_usb.sh \ 195 image_to_usb.sh \
186 mod_image_for_test.sh 196 mod_image_for_test.sh
187 complete -o bashdefault -o default -F _board_overlay setup_board 197 complete -o bashdefault -o default -F _board_overlay setup_board
188 complete -o bashdefault -o default -o nospace -F _autotest_complete autotest 198 complete -o bashdefault -o default -o nospace -F _autotest_complete autotest
189 complete -o bashdefault -o default -F _cros_workon cros_workon 199 complete -F _cros_workon cros_workon
190 200
191 ### Local Variables: 201 ### Local Variables:
192 ### mode: shell-script 202 ### mode: shell-script
193 ### End: 203 ### End:
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698