aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--go.mod4
-rw-r--r--go.sum8
-rw-r--r--misc/completion/bash/git-bug65
-rw-r--r--misc/completion/fish/git-bug72
-rw-r--r--misc/completion/powershell/git-bug21
-rw-r--r--misc/completion/zsh/git-bug11
6 files changed, 137 insertions, 44 deletions
diff --git a/go.mod b/go.mod
index c4a34f26..bca18f98 100644
--- a/go.mod
+++ b/go.mod
@@ -23,7 +23,7 @@ require (
github.com/pkg/errors v0.9.1
github.com/shurcooL/githubv4 v0.0.0-20190601194912-068505affed7
github.com/skratchdot/open-golang v0.0.0-20190402232053-79abb63cd66e
- github.com/spf13/cobra v1.6.1
+ github.com/spf13/cobra v1.7.0
github.com/stretchr/testify v1.8.4
github.com/vbauerster/mpb/v8 v8.5.2
github.com/vektah/gqlparser/v2 v2.5.1
@@ -89,7 +89,7 @@ require (
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-retryablehttp v0.7.2 // indirect
github.com/imdario/mergo v0.3.13 // indirect
- github.com/inconshreveable/mousetrap v1.0.1 // indirect
+ github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect
github.com/kevinburke/ssh_config v1.2.0 // indirect
github.com/lucasb-eyer/go-colorful v1.0.3 // indirect
diff --git a/go.sum b/go.sum
index 9cecba4a..79e077cf 100644
--- a/go.sum
+++ b/go.sum
@@ -175,8 +175,8 @@ github.com/ikawaha/kagome.ipadic v1.1.2/go.mod h1:DPSBbU0czaJhAb/5uKQZHMc9MTVRpD
github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk=
github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
-github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc=
-github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
+github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
+github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
@@ -272,8 +272,8 @@ github.com/skratchdot/open-golang v0.0.0-20190402232053-79abb63cd66e/go.mod h1:s
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
-github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=
-github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY=
+github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
+github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
diff --git a/misc/completion/bash/git-bug b/misc/completion/bash/git-bug
index 81eb0d3c..4da6afba 100644
--- a/misc/completion/bash/git-bug
+++ b/misc/completion/bash/git-bug
@@ -2,7 +2,7 @@
__git-bug_debug()
{
- if [[ -n ${BASH_COMP_DEBUG_FILE:-} ]]; then
+ if [[ -n ${BASH_COMP_DEBUG_FILE-} ]]; then
echo "$*" >> "${BASH_COMP_DEBUG_FILE}"
fi
}
@@ -29,7 +29,7 @@ __git-bug_get_completion_results() {
lastChar=${lastParam:$((${#lastParam}-1)):1}
__git-bug_debug "lastParam ${lastParam}, lastChar ${lastChar}"
- if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then
+ if [[ -z ${cur} && ${lastChar} != = ]]; then
# If the last parameter is complete (there is a space following it)
# We add an extra empty parameter so we can indicate this to the go method.
__git-bug_debug "Adding extra empty parameter"
@@ -39,7 +39,7 @@ __git-bug_get_completion_results() {
# When completing a flag with an = (e.g., git-bug -n=<TAB>)
# bash focuses on the part after the =, so we need to remove
# the flag part from $cur
- if [[ "${cur}" == -*=* ]]; then
+ if [[ ${cur} == -*=* ]]; then
cur="${cur#*=}"
fi
@@ -51,7 +51,7 @@ __git-bug_get_completion_results() {
directive=${out##*:}
# Remove the directive
out=${out%:*}
- if [ "${directive}" = "${out}" ]; then
+ if [[ ${directive} == "${out}" ]]; then
# There is not directive specified
directive=0
fi
@@ -65,22 +65,36 @@ __git-bug_process_completion_results() {
local shellCompDirectiveNoFileComp=4
local shellCompDirectiveFilterFileExt=8
local shellCompDirectiveFilterDirs=16
+ local shellCompDirectiveKeepOrder=32
- if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
+ if (((directive & shellCompDirectiveError) != 0)); then
# Error code. No completion.
__git-bug_debug "Received error from custom completion go code"
return
else
- if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then
- if [[ $(type -t compopt) = "builtin" ]]; then
+ if (((directive & shellCompDirectiveNoSpace) != 0)); then
+ if [[ $(type -t compopt) == builtin ]]; then
__git-bug_debug "Activating no space"
compopt -o nospace
else
__git-bug_debug "No space directive not supported in this version of bash"
fi
fi
- if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then
- if [[ $(type -t compopt) = "builtin" ]]; then
+ if (((directive & shellCompDirectiveKeepOrder) != 0)); then
+ if [[ $(type -t compopt) == builtin ]]; then
+ # no sort isn't supported for bash less than < 4.4
+ if [[ ${BASH_VERSINFO[0]} -lt 4 || ( ${BASH_VERSINFO[0]} -eq 4 && ${BASH_VERSINFO[1]} -lt 4 ) ]]; then
+ __git-bug_debug "No sort directive not supported in this version of bash"
+ else
+ __git-bug_debug "Activating keep order"
+ compopt -o nosort
+ fi
+ else
+ __git-bug_debug "No sort directive not supported in this version of bash"
+ fi
+ fi
+ if (((directive & shellCompDirectiveNoFileComp) != 0)); then
+ if [[ $(type -t compopt) == builtin ]]; then
__git-bug_debug "Activating no file completion"
compopt +o default
else
@@ -94,7 +108,7 @@ __git-bug_process_completion_results() {
local activeHelp=()
__git-bug_extract_activeHelp
- if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
+ if (((directive & shellCompDirectiveFilterFileExt) != 0)); then
# File extension filtering
local fullFilter filter filteringCmd
@@ -107,13 +121,12 @@ __git-bug_process_completion_results() {
filteringCmd="_filedir $fullFilter"
__git-bug_debug "File filtering command: $filteringCmd"
$filteringCmd
- elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then
+ elif (((directive & shellCompDirectiveFilterDirs) != 0)); then
# File completion for directories only
- # Use printf to strip any trailing newline
local subdir
- subdir=$(printf "%s" "${completions[0]}")
- if [ -n "$subdir" ]; then
+ subdir=${completions[0]}
+ if [[ -n $subdir ]]; then
__git-bug_debug "Listing directories in $subdir"
pushd "$subdir" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return
else
@@ -128,7 +141,7 @@ __git-bug_process_completion_results() {
__git-bug_handle_special_char "$cur" =
# Print the activeHelp statements before we finish
- if [ ${#activeHelp[*]} -ne 0 ]; then
+ if ((${#activeHelp[*]} != 0)); then
printf "\n";
printf "%s\n" "${activeHelp[@]}"
printf "\n"
@@ -152,17 +165,17 @@ __git-bug_extract_activeHelp() {
local endIndex=${#activeHelpMarker}
while IFS='' read -r comp; do
- if [ "${comp:0:endIndex}" = "$activeHelpMarker" ]; then
+ if [[ ${comp:0:endIndex} == $activeHelpMarker ]]; then
comp=${comp:endIndex}
__git-bug_debug "ActiveHelp found: $comp"
- if [ -n "$comp" ]; then
+ if [[ -n $comp ]]; then
activeHelp+=("$comp")
fi
else
# Not an activeHelp line but a normal completion
completions+=("$comp")
fi
- done < <(printf "%s\n" "${out}")
+ done <<<"${out}"
}
__git-bug_handle_completion_types() {
@@ -218,7 +231,7 @@ __git-bug_handle_standard_completion_case() {
done < <(printf "%s\n" "${completions[@]}")
# If there is a single completion left, remove the description text
- if [ ${#COMPREPLY[*]} -eq 1 ]; then
+ if ((${#COMPREPLY[*]} == 1)); then
__git-bug_debug "COMPREPLY[0]: ${COMPREPLY[0]}"
comp="${COMPREPLY[0]%%$tab*}"
__git-bug_debug "Removed description from single completion, which is now: ${comp}"
@@ -235,8 +248,8 @@ __git-bug_handle_special_char()
if [[ "$comp" == *${char}* && "$COMP_WORDBREAKS" == *${char}* ]]; then
local word=${comp%"${comp##*${char}}"}
local idx=${#COMPREPLY[*]}
- while [[ $((--idx)) -ge 0 ]]; do
- COMPREPLY[$idx]=${COMPREPLY[$idx]#"$word"}
+ while ((--idx >= 0)); do
+ COMPREPLY[idx]=${COMPREPLY[idx]#"$word"}
done
fi
}
@@ -262,7 +275,7 @@ __git-bug_format_comp_descriptions()
# Make sure we can fit a description of at least 8 characters
# if we are to align the descriptions.
- if [[ $maxdesclength -gt 8 ]]; then
+ if ((maxdesclength > 8)); then
# Add the proper number of spaces to align the descriptions
for ((i = ${#comp} ; i < longest ; i++)); do
comp+=" "
@@ -274,8 +287,8 @@ __git-bug_format_comp_descriptions()
# If there is enough space for any description text,
# truncate the descriptions that are too long for the shell width
- if [ $maxdesclength -gt 0 ]; then
- if [ ${#desc} -gt $maxdesclength ]; then
+ if ((maxdesclength > 0)); then
+ if ((${#desc} > maxdesclength)); then
desc=${desc:0:$(( maxdesclength - 1 ))}
desc+="…"
fi
@@ -296,9 +309,9 @@ __start_git-bug()
# Call _init_completion from the bash-completion package
# to prepare the arguments properly
if declare -F _init_completion >/dev/null 2>&1; then
- _init_completion -n "=:" || return
+ _init_completion -n =: || return
else
- __git-bug_init_completion -n "=:" || return
+ __git-bug_init_completion -n =: || return
fi
__git-bug_debug
diff --git a/misc/completion/fish/git-bug b/misc/completion/fish/git-bug
index c5ab1b42..de8ee8da 100644
--- a/misc/completion/fish/git-bug
+++ b/misc/completion/fish/git-bug
@@ -55,6 +55,60 @@ function __git_bug_perform_completion
printf "%s\n" "$directiveLine"
end
+# this function limits calls to __git_bug_perform_completion, by caching the result behind $__git_bug_perform_completion_once_result
+function __git_bug_perform_completion_once
+ __git_bug_debug "Starting __git_bug_perform_completion_once"
+
+ if test -n "$__git_bug_perform_completion_once_result"
+ __git_bug_debug "Seems like a valid result already exists, skipping __git_bug_perform_completion"
+ return 0
+ end
+
+ set --global __git_bug_perform_completion_once_result (__git_bug_perform_completion)
+ if test -z "$__git_bug_perform_completion_once_result"
+ __git_bug_debug "No completions, probably due to a failure"
+ return 1
+ end
+
+ __git_bug_debug "Performed completions and set __git_bug_perform_completion_once_result"
+ return 0
+end
+
+# this function is used to clear the $__git_bug_perform_completion_once_result variable after completions are run
+function __git_bug_clear_perform_completion_once_result
+ __git_bug_debug ""
+ __git_bug_debug "========= clearing previously set __git_bug_perform_completion_once_result variable =========="
+ set --erase __git_bug_perform_completion_once_result
+ __git_bug_debug "Succesfully erased the variable __git_bug_perform_completion_once_result"
+end
+
+function __git_bug_requires_order_preservation
+ __git_bug_debug ""
+ __git_bug_debug "========= checking if order preservation is required =========="
+
+ __git_bug_perform_completion_once
+ if test -z "$__git_bug_perform_completion_once_result"
+ __git_bug_debug "Error determining if order preservation is required"
+ return 1
+ end
+
+ set -l directive (string sub --start 2 $__git_bug_perform_completion_once_result[-1])
+ __git_bug_debug "Directive is: $directive"
+
+ set -l shellCompDirectiveKeepOrder 32
+ set -l keeporder (math (math --scale 0 $directive / $shellCompDirectiveKeepOrder) % 2)
+ __git_bug_debug "Keeporder is: $keeporder"
+
+ if test $keeporder -ne 0
+ __git_bug_debug "This does require order preservation"
+ return 0
+ end
+
+ __git_bug_debug "This doesn't require order preservation"
+ return 1
+end
+
+
# This function does two things:
# - Obtain the completions and store them in the global __git_bug_comp_results
# - Return false if file completion should be performed
@@ -65,17 +119,17 @@ function __git_bug_prepare_completions
# Start fresh
set --erase __git_bug_comp_results
- set -l results (__git_bug_perform_completion)
- __git_bug_debug "Completion results: $results"
+ __git_bug_perform_completion_once
+ __git_bug_debug "Completion results: $__git_bug_perform_completion_once_result"
- if test -z "$results"
+ if test -z "$__git_bug_perform_completion_once_result"
__git_bug_debug "No completion, probably due to a failure"
# Might as well do file completion, in case it helps
return 1
end
- set -l directive (string sub --start 2 $results[-1])
- set --global __git_bug_comp_results $results[1..-2]
+ set -l directive (string sub --start 2 $__git_bug_perform_completion_once_result[-1])
+ set --global __git_bug_comp_results $__git_bug_perform_completion_once_result[1..-2]
__git_bug_debug "Completions are: $__git_bug_comp_results"
__git_bug_debug "Directive is: $directive"
@@ -171,7 +225,11 @@ end
# Remove any pre-existing completions for the program since we will be handling all of them.
complete -c git-bug -e
+# this will get called after the two calls below and clear the $__git_bug_perform_completion_once_result global
+complete -c git-bug -n '__git_bug_clear_perform_completion_once_result'
# The call to __git_bug_prepare_completions will setup __git_bug_comp_results
# which provides the program's completion choices.
-complete -c git-bug -n '__git_bug_prepare_completions' -f -a '$__git_bug_comp_results'
-
+# If this doesn't require order preservation, we don't use the -k flag
+complete -c git-bug -n 'not __git_bug_requires_order_preservation && __git_bug_prepare_completions' -f -a '$__git_bug_comp_results'
+# otherwise we use the -k flag
+complete -k -c git-bug -n '__git_bug_requires_order_preservation && __git_bug_prepare_completions' -f -a '$__git_bug_comp_results'
diff --git a/misc/completion/powershell/git-bug b/misc/completion/powershell/git-bug
index 424ad8ac..99d13e99 100644
--- a/misc/completion/powershell/git-bug
+++ b/misc/completion/powershell/git-bug
@@ -40,6 +40,7 @@ filter __git-bug_escapeStringWithSpecialChars {
$ShellCompDirectiveNoFileComp=4
$ShellCompDirectiveFilterFileExt=8
$ShellCompDirectiveFilterDirs=16
+ $ShellCompDirectiveKeepOrder=32
# Prepare the command to request completions for the program.
# Split the command at the first space to separate the program and arguments.
@@ -69,8 +70,17 @@ filter __git-bug_escapeStringWithSpecialChars {
# If the last parameter is complete (there is a space following it)
# We add an extra empty parameter so we can indicate this to the go method.
__git-bug_debug "Adding extra empty parameter"
- # We need to use `"`" to pass an empty argument a "" or '' does not work!!!
- $RequestComp="$RequestComp" + ' `"`"'
+ # PowerShell 7.2+ changed the way how the arguments are passed to executables,
+ # so for pre-7.2 or when Legacy argument passing is enabled we need to use
+ # `"`" to pass an empty argument, a "" or '' does not work!!!
+ if ($PSVersionTable.PsVersion -lt [version]'7.2.0' -or
+ ($PSVersionTable.PsVersion -lt [version]'7.3.0' -and -not [ExperimentalFeature]::IsEnabled("PSNativeCommandArgumentPassing")) -or
+ (($PSVersionTable.PsVersion -ge [version]'7.3.0' -or [ExperimentalFeature]::IsEnabled("PSNativeCommandArgumentPassing")) -and
+ $PSNativeCommandArgumentPassing -eq 'Legacy')) {
+ $RequestComp="$RequestComp" + ' `"`"'
+ } else {
+ $RequestComp="$RequestComp" + ' ""'
+ }
}
__git-bug_debug "Calling $RequestComp"
@@ -100,7 +110,7 @@ filter __git-bug_escapeStringWithSpecialChars {
}
$Longest = 0
- $Values = $Out | ForEach-Object {
+ [Array]$Values = $Out | ForEach-Object {
#Split the output in name and description
$Name, $Description = $_.Split("`t",2)
__git-bug_debug "Name: $Name Description: $Description"
@@ -145,6 +155,11 @@ filter __git-bug_escapeStringWithSpecialChars {
}
}
+ # we sort the values in ascending order by name if keep order isn't passed
+ if (($Directive -band $ShellCompDirectiveKeepOrder) -eq 0 ) {
+ $Values = $Values | Sort-Object -Property Name
+ }
+
if (($Directive -band $ShellCompDirectiveNoFileComp) -ne 0 ) {
__git-bug_debug "ShellCompDirectiveNoFileComp is called"
diff --git a/misc/completion/zsh/git-bug b/misc/completion/zsh/git-bug
index 3ddfddb8..5da05031 100644
--- a/misc/completion/zsh/git-bug
+++ b/misc/completion/zsh/git-bug
@@ -1,4 +1,5 @@
#compdef git-bug
+compdef _git-bug git-bug
# zsh completion for git-bug -*- shell-script -*-
@@ -17,8 +18,9 @@ _git-bug()
local shellCompDirectiveNoFileComp=4
local shellCompDirectiveFilterFileExt=8
local shellCompDirectiveFilterDirs=16
+ local shellCompDirectiveKeepOrder=32
- local lastParam lastChar flagPrefix requestComp out directive comp lastComp noSpace
+ local lastParam lastChar flagPrefix requestComp out directive comp lastComp noSpace keepOrder
local -a completions
__git-bug_debug "\n========= starting completion logic =========="
@@ -136,6 +138,11 @@ _git-bug()
noSpace="-S ''"
fi
+ if [ $((directive & shellCompDirectiveKeepOrder)) -ne 0 ]; then
+ __git-bug_debug "Activating keep order."
+ keepOrder="-V"
+ fi
+
if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
# File extension filtering
local filteringCmd
@@ -171,7 +178,7 @@ _git-bug()
return $result
else
__git-bug_debug "Calling _describe"
- if eval _describe "completions" completions $flagPrefix $noSpace; then
+ if eval _describe $keepOrder "completions" completions $flagPrefix $noSpace; then
__git-bug_debug "_describe found some completions"
# Return the success of having called _describe