github.com/nak3/source-to-image@v1.1.10-0.20180319140719-2ed55639898d/contrib/completions/bash/s2i (about) 1 # bash completion for s2i -*- shell-script -*- 2 3 __debug() 4 { 5 if [[ -n ${BASH_COMP_DEBUG_FILE} ]]; then 6 echo "$*" >> "${BASH_COMP_DEBUG_FILE}" 7 fi 8 } 9 10 # Homebrew on Macs have version 1.3 of bash-completion which doesn't include 11 # _init_completion. This is a very minimal version of that function. 12 __my_init_completion() 13 { 14 COMPREPLY=() 15 _get_comp_words_by_ref "$@" cur prev words cword 16 } 17 18 __index_of_word() 19 { 20 local w word=$1 21 shift 22 index=0 23 for w in "$@"; do 24 [[ $w = "$word" ]] && return 25 index=$((index+1)) 26 done 27 index=-1 28 } 29 30 __contains_word() 31 { 32 local w word=$1; shift 33 for w in "$@"; do 34 [[ $w = "$word" ]] && return 35 done 36 return 1 37 } 38 39 __handle_reply() 40 { 41 __debug "${FUNCNAME[0]}" 42 case $cur in 43 -*) 44 if [[ $(type -t compopt) = "builtin" ]]; then 45 compopt -o nospace 46 fi 47 local allflags 48 if [ ${#must_have_one_flag[@]} -ne 0 ]; then 49 allflags=("${must_have_one_flag[@]}") 50 else 51 allflags=("${flags[*]} ${two_word_flags[*]}") 52 fi 53 COMPREPLY=( $(compgen -W "${allflags[*]}" -- "$cur") ) 54 if [[ $(type -t compopt) = "builtin" ]]; then 55 [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace 56 fi 57 58 # complete after --flag=abc 59 if [[ $cur == *=* ]]; then 60 if [[ $(type -t compopt) = "builtin" ]]; then 61 compopt +o nospace 62 fi 63 64 local index flag 65 flag="${cur%%=*}" 66 __index_of_word "${flag}" "${flags_with_completion[@]}" 67 if [[ ${index} -ge 0 ]]; then 68 COMPREPLY=() 69 PREFIX="" 70 cur="${cur#*=}" 71 ${flags_completion[${index}]} 72 if [ -n "${ZSH_VERSION}" ]; then 73 # zfs completion needs --flag= prefix 74 eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )" 75 fi 76 fi 77 fi 78 return 0; 79 ;; 80 esac 81 82 # check if we are handling a flag with special work handling 83 local index 84 __index_of_word "${prev}" "${flags_with_completion[@]}" 85 if [[ ${index} -ge 0 ]]; then 86 ${flags_completion[${index}]} 87 return 88 fi 89 90 # we are parsing a flag and don't have a special handler, no completion 91 if [[ ${cur} != "${words[cword]}" ]]; then 92 return 93 fi 94 95 local completions 96 completions=("${commands[@]}") 97 if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then 98 completions=("${must_have_one_noun[@]}") 99 fi 100 if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then 101 completions+=("${must_have_one_flag[@]}") 102 fi 103 COMPREPLY=( $(compgen -W "${completions[*]}" -- "$cur") ) 104 105 if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then 106 COMPREPLY=( $(compgen -W "${noun_aliases[*]}" -- "$cur") ) 107 fi 108 109 if [[ ${#COMPREPLY[@]} -eq 0 ]]; then 110 declare -F __custom_func >/dev/null && __custom_func 111 fi 112 113 __ltrim_colon_completions "$cur" 114 } 115 116 # The arguments should be in the form "ext1|ext2|extn" 117 __handle_filename_extension_flag() 118 { 119 local ext="$1" 120 _filedir "@(${ext})" 121 } 122 123 __handle_subdirs_in_dir_flag() 124 { 125 local dir="$1" 126 pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 127 } 128 129 __handle_flag() 130 { 131 __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" 132 133 # if a command required a flag, and we found it, unset must_have_one_flag() 134 local flagname=${words[c]} 135 local flagvalue 136 # if the word contained an = 137 if [[ ${words[c]} == *"="* ]]; then 138 flagvalue=${flagname#*=} # take in as flagvalue after the = 139 flagname=${flagname%%=*} # strip everything after the = 140 flagname="${flagname}=" # but put the = back 141 fi 142 __debug "${FUNCNAME[0]}: looking for ${flagname}" 143 if __contains_word "${flagname}" "${must_have_one_flag[@]}"; then 144 must_have_one_flag=() 145 fi 146 147 # if you set a flag which only applies to this command, don't show subcommands 148 if __contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then 149 commands=() 150 fi 151 152 # keep flag value with flagname as flaghash 153 if [ -n "${flagvalue}" ] ; then 154 flaghash[${flagname}]=${flagvalue} 155 elif [ -n "${words[ $((c+1)) ]}" ] ; then 156 flaghash[${flagname}]=${words[ $((c+1)) ]} 157 else 158 flaghash[${flagname}]="true" # pad "true" for bool flag 159 fi 160 161 # skip the argument to a two word flag 162 if __contains_word "${words[c]}" "${two_word_flags[@]}"; then 163 c=$((c+1)) 164 # if we are looking for a flags value, don't show commands 165 if [[ $c -eq $cword ]]; then 166 commands=() 167 fi 168 fi 169 170 c=$((c+1)) 171 172 } 173 174 __handle_noun() 175 { 176 __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" 177 178 if __contains_word "${words[c]}" "${must_have_one_noun[@]}"; then 179 must_have_one_noun=() 180 elif __contains_word "${words[c]}" "${noun_aliases[@]}"; then 181 must_have_one_noun=() 182 fi 183 184 nouns+=("${words[c]}") 185 c=$((c+1)) 186 } 187 188 __handle_command() 189 { 190 __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" 191 192 local next_command 193 if [[ -n ${last_command} ]]; then 194 next_command="_${last_command}_${words[c]//:/__}" 195 else 196 if [[ $c -eq 0 ]]; then 197 next_command="_$(basename "${words[c]//:/__}")" 198 else 199 next_command="_${words[c]//:/__}" 200 fi 201 fi 202 c=$((c+1)) 203 __debug "${FUNCNAME[0]}: looking for ${next_command}" 204 declare -F $next_command >/dev/null && $next_command 205 } 206 207 __handle_word() 208 { 209 if [[ $c -ge $cword ]]; then 210 __handle_reply 211 return 212 fi 213 __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}" 214 if [[ "${words[c]}" == -* ]]; then 215 __handle_flag 216 elif __contains_word "${words[c]}" "${commands[@]}"; then 217 __handle_command 218 elif [[ $c -eq 0 ]] && __contains_word "$(basename "${words[c]}")" "${commands[@]}"; then 219 __handle_command 220 else 221 __handle_noun 222 fi 223 __handle_word 224 } 225 226 _s2i_build() 227 { 228 last_command="s2i_build" 229 commands=() 230 231 flags=() 232 two_word_flags=() 233 local_nonpersistent_flags=() 234 flags_with_completion=() 235 flags_completion=() 236 237 flags+=("--allowed-uids=") 238 two_word_flags+=("-u") 239 local_nonpersistent_flags+=("--allowed-uids=") 240 flags+=("--application-name=") 241 two_word_flags+=("-n") 242 local_nonpersistent_flags+=("--application-name=") 243 flags+=("--assemble-user=") 244 local_nonpersistent_flags+=("--assemble-user=") 245 flags+=("--callback-url=") 246 local_nonpersistent_flags+=("--callback-url=") 247 flags+=("--cap-drop=") 248 local_nonpersistent_flags+=("--cap-drop=") 249 flags+=("--context-dir=") 250 local_nonpersistent_flags+=("--context-dir=") 251 flags+=("--copy") 252 flags+=("-c") 253 local_nonpersistent_flags+=("--copy") 254 flags+=("--description=") 255 local_nonpersistent_flags+=("--description=") 256 flags+=("--destination=") 257 two_word_flags+=("-d") 258 local_nonpersistent_flags+=("--destination=") 259 flags+=("--dockercfg-path=") 260 local_nonpersistent_flags+=("--dockercfg-path=") 261 flags+=("--env=") 262 two_word_flags+=("-e") 263 local_nonpersistent_flags+=("--env=") 264 flags+=("--environment-file=") 265 two_word_flags+=("-E") 266 local_nonpersistent_flags+=("--environment-file=") 267 flags+=("--exclude=") 268 local_nonpersistent_flags+=("--exclude=") 269 flags+=("--ignore-submodules") 270 local_nonpersistent_flags+=("--ignore-submodules") 271 flags+=("--incremental") 272 local_nonpersistent_flags+=("--incremental") 273 flags+=("--incremental-pull-policy=") 274 local_nonpersistent_flags+=("--incremental-pull-policy=") 275 flags+=("--inject=") 276 two_word_flags+=("-i") 277 local_nonpersistent_flags+=("--inject=") 278 flags+=("--location=") 279 two_word_flags+=("-l") 280 local_nonpersistent_flags+=("--location=") 281 flags+=("--network=") 282 local_nonpersistent_flags+=("--network=") 283 flags+=("--pull-policy=") 284 two_word_flags+=("-p") 285 local_nonpersistent_flags+=("--pull-policy=") 286 flags+=("--quiet") 287 flags+=("-q") 288 local_nonpersistent_flags+=("--quiet") 289 flags+=("--ref=") 290 two_word_flags+=("-r") 291 local_nonpersistent_flags+=("--ref=") 292 flags+=("--rm") 293 local_nonpersistent_flags+=("--rm") 294 flags+=("--run") 295 local_nonpersistent_flags+=("--run") 296 flags+=("--runtime-artifact=") 297 two_word_flags+=("-a") 298 local_nonpersistent_flags+=("--runtime-artifact=") 299 flags+=("--runtime-image=") 300 local_nonpersistent_flags+=("--runtime-image=") 301 flags+=("--runtime-pull-policy=") 302 local_nonpersistent_flags+=("--runtime-pull-policy=") 303 flags+=("--save-temp-dir") 304 local_nonpersistent_flags+=("--save-temp-dir") 305 flags+=("--scripts=") 306 local_nonpersistent_flags+=("--scripts=") 307 flags+=("--scripts-url=") 308 two_word_flags+=("-s") 309 local_nonpersistent_flags+=("--scripts-url=") 310 flags+=("--use-config") 311 local_nonpersistent_flags+=("--use-config") 312 flags+=("--volume=") 313 two_word_flags+=("-v") 314 local_nonpersistent_flags+=("--volume=") 315 flags+=("--ca=") 316 flags+=("--cert=") 317 flags+=("--key=") 318 flags+=("--loglevel=") 319 flags+=("--tls") 320 flags+=("--tlsverify") 321 flags+=("--url=") 322 two_word_flags+=("-U") 323 324 must_have_one_flag=() 325 must_have_one_noun=() 326 noun_aliases=() 327 } 328 329 _s2i_completion() 330 { 331 last_command="s2i_completion" 332 commands=() 333 334 flags=() 335 two_word_flags=() 336 local_nonpersistent_flags=() 337 flags_with_completion=() 338 flags_completion=() 339 340 flags+=("--ca=") 341 flags+=("--cert=") 342 flags+=("--key=") 343 flags+=("--loglevel=") 344 flags+=("--tls") 345 flags+=("--tlsverify") 346 flags+=("--url=") 347 two_word_flags+=("-U") 348 349 must_have_one_flag=() 350 must_have_one_noun=() 351 must_have_one_noun+=("bash") 352 must_have_one_noun+=("zsh") 353 noun_aliases=() 354 } 355 356 _s2i_create() 357 { 358 last_command="s2i_create" 359 commands=() 360 361 flags=() 362 two_word_flags=() 363 local_nonpersistent_flags=() 364 flags_with_completion=() 365 flags_completion=() 366 367 flags+=("--ca=") 368 flags+=("--cert=") 369 flags+=("--key=") 370 flags+=("--loglevel=") 371 flags+=("--tls") 372 flags+=("--tlsverify") 373 flags+=("--url=") 374 two_word_flags+=("-U") 375 376 must_have_one_flag=() 377 must_have_one_noun=() 378 noun_aliases=() 379 } 380 381 _s2i_rebuild() 382 { 383 last_command="s2i_rebuild" 384 commands=() 385 386 flags=() 387 two_word_flags=() 388 local_nonpersistent_flags=() 389 flags_with_completion=() 390 flags_completion=() 391 392 flags+=("--callback-url=") 393 local_nonpersistent_flags+=("--callback-url=") 394 flags+=("--destination=") 395 two_word_flags+=("-d") 396 local_nonpersistent_flags+=("--destination=") 397 flags+=("--dockercfg-path=") 398 local_nonpersistent_flags+=("--dockercfg-path=") 399 flags+=("--incremental") 400 local_nonpersistent_flags+=("--incremental") 401 flags+=("--incremental-pull-policy=") 402 local_nonpersistent_flags+=("--incremental-pull-policy=") 403 flags+=("--pull-policy=") 404 two_word_flags+=("-p") 405 local_nonpersistent_flags+=("--pull-policy=") 406 flags+=("--quiet") 407 flags+=("-q") 408 local_nonpersistent_flags+=("--quiet") 409 flags+=("--rm") 410 local_nonpersistent_flags+=("--rm") 411 flags+=("--runtime-pull-policy=") 412 local_nonpersistent_flags+=("--runtime-pull-policy=") 413 flags+=("--save-temp-dir") 414 local_nonpersistent_flags+=("--save-temp-dir") 415 flags+=("--ca=") 416 flags+=("--cert=") 417 flags+=("--key=") 418 flags+=("--loglevel=") 419 flags+=("--tls") 420 flags+=("--tlsverify") 421 flags+=("--url=") 422 two_word_flags+=("-U") 423 424 must_have_one_flag=() 425 must_have_one_noun=() 426 noun_aliases=() 427 } 428 429 _s2i_usage() 430 { 431 last_command="s2i_usage" 432 commands=() 433 434 flags=() 435 two_word_flags=() 436 local_nonpersistent_flags=() 437 flags_with_completion=() 438 flags_completion=() 439 440 flags+=("--callback-url=") 441 local_nonpersistent_flags+=("--callback-url=") 442 flags+=("--destination=") 443 two_word_flags+=("-d") 444 local_nonpersistent_flags+=("--destination=") 445 flags+=("--dockercfg-path=") 446 local_nonpersistent_flags+=("--dockercfg-path=") 447 flags+=("--incremental") 448 local_nonpersistent_flags+=("--incremental") 449 flags+=("--incremental-pull-policy=") 450 local_nonpersistent_flags+=("--incremental-pull-policy=") 451 flags+=("--location=") 452 two_word_flags+=("-l") 453 local_nonpersistent_flags+=("--location=") 454 flags+=("--pull-policy=") 455 two_word_flags+=("-p") 456 local_nonpersistent_flags+=("--pull-policy=") 457 flags+=("--quiet") 458 flags+=("-q") 459 local_nonpersistent_flags+=("--quiet") 460 flags+=("--rm") 461 local_nonpersistent_flags+=("--rm") 462 flags+=("--runtime-pull-policy=") 463 local_nonpersistent_flags+=("--runtime-pull-policy=") 464 flags+=("--save-temp-dir") 465 local_nonpersistent_flags+=("--save-temp-dir") 466 flags+=("--ca=") 467 flags+=("--cert=") 468 flags+=("--key=") 469 flags+=("--loglevel=") 470 flags+=("--tls") 471 flags+=("--tlsverify") 472 flags+=("--url=") 473 two_word_flags+=("-U") 474 475 must_have_one_flag=() 476 must_have_one_noun=() 477 noun_aliases=() 478 } 479 480 _s2i_version() 481 { 482 last_command="s2i_version" 483 commands=() 484 485 flags=() 486 two_word_flags=() 487 local_nonpersistent_flags=() 488 flags_with_completion=() 489 flags_completion=() 490 491 flags+=("--ca=") 492 flags+=("--cert=") 493 flags+=("--key=") 494 flags+=("--loglevel=") 495 flags+=("--tls") 496 flags+=("--tlsverify") 497 flags+=("--url=") 498 two_word_flags+=("-U") 499 500 must_have_one_flag=() 501 must_have_one_noun=() 502 noun_aliases=() 503 } 504 505 _s2i() 506 { 507 last_command="s2i" 508 commands=() 509 commands+=("build") 510 commands+=("completion") 511 commands+=("create") 512 commands+=("rebuild") 513 commands+=("usage") 514 commands+=("version") 515 516 flags=() 517 two_word_flags=() 518 local_nonpersistent_flags=() 519 flags_with_completion=() 520 flags_completion=() 521 522 flags+=("--ca=") 523 flags+=("--cert=") 524 flags+=("--key=") 525 flags+=("--loglevel=") 526 flags+=("--tls") 527 flags+=("--tlsverify") 528 flags+=("--url=") 529 two_word_flags+=("-U") 530 531 must_have_one_flag=() 532 must_have_one_noun=() 533 noun_aliases=() 534 } 535 536 __start_s2i() 537 { 538 local cur prev words cword 539 declare -A flaghash 2>/dev/null || : 540 if declare -F _init_completion >/dev/null 2>&1; then 541 _init_completion -s || return 542 else 543 __my_init_completion -n "=" || return 544 fi 545 546 local c=0 547 local flags=() 548 local two_word_flags=() 549 local local_nonpersistent_flags=() 550 local flags_with_completion=() 551 local flags_completion=() 552 local commands=("s2i") 553 local must_have_one_flag=() 554 local must_have_one_noun=() 555 local last_command 556 local nouns=() 557 558 __handle_word 559 } 560 561 if [[ $(type -t compopt) = "builtin" ]]; then 562 complete -o default -F __start_s2i s2i 563 else 564 complete -o default -o nospace -F __start_s2i s2i 565 fi 566 567 # ex: ts=4 sw=4 et filetype=sh