1# bash completion for git-bug -*- shell-script -*-
2
3__git-bug_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__git-bug_init_completion()
13{
14 COMPREPLY=()
15 _get_comp_words_by_ref "$@" cur prev words cword
16}
17
18__git-bug_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__git-bug_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__git-bug_handle_go_custom_completion()
40{
41 __git-bug_debug "${FUNCNAME[0]}: cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}"
42
43 local shellCompDirectiveError=1
44 local shellCompDirectiveNoSpace=2
45 local shellCompDirectiveNoFileComp=4
46 local shellCompDirectiveFilterFileExt=8
47 local shellCompDirectiveFilterDirs=16
48
49 local out requestComp lastParam lastChar comp directive args
50
51 # Prepare the command to request completions for the program.
52 # Calling ${words[0]} instead of directly git-bug allows to handle aliases
53 args=("${words[@]:1}")
54 requestComp="${words[0]} __completeNoDesc ${args[*]}"
55
56 lastParam=${words[$((${#words[@]}-1))]}
57 lastChar=${lastParam:$((${#lastParam}-1)):1}
58 __git-bug_debug "${FUNCNAME[0]}: lastParam ${lastParam}, lastChar ${lastChar}"
59
60 if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then
61 # If the last parameter is complete (there is a space following it)
62 # We add an extra empty parameter so we can indicate this to the go method.
63 __git-bug_debug "${FUNCNAME[0]}: Adding extra empty parameter"
64 requestComp="${requestComp} \"\""
65 fi
66
67 __git-bug_debug "${FUNCNAME[0]}: calling ${requestComp}"
68 # Use eval to handle any environment variables and such
69 out=$(eval "${requestComp}" 2>/dev/null)
70
71 # Extract the directive integer at the very end of the output following a colon (:)
72 directive=${out##*:}
73 # Remove the directive
74 out=${out%:*}
75 if [ "${directive}" = "${out}" ]; then
76 # There is not directive specified
77 directive=0
78 fi
79 __git-bug_debug "${FUNCNAME[0]}: the completion directive is: ${directive}"
80 __git-bug_debug "${FUNCNAME[0]}: the completions are: ${out[*]}"
81
82 if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
83 # Error code. No completion.
84 __git-bug_debug "${FUNCNAME[0]}: received error from custom completion go code"
85 return
86 else
87 if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then
88 if [[ $(type -t compopt) = "builtin" ]]; then
89 __git-bug_debug "${FUNCNAME[0]}: activating no space"
90 compopt -o nospace
91 fi
92 fi
93 if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then
94 if [[ $(type -t compopt) = "builtin" ]]; then
95 __git-bug_debug "${FUNCNAME[0]}: activating no file completion"
96 compopt +o default
97 fi
98 fi
99 fi
100
101 if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
102 # File extension filtering
103 local fullFilter filter filteringCmd
104 # Do not use quotes around the $out variable or else newline
105 # characters will be kept.
106 for filter in ${out[*]}; do
107 fullFilter+="$filter|"
108 done
109
110 filteringCmd="_filedir $fullFilter"
111 __git-bug_debug "File filtering command: $filteringCmd"
112 $filteringCmd
113 elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then
114 # File completion for directories only
115 local subdir
116 # Use printf to strip any trailing newline
117 subdir=$(printf "%s" "${out[0]}")
118 if [ -n "$subdir" ]; then
119 __git-bug_debug "Listing directories in $subdir"
120 __git-bug_handle_subdirs_in_dir_flag "$subdir"
121 else
122 __git-bug_debug "Listing directories in ."
123 _filedir -d
124 fi
125 else
126 while IFS='' read -r comp; do
127 COMPREPLY+=("$comp")
128 done < <(compgen -W "${out[*]}" -- "$cur")
129 fi
130}
131
132__git-bug_handle_reply()
133{
134 __git-bug_debug "${FUNCNAME[0]}"
135 local comp
136 case $cur in
137 -*)
138 if [[ $(type -t compopt) = "builtin" ]]; then
139 compopt -o nospace
140 fi
141 local allflags
142 if [ ${#must_have_one_flag[@]} -ne 0 ]; then
143 allflags=("${must_have_one_flag[@]}")
144 else
145 allflags=("${flags[*]} ${two_word_flags[*]}")
146 fi
147 while IFS='' read -r comp; do
148 COMPREPLY+=("$comp")
149 done < <(compgen -W "${allflags[*]}" -- "$cur")
150 if [[ $(type -t compopt) = "builtin" ]]; then
151 [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace
152 fi
153
154 # complete after --flag=abc
155 if [[ $cur == *=* ]]; then
156 if [[ $(type -t compopt) = "builtin" ]]; then
157 compopt +o nospace
158 fi
159
160 local index flag
161 flag="${cur%=*}"
162 __git-bug_index_of_word "${flag}" "${flags_with_completion[@]}"
163 COMPREPLY=()
164 if [[ ${index} -ge 0 ]]; then
165 PREFIX=""
166 cur="${cur#*=}"
167 ${flags_completion[${index}]}
168 if [ -n "${ZSH_VERSION:-}" ]; then
169 # zsh completion needs --flag= prefix
170 eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )"
171 fi
172 fi
173 fi
174
175 if [[ -z "${flag_parsing_disabled}" ]]; then
176 # If flag parsing is enabled, we have completed the flags and can return.
177 # If flag parsing is disabled, we may not know all (or any) of the flags, so we fallthrough
178 # to possibly call handle_go_custom_completion.
179 return 0;
180 fi
181 ;;
182 esac
183
184 # check if we are handling a flag with special work handling
185 local index
186 __git-bug_index_of_word "${prev}" "${flags_with_completion[@]}"
187 if [[ ${index} -ge 0 ]]; then
188 ${flags_completion[${index}]}
189 return
190 fi
191
192 # we are parsing a flag and don't have a special handler, no completion
193 if [[ ${cur} != "${words[cword]}" ]]; then
194 return
195 fi
196
197 local completions
198 completions=("${commands[@]}")
199 if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then
200 completions+=("${must_have_one_noun[@]}")
201 elif [[ -n "${has_completion_function}" ]]; then
202 # if a go completion function is provided, defer to that function
203 __git-bug_handle_go_custom_completion
204 fi
205 if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then
206 completions+=("${must_have_one_flag[@]}")
207 fi
208 while IFS='' read -r comp; do
209 COMPREPLY+=("$comp")
210 done < <(compgen -W "${completions[*]}" -- "$cur")
211
212 if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then
213 while IFS='' read -r comp; do
214 COMPREPLY+=("$comp")
215 done < <(compgen -W "${noun_aliases[*]}" -- "$cur")
216 fi
217
218 if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
219 if declare -F __git-bug_custom_func >/dev/null; then
220 # try command name qualified custom func
221 __git-bug_custom_func
222 else
223 # otherwise fall back to unqualified for compatibility
224 declare -F __custom_func >/dev/null && __custom_func
225 fi
226 fi
227
228 # available in bash-completion >= 2, not always present on macOS
229 if declare -F __ltrim_colon_completions >/dev/null; then
230 __ltrim_colon_completions "$cur"
231 fi
232
233 # If there is only 1 completion and it is a flag with an = it will be completed
234 # but we don't want a space after the =
235 if [[ "${#COMPREPLY[@]}" -eq "1" ]] && [[ $(type -t compopt) = "builtin" ]] && [[ "${COMPREPLY[0]}" == --*= ]]; then
236 compopt -o nospace
237 fi
238}
239
240# The arguments should be in the form "ext1|ext2|extn"
241__git-bug_handle_filename_extension_flag()
242{
243 local ext="$1"
244 _filedir "@(${ext})"
245}
246
247__git-bug_handle_subdirs_in_dir_flag()
248{
249 local dir="$1"
250 pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return
251}
252
253__git-bug_handle_flag()
254{
255 __git-bug_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
256
257 # if a command required a flag, and we found it, unset must_have_one_flag()
258 local flagname=${words[c]}
259 local flagvalue=""
260 # if the word contained an =
261 if [[ ${words[c]} == *"="* ]]; then
262 flagvalue=${flagname#*=} # take in as flagvalue after the =
263 flagname=${flagname%=*} # strip everything after the =
264 flagname="${flagname}=" # but put the = back
265 fi
266 __git-bug_debug "${FUNCNAME[0]}: looking for ${flagname}"
267 if __git-bug_contains_word "${flagname}" "${must_have_one_flag[@]}"; then
268 must_have_one_flag=()
269 fi
270
271 # if you set a flag which only applies to this command, don't show subcommands
272 if __git-bug_contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then
273 commands=()
274 fi
275
276 # keep flag value with flagname as flaghash
277 # flaghash variable is an associative array which is only supported in bash > 3.
278 if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
279 if [ -n "${flagvalue}" ] ; then
280 flaghash[${flagname}]=${flagvalue}
281 elif [ -n "${words[ $((c+1)) ]}" ] ; then
282 flaghash[${flagname}]=${words[ $((c+1)) ]}
283 else
284 flaghash[${flagname}]="true" # pad "true" for bool flag
285 fi
286 fi
287
288 # skip the argument to a two word flag
289 if [[ ${words[c]} != *"="* ]] && __git-bug_contains_word "${words[c]}" "${two_word_flags[@]}"; then
290 __git-bug_debug "${FUNCNAME[0]}: found a flag ${words[c]}, skip the next argument"
291 c=$((c+1))
292 # if we are looking for a flags value, don't show commands
293 if [[ $c -eq $cword ]]; then
294 commands=()
295 fi
296 fi
297
298 c=$((c+1))
299
300}
301
302__git-bug_handle_noun()
303{
304 __git-bug_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
305
306 if __git-bug_contains_word "${words[c]}" "${must_have_one_noun[@]}"; then
307 must_have_one_noun=()
308 elif __git-bug_contains_word "${words[c]}" "${noun_aliases[@]}"; then
309 must_have_one_noun=()
310 fi
311
312 nouns+=("${words[c]}")
313 c=$((c+1))
314}
315
316__git-bug_handle_command()
317{
318 __git-bug_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
319
320 local next_command
321 if [[ -n ${last_command} ]]; then
322 next_command="_${last_command}_${words[c]//:/__}"
323 else
324 if [[ $c -eq 0 ]]; then
325 next_command="_git-bug_root_command"
326 else
327 next_command="_${words[c]//:/__}"
328 fi
329 fi
330 c=$((c+1))
331 __git-bug_debug "${FUNCNAME[0]}: looking for ${next_command}"
332 declare -F "$next_command" >/dev/null && $next_command
333}
334
335__git-bug_handle_word()
336{
337 if [[ $c -ge $cword ]]; then
338 __git-bug_handle_reply
339 return
340 fi
341 __git-bug_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
342 if [[ "${words[c]}" == -* ]]; then
343 __git-bug_handle_flag
344 elif __git-bug_contains_word "${words[c]}" "${commands[@]}"; then
345 __git-bug_handle_command
346 elif [[ $c -eq 0 ]]; then
347 __git-bug_handle_command
348 elif __git-bug_contains_word "${words[c]}" "${command_aliases[@]}"; then
349 # aliashash variable is an associative array which is only supported in bash > 3.
350 if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
351 words[c]=${aliashash[${words[c]}]}
352 __git-bug_handle_command
353 else
354 __git-bug_handle_noun
355 fi
356 else
357 __git-bug_handle_noun
358 fi
359 __git-bug_handle_word
360}
361
362
363_git_bug() {
364 __start_git-bug "$@"
365}
366
367_git-bug_add()
368{
369 last_command="git-bug_add"
370
371 command_aliases=()
372
373 commands=()
374
375 flags=()
376 two_word_flags=()
377 local_nonpersistent_flags=()
378 flags_with_completion=()
379 flags_completion=()
380
381 flags+=("--title=")
382 two_word_flags+=("--title")
383 two_word_flags+=("-t")
384 local_nonpersistent_flags+=("--title")
385 local_nonpersistent_flags+=("--title=")
386 local_nonpersistent_flags+=("-t")
387 flags+=("--message=")
388 two_word_flags+=("--message")
389 two_word_flags+=("-m")
390 local_nonpersistent_flags+=("--message")
391 local_nonpersistent_flags+=("--message=")
392 local_nonpersistent_flags+=("-m")
393 flags+=("--file=")
394 two_word_flags+=("--file")
395 two_word_flags+=("-F")
396 local_nonpersistent_flags+=("--file")
397 local_nonpersistent_flags+=("--file=")
398 local_nonpersistent_flags+=("-F")
399 flags+=("--non-interactive")
400 local_nonpersistent_flags+=("--non-interactive")
401
402 must_have_one_flag=()
403 must_have_one_noun=()
404 noun_aliases=()
405}
406
407_git-bug_bridge_auth_add-token()
408{
409 last_command="git-bug_bridge_auth_add-token"
410
411 command_aliases=()
412
413 commands=()
414
415 flags=()
416 two_word_flags=()
417 local_nonpersistent_flags=()
418 flags_with_completion=()
419 flags_completion=()
420
421 flags+=("--target=")
422 two_word_flags+=("--target")
423 two_word_flags+=("-t")
424 local_nonpersistent_flags+=("--target")
425 local_nonpersistent_flags+=("--target=")
426 local_nonpersistent_flags+=("-t")
427 flags+=("--login=")
428 two_word_flags+=("--login")
429 two_word_flags+=("-l")
430 local_nonpersistent_flags+=("--login")
431 local_nonpersistent_flags+=("--login=")
432 local_nonpersistent_flags+=("-l")
433 flags+=("--user=")
434 two_word_flags+=("--user")
435 two_word_flags+=("-u")
436 local_nonpersistent_flags+=("--user")
437 local_nonpersistent_flags+=("--user=")
438 local_nonpersistent_flags+=("-u")
439
440 must_have_one_flag=()
441 must_have_one_noun=()
442 noun_aliases=()
443}
444
445_git-bug_bridge_auth_rm()
446{
447 last_command="git-bug_bridge_auth_rm"
448
449 command_aliases=()
450
451 commands=()
452
453 flags=()
454 two_word_flags=()
455 local_nonpersistent_flags=()
456 flags_with_completion=()
457 flags_completion=()
458
459
460 must_have_one_flag=()
461 must_have_one_noun=()
462 noun_aliases=()
463}
464
465_git-bug_bridge_auth_show()
466{
467 last_command="git-bug_bridge_auth_show"
468
469 command_aliases=()
470
471 commands=()
472
473 flags=()
474 two_word_flags=()
475 local_nonpersistent_flags=()
476 flags_with_completion=()
477 flags_completion=()
478
479
480 must_have_one_flag=()
481 must_have_one_noun=()
482 noun_aliases=()
483}
484
485_git-bug_bridge_auth()
486{
487 last_command="git-bug_bridge_auth"
488
489 command_aliases=()
490
491 commands=()
492 commands+=("add-token")
493 commands+=("rm")
494 commands+=("show")
495
496 flags=()
497 two_word_flags=()
498 local_nonpersistent_flags=()
499 flags_with_completion=()
500 flags_completion=()
501
502
503 must_have_one_flag=()
504 must_have_one_noun=()
505 noun_aliases=()
506}
507
508_git-bug_bridge_configure()
509{
510 last_command="git-bug_bridge_configure"
511
512 command_aliases=()
513
514 commands=()
515
516 flags=()
517 two_word_flags=()
518 local_nonpersistent_flags=()
519 flags_with_completion=()
520 flags_completion=()
521
522 flags+=("--name=")
523 two_word_flags+=("--name")
524 two_word_flags+=("-n")
525 local_nonpersistent_flags+=("--name")
526 local_nonpersistent_flags+=("--name=")
527 local_nonpersistent_flags+=("-n")
528 flags+=("--target=")
529 two_word_flags+=("--target")
530 two_word_flags+=("-t")
531 local_nonpersistent_flags+=("--target")
532 local_nonpersistent_flags+=("--target=")
533 local_nonpersistent_flags+=("-t")
534 flags+=("--url=")
535 two_word_flags+=("--url")
536 two_word_flags+=("-u")
537 local_nonpersistent_flags+=("--url")
538 local_nonpersistent_flags+=("--url=")
539 local_nonpersistent_flags+=("-u")
540 flags+=("--base-url=")
541 two_word_flags+=("--base-url")
542 two_word_flags+=("-b")
543 local_nonpersistent_flags+=("--base-url")
544 local_nonpersistent_flags+=("--base-url=")
545 local_nonpersistent_flags+=("-b")
546 flags+=("--login=")
547 two_word_flags+=("--login")
548 two_word_flags+=("-l")
549 local_nonpersistent_flags+=("--login")
550 local_nonpersistent_flags+=("--login=")
551 local_nonpersistent_flags+=("-l")
552 flags+=("--credential=")
553 two_word_flags+=("--credential")
554 two_word_flags+=("-c")
555 local_nonpersistent_flags+=("--credential")
556 local_nonpersistent_flags+=("--credential=")
557 local_nonpersistent_flags+=("-c")
558 flags+=("--token=")
559 two_word_flags+=("--token")
560 local_nonpersistent_flags+=("--token")
561 local_nonpersistent_flags+=("--token=")
562 flags+=("--token-stdin")
563 local_nonpersistent_flags+=("--token-stdin")
564 flags+=("--owner=")
565 two_word_flags+=("--owner")
566 two_word_flags+=("-o")
567 local_nonpersistent_flags+=("--owner")
568 local_nonpersistent_flags+=("--owner=")
569 local_nonpersistent_flags+=("-o")
570 flags+=("--project=")
571 two_word_flags+=("--project")
572 two_word_flags+=("-p")
573 local_nonpersistent_flags+=("--project")
574 local_nonpersistent_flags+=("--project=")
575 local_nonpersistent_flags+=("-p")
576 flags+=("--non-interactive")
577 local_nonpersistent_flags+=("--non-interactive")
578
579 must_have_one_flag=()
580 must_have_one_noun=()
581 noun_aliases=()
582}
583
584_git-bug_bridge_pull()
585{
586 last_command="git-bug_bridge_pull"
587
588 command_aliases=()
589
590 commands=()
591
592 flags=()
593 two_word_flags=()
594 local_nonpersistent_flags=()
595 flags_with_completion=()
596 flags_completion=()
597
598 flags+=("--no-resume")
599 flags+=("-n")
600 local_nonpersistent_flags+=("--no-resume")
601 local_nonpersistent_flags+=("-n")
602 flags+=("--since=")
603 two_word_flags+=("--since")
604 two_word_flags+=("-s")
605 local_nonpersistent_flags+=("--since")
606 local_nonpersistent_flags+=("--since=")
607 local_nonpersistent_flags+=("-s")
608
609 must_have_one_flag=()
610 must_have_one_noun=()
611 noun_aliases=()
612}
613
614_git-bug_bridge_push()
615{
616 last_command="git-bug_bridge_push"
617
618 command_aliases=()
619
620 commands=()
621
622 flags=()
623 two_word_flags=()
624 local_nonpersistent_flags=()
625 flags_with_completion=()
626 flags_completion=()
627
628
629 must_have_one_flag=()
630 must_have_one_noun=()
631 noun_aliases=()
632}
633
634_git-bug_bridge_rm()
635{
636 last_command="git-bug_bridge_rm"
637
638 command_aliases=()
639
640 commands=()
641
642 flags=()
643 two_word_flags=()
644 local_nonpersistent_flags=()
645 flags_with_completion=()
646 flags_completion=()
647
648
649 must_have_one_flag=()
650 must_have_one_noun=()
651 noun_aliases=()
652}
653
654_git-bug_bridge()
655{
656 last_command="git-bug_bridge"
657
658 command_aliases=()
659
660 commands=()
661 commands+=("auth")
662 commands+=("configure")
663 commands+=("pull")
664 commands+=("push")
665 commands+=("rm")
666
667 flags=()
668 two_word_flags=()
669 local_nonpersistent_flags=()
670 flags_with_completion=()
671 flags_completion=()
672
673
674 must_have_one_flag=()
675 must_have_one_noun=()
676 noun_aliases=()
677}
678
679_git-bug_commands()
680{
681 last_command="git-bug_commands"
682
683 command_aliases=()
684
685 commands=()
686
687 flags=()
688 two_word_flags=()
689 local_nonpersistent_flags=()
690 flags_with_completion=()
691 flags_completion=()
692
693 flags+=("--pretty")
694 flags+=("-p")
695 local_nonpersistent_flags+=("--pretty")
696 local_nonpersistent_flags+=("-p")
697
698 must_have_one_flag=()
699 must_have_one_noun=()
700 noun_aliases=()
701}
702
703_git-bug_comment_add()
704{
705 last_command="git-bug_comment_add"
706
707 command_aliases=()
708
709 commands=()
710
711 flags=()
712 two_word_flags=()
713 local_nonpersistent_flags=()
714 flags_with_completion=()
715 flags_completion=()
716
717 flags+=("--file=")
718 two_word_flags+=("--file")
719 two_word_flags+=("-F")
720 local_nonpersistent_flags+=("--file")
721 local_nonpersistent_flags+=("--file=")
722 local_nonpersistent_flags+=("-F")
723 flags+=("--message=")
724 two_word_flags+=("--message")
725 two_word_flags+=("-m")
726 local_nonpersistent_flags+=("--message")
727 local_nonpersistent_flags+=("--message=")
728 local_nonpersistent_flags+=("-m")
729 flags+=("--non-interactive")
730 local_nonpersistent_flags+=("--non-interactive")
731
732 must_have_one_flag=()
733 must_have_one_noun=()
734 noun_aliases=()
735}
736
737_git-bug_comment_edit()
738{
739 last_command="git-bug_comment_edit"
740
741 command_aliases=()
742
743 commands=()
744
745 flags=()
746 two_word_flags=()
747 local_nonpersistent_flags=()
748 flags_with_completion=()
749 flags_completion=()
750
751 flags+=("--file=")
752 two_word_flags+=("--file")
753 two_word_flags+=("-F")
754 local_nonpersistent_flags+=("--file")
755 local_nonpersistent_flags+=("--file=")
756 local_nonpersistent_flags+=("-F")
757 flags+=("--message=")
758 two_word_flags+=("--message")
759 two_word_flags+=("-m")
760 local_nonpersistent_flags+=("--message")
761 local_nonpersistent_flags+=("--message=")
762 local_nonpersistent_flags+=("-m")
763 flags+=("--non-interactive")
764 local_nonpersistent_flags+=("--non-interactive")
765
766 must_have_one_flag=()
767 must_have_one_noun=()
768 noun_aliases=()
769}
770
771_git-bug_comment()
772{
773 last_command="git-bug_comment"
774
775 command_aliases=()
776
777 commands=()
778 commands+=("add")
779 commands+=("edit")
780
781 flags=()
782 two_word_flags=()
783 local_nonpersistent_flags=()
784 flags_with_completion=()
785 flags_completion=()
786
787
788 must_have_one_flag=()
789 must_have_one_noun=()
790 noun_aliases=()
791}
792
793_git-bug_deselect()
794{
795 last_command="git-bug_deselect"
796
797 command_aliases=()
798
799 commands=()
800
801 flags=()
802 two_word_flags=()
803 local_nonpersistent_flags=()
804 flags_with_completion=()
805 flags_completion=()
806
807
808 must_have_one_flag=()
809 must_have_one_noun=()
810 noun_aliases=()
811}
812
813_git-bug_label_add()
814{
815 last_command="git-bug_label_add"
816
817 command_aliases=()
818
819 commands=()
820
821 flags=()
822 two_word_flags=()
823 local_nonpersistent_flags=()
824 flags_with_completion=()
825 flags_completion=()
826
827
828 must_have_one_flag=()
829 must_have_one_noun=()
830 noun_aliases=()
831}
832
833_git-bug_label_rm()
834{
835 last_command="git-bug_label_rm"
836
837 command_aliases=()
838
839 commands=()
840
841 flags=()
842 two_word_flags=()
843 local_nonpersistent_flags=()
844 flags_with_completion=()
845 flags_completion=()
846
847
848 must_have_one_flag=()
849 must_have_one_noun=()
850 noun_aliases=()
851}
852
853_git-bug_label()
854{
855 last_command="git-bug_label"
856
857 command_aliases=()
858
859 commands=()
860 commands+=("add")
861 commands+=("rm")
862
863 flags=()
864 two_word_flags=()
865 local_nonpersistent_flags=()
866 flags_with_completion=()
867 flags_completion=()
868
869
870 must_have_one_flag=()
871 must_have_one_noun=()
872 noun_aliases=()
873}
874
875_git-bug_ls()
876{
877 last_command="git-bug_ls"
878
879 command_aliases=()
880
881 commands=()
882
883 flags=()
884 two_word_flags=()
885 local_nonpersistent_flags=()
886 flags_with_completion=()
887 flags_completion=()
888
889 flags+=("--status=")
890 two_word_flags+=("--status")
891 two_word_flags+=("-s")
892 local_nonpersistent_flags+=("--status")
893 local_nonpersistent_flags+=("--status=")
894 local_nonpersistent_flags+=("-s")
895 flags+=("--author=")
896 two_word_flags+=("--author")
897 two_word_flags+=("-a")
898 local_nonpersistent_flags+=("--author")
899 local_nonpersistent_flags+=("--author=")
900 local_nonpersistent_flags+=("-a")
901 flags+=("--metadata=")
902 two_word_flags+=("--metadata")
903 two_word_flags+=("-m")
904 local_nonpersistent_flags+=("--metadata")
905 local_nonpersistent_flags+=("--metadata=")
906 local_nonpersistent_flags+=("-m")
907 flags+=("--participant=")
908 two_word_flags+=("--participant")
909 two_word_flags+=("-p")
910 local_nonpersistent_flags+=("--participant")
911 local_nonpersistent_flags+=("--participant=")
912 local_nonpersistent_flags+=("-p")
913 flags+=("--actor=")
914 two_word_flags+=("--actor")
915 two_word_flags+=("-A")
916 local_nonpersistent_flags+=("--actor")
917 local_nonpersistent_flags+=("--actor=")
918 local_nonpersistent_flags+=("-A")
919 flags+=("--label=")
920 two_word_flags+=("--label")
921 two_word_flags+=("-l")
922 local_nonpersistent_flags+=("--label")
923 local_nonpersistent_flags+=("--label=")
924 local_nonpersistent_flags+=("-l")
925 flags+=("--title=")
926 two_word_flags+=("--title")
927 two_word_flags+=("-t")
928 local_nonpersistent_flags+=("--title")
929 local_nonpersistent_flags+=("--title=")
930 local_nonpersistent_flags+=("-t")
931 flags+=("--no=")
932 two_word_flags+=("--no")
933 two_word_flags+=("-n")
934 local_nonpersistent_flags+=("--no")
935 local_nonpersistent_flags+=("--no=")
936 local_nonpersistent_flags+=("-n")
937 flags+=("--by=")
938 two_word_flags+=("--by")
939 two_word_flags+=("-b")
940 local_nonpersistent_flags+=("--by")
941 local_nonpersistent_flags+=("--by=")
942 local_nonpersistent_flags+=("-b")
943 flags+=("--direction=")
944 two_word_flags+=("--direction")
945 two_word_flags+=("-d")
946 local_nonpersistent_flags+=("--direction")
947 local_nonpersistent_flags+=("--direction=")
948 local_nonpersistent_flags+=("-d")
949 flags+=("--format=")
950 two_word_flags+=("--format")
951 two_word_flags+=("-f")
952 local_nonpersistent_flags+=("--format")
953 local_nonpersistent_flags+=("--format=")
954 local_nonpersistent_flags+=("-f")
955
956 must_have_one_flag=()
957 must_have_one_noun=()
958 noun_aliases=()
959}
960
961_git-bug_ls-id()
962{
963 last_command="git-bug_ls-id"
964
965 command_aliases=()
966
967 commands=()
968
969 flags=()
970 two_word_flags=()
971 local_nonpersistent_flags=()
972 flags_with_completion=()
973 flags_completion=()
974
975
976 must_have_one_flag=()
977 must_have_one_noun=()
978 noun_aliases=()
979}
980
981_git-bug_ls-label()
982{
983 last_command="git-bug_ls-label"
984
985 command_aliases=()
986
987 commands=()
988
989 flags=()
990 two_word_flags=()
991 local_nonpersistent_flags=()
992 flags_with_completion=()
993 flags_completion=()
994
995
996 must_have_one_flag=()
997 must_have_one_noun=()
998 noun_aliases=()
999}
1000
1001_git-bug_pull()
1002{
1003 last_command="git-bug_pull"
1004
1005 command_aliases=()
1006
1007 commands=()
1008
1009 flags=()
1010 two_word_flags=()
1011 local_nonpersistent_flags=()
1012 flags_with_completion=()
1013 flags_completion=()
1014
1015
1016 must_have_one_flag=()
1017 must_have_one_noun=()
1018 noun_aliases=()
1019}
1020
1021_git-bug_push()
1022{
1023 last_command="git-bug_push"
1024
1025 command_aliases=()
1026
1027 commands=()
1028
1029 flags=()
1030 two_word_flags=()
1031 local_nonpersistent_flags=()
1032 flags_with_completion=()
1033 flags_completion=()
1034
1035
1036 must_have_one_flag=()
1037 must_have_one_noun=()
1038 noun_aliases=()
1039}
1040
1041_git-bug_rm()
1042{
1043 last_command="git-bug_rm"
1044
1045 command_aliases=()
1046
1047 commands=()
1048
1049 flags=()
1050 two_word_flags=()
1051 local_nonpersistent_flags=()
1052 flags_with_completion=()
1053 flags_completion=()
1054
1055
1056 must_have_one_flag=()
1057 must_have_one_noun=()
1058 noun_aliases=()
1059}
1060
1061_git-bug_select()
1062{
1063 last_command="git-bug_select"
1064
1065 command_aliases=()
1066
1067 commands=()
1068
1069 flags=()
1070 two_word_flags=()
1071 local_nonpersistent_flags=()
1072 flags_with_completion=()
1073 flags_completion=()
1074
1075
1076 must_have_one_flag=()
1077 must_have_one_noun=()
1078 noun_aliases=()
1079}
1080
1081_git-bug_show()
1082{
1083 last_command="git-bug_show"
1084
1085 command_aliases=()
1086
1087 commands=()
1088
1089 flags=()
1090 two_word_flags=()
1091 local_nonpersistent_flags=()
1092 flags_with_completion=()
1093 flags_completion=()
1094
1095 flags+=("--field=")
1096 two_word_flags+=("--field")
1097 local_nonpersistent_flags+=("--field")
1098 local_nonpersistent_flags+=("--field=")
1099 flags+=("--format=")
1100 two_word_flags+=("--format")
1101 two_word_flags+=("-f")
1102 local_nonpersistent_flags+=("--format")
1103 local_nonpersistent_flags+=("--format=")
1104 local_nonpersistent_flags+=("-f")
1105
1106 must_have_one_flag=()
1107 must_have_one_noun=()
1108 noun_aliases=()
1109}
1110
1111_git-bug_status_close()
1112{
1113 last_command="git-bug_status_close"
1114
1115 command_aliases=()
1116
1117 commands=()
1118
1119 flags=()
1120 two_word_flags=()
1121 local_nonpersistent_flags=()
1122 flags_with_completion=()
1123 flags_completion=()
1124
1125
1126 must_have_one_flag=()
1127 must_have_one_noun=()
1128 noun_aliases=()
1129}
1130
1131_git-bug_status_open()
1132{
1133 last_command="git-bug_status_open"
1134
1135 command_aliases=()
1136
1137 commands=()
1138
1139 flags=()
1140 two_word_flags=()
1141 local_nonpersistent_flags=()
1142 flags_with_completion=()
1143 flags_completion=()
1144
1145
1146 must_have_one_flag=()
1147 must_have_one_noun=()
1148 noun_aliases=()
1149}
1150
1151_git-bug_status()
1152{
1153 last_command="git-bug_status"
1154
1155 command_aliases=()
1156
1157 commands=()
1158 commands+=("close")
1159 commands+=("open")
1160
1161 flags=()
1162 two_word_flags=()
1163 local_nonpersistent_flags=()
1164 flags_with_completion=()
1165 flags_completion=()
1166
1167
1168 must_have_one_flag=()
1169 must_have_one_noun=()
1170 noun_aliases=()
1171}
1172
1173_git-bug_termui()
1174{
1175 last_command="git-bug_termui"
1176
1177 command_aliases=()
1178
1179 commands=()
1180
1181 flags=()
1182 two_word_flags=()
1183 local_nonpersistent_flags=()
1184 flags_with_completion=()
1185 flags_completion=()
1186
1187
1188 must_have_one_flag=()
1189 must_have_one_noun=()
1190 noun_aliases=()
1191}
1192
1193_git-bug_title_edit()
1194{
1195 last_command="git-bug_title_edit"
1196
1197 command_aliases=()
1198
1199 commands=()
1200
1201 flags=()
1202 two_word_flags=()
1203 local_nonpersistent_flags=()
1204 flags_with_completion=()
1205 flags_completion=()
1206
1207 flags+=("--title=")
1208 two_word_flags+=("--title")
1209 two_word_flags+=("-t")
1210 local_nonpersistent_flags+=("--title")
1211 local_nonpersistent_flags+=("--title=")
1212 local_nonpersistent_flags+=("-t")
1213 flags+=("--non-interactive")
1214 local_nonpersistent_flags+=("--non-interactive")
1215
1216 must_have_one_flag=()
1217 must_have_one_noun=()
1218 noun_aliases=()
1219}
1220
1221_git-bug_title()
1222{
1223 last_command="git-bug_title"
1224
1225 command_aliases=()
1226
1227 commands=()
1228 commands+=("edit")
1229
1230 flags=()
1231 two_word_flags=()
1232 local_nonpersistent_flags=()
1233 flags_with_completion=()
1234 flags_completion=()
1235
1236
1237 must_have_one_flag=()
1238 must_have_one_noun=()
1239 noun_aliases=()
1240}
1241
1242_git-bug_user_adopt()
1243{
1244 last_command="git-bug_user_adopt"
1245
1246 command_aliases=()
1247
1248 commands=()
1249
1250 flags=()
1251 two_word_flags=()
1252 local_nonpersistent_flags=()
1253 flags_with_completion=()
1254 flags_completion=()
1255
1256
1257 must_have_one_flag=()
1258 must_have_one_noun=()
1259 noun_aliases=()
1260}
1261
1262_git-bug_user_create()
1263{
1264 last_command="git-bug_user_create"
1265
1266 command_aliases=()
1267
1268 commands=()
1269
1270 flags=()
1271 two_word_flags=()
1272 local_nonpersistent_flags=()
1273 flags_with_completion=()
1274 flags_completion=()
1275
1276 flags+=("--avatar=")
1277 two_word_flags+=("--avatar")
1278 two_word_flags+=("-a")
1279 local_nonpersistent_flags+=("--avatar")
1280 local_nonpersistent_flags+=("--avatar=")
1281 local_nonpersistent_flags+=("-a")
1282 flags+=("--email=")
1283 two_word_flags+=("--email")
1284 two_word_flags+=("-e")
1285 local_nonpersistent_flags+=("--email")
1286 local_nonpersistent_flags+=("--email=")
1287 local_nonpersistent_flags+=("-e")
1288 flags+=("--name=")
1289 two_word_flags+=("--name")
1290 two_word_flags+=("-n")
1291 local_nonpersistent_flags+=("--name")
1292 local_nonpersistent_flags+=("--name=")
1293 local_nonpersistent_flags+=("-n")
1294 flags+=("--non-interactive")
1295 local_nonpersistent_flags+=("--non-interactive")
1296
1297 must_have_one_flag=()
1298 must_have_one_noun=()
1299 noun_aliases=()
1300}
1301
1302_git-bug_user_ls()
1303{
1304 last_command="git-bug_user_ls"
1305
1306 command_aliases=()
1307
1308 commands=()
1309
1310 flags=()
1311 two_word_flags=()
1312 local_nonpersistent_flags=()
1313 flags_with_completion=()
1314 flags_completion=()
1315
1316 flags+=("--format=")
1317 two_word_flags+=("--format")
1318 two_word_flags+=("-f")
1319 local_nonpersistent_flags+=("--format")
1320 local_nonpersistent_flags+=("--format=")
1321 local_nonpersistent_flags+=("-f")
1322
1323 must_have_one_flag=()
1324 must_have_one_noun=()
1325 noun_aliases=()
1326}
1327
1328_git-bug_user()
1329{
1330 last_command="git-bug_user"
1331
1332 command_aliases=()
1333
1334 commands=()
1335 commands+=("adopt")
1336 commands+=("create")
1337 commands+=("ls")
1338
1339 flags=()
1340 two_word_flags=()
1341 local_nonpersistent_flags=()
1342 flags_with_completion=()
1343 flags_completion=()
1344
1345 flags+=("--field=")
1346 two_word_flags+=("--field")
1347 two_word_flags+=("-f")
1348 local_nonpersistent_flags+=("--field")
1349 local_nonpersistent_flags+=("--field=")
1350 local_nonpersistent_flags+=("-f")
1351
1352 must_have_one_flag=()
1353 must_have_one_noun=()
1354 noun_aliases=()
1355}
1356
1357_git-bug_version()
1358{
1359 last_command="git-bug_version"
1360
1361 command_aliases=()
1362
1363 commands=()
1364
1365 flags=()
1366 two_word_flags=()
1367 local_nonpersistent_flags=()
1368 flags_with_completion=()
1369 flags_completion=()
1370
1371 flags+=("--number")
1372 flags+=("-n")
1373 local_nonpersistent_flags+=("--number")
1374 local_nonpersistent_flags+=("-n")
1375 flags+=("--commit")
1376 flags+=("-c")
1377 local_nonpersistent_flags+=("--commit")
1378 local_nonpersistent_flags+=("-c")
1379 flags+=("--all")
1380 flags+=("-a")
1381 local_nonpersistent_flags+=("--all")
1382 local_nonpersistent_flags+=("-a")
1383
1384 must_have_one_flag=()
1385 must_have_one_noun=()
1386 noun_aliases=()
1387}
1388
1389_git-bug_webui()
1390{
1391 last_command="git-bug_webui"
1392
1393 command_aliases=()
1394
1395 commands=()
1396
1397 flags=()
1398 two_word_flags=()
1399 local_nonpersistent_flags=()
1400 flags_with_completion=()
1401 flags_completion=()
1402
1403 flags+=("--host=")
1404 two_word_flags+=("--host")
1405 local_nonpersistent_flags+=("--host")
1406 local_nonpersistent_flags+=("--host=")
1407 flags+=("--open")
1408 local_nonpersistent_flags+=("--open")
1409 flags+=("--no-open")
1410 local_nonpersistent_flags+=("--no-open")
1411 flags+=("--port=")
1412 two_word_flags+=("--port")
1413 two_word_flags+=("-p")
1414 local_nonpersistent_flags+=("--port")
1415 local_nonpersistent_flags+=("--port=")
1416 local_nonpersistent_flags+=("-p")
1417 flags+=("--read-only")
1418 local_nonpersistent_flags+=("--read-only")
1419 flags+=("--query=")
1420 two_word_flags+=("--query")
1421 two_word_flags+=("-q")
1422 local_nonpersistent_flags+=("--query")
1423 local_nonpersistent_flags+=("--query=")
1424 local_nonpersistent_flags+=("-q")
1425
1426 must_have_one_flag=()
1427 must_have_one_noun=()
1428 noun_aliases=()
1429}
1430
1431_git-bug_root_command()
1432{
1433 last_command="git-bug"
1434
1435 command_aliases=()
1436
1437 commands=()
1438 commands+=("add")
1439 commands+=("bridge")
1440 commands+=("commands")
1441 commands+=("comment")
1442 commands+=("deselect")
1443 commands+=("label")
1444 commands+=("ls")
1445 commands+=("ls-id")
1446 commands+=("ls-label")
1447 commands+=("pull")
1448 commands+=("push")
1449 commands+=("rm")
1450 commands+=("select")
1451 commands+=("show")
1452 commands+=("status")
1453 commands+=("termui")
1454 if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
1455 command_aliases+=("tui")
1456 aliashash["tui"]="termui"
1457 fi
1458 commands+=("title")
1459 commands+=("user")
1460 commands+=("version")
1461 commands+=("webui")
1462
1463 flags=()
1464 two_word_flags=()
1465 local_nonpersistent_flags=()
1466 flags_with_completion=()
1467 flags_completion=()
1468
1469
1470 must_have_one_flag=()
1471 must_have_one_noun=()
1472 noun_aliases=()
1473}
1474
1475__start_git-bug()
1476{
1477 local cur prev words cword split
1478 declare -A flaghash 2>/dev/null || :
1479 declare -A aliashash 2>/dev/null || :
1480 if declare -F _init_completion >/dev/null 2>&1; then
1481 _init_completion -s || return
1482 else
1483 __git-bug_init_completion -n "=" || return
1484 fi
1485
1486 local c=0
1487 local flag_parsing_disabled=
1488 local flags=()
1489 local two_word_flags=()
1490 local local_nonpersistent_flags=()
1491 local flags_with_completion=()
1492 local flags_completion=()
1493 local commands=("git-bug")
1494 local command_aliases=()
1495 local must_have_one_flag=()
1496 local must_have_one_noun=()
1497 local has_completion_function=""
1498 local last_command=""
1499 local nouns=()
1500 local noun_aliases=()
1501
1502 __git-bug_handle_word
1503}
1504
1505if [[ $(type -t compopt) = "builtin" ]]; then
1506 complete -o default -F __start_git-bug git-bug
1507else
1508 complete -o default -o nospace -F __start_git-bug git-bug
1509fi
1510
1511# ex: ts=4 sw=4 et filetype=sh