X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/blobdiff_plain/b4f656f00412360441dfe7e41c9733a9ca547015..bb95cfba3b27f4fa1c82998874a9f288c379cb1c:/contrib/stgit-completion.bash diff --git a/contrib/stgit-completion.bash b/contrib/stgit-completion.bash index 1474b4b..a843db4 100644 --- a/contrib/stgit-completion.bash +++ b/contrib/stgit-completion.bash @@ -20,11 +20,13 @@ _stg_commands=" clean clone commit + cp export files float fold goto + hide id import init @@ -36,17 +38,20 @@ _stg_commands=" pop pull push + rebase refresh rename resolved rm series show + sink status sync top unapplied uncommit + unhide " # The path to .git, or empty if we're not in a repository. @@ -76,6 +81,13 @@ _unapplied_patches () [ "$g" ] && cat "$g/patches/$(_current_branch)/unapplied" } +# List of all applied patches. +_hidden_patches () +{ + local g=$(_gitdir) + [ "$g" ] && cat "$g/patches/$(_current_branch)/hidden" +} + # List of all patches. _all_patches () { @@ -90,13 +102,19 @@ _all_other_patches () local b=$(_current_branch) local g=$(_gitdir) [ "$g" ] && cat "$g/patches/$b/applied" "$g/patches/$b/unapplied" \ - | grep -v "^$(< $g/patches/$b/current)$" + | grep -v "^$(cat $g/patches/$b/current 2> /dev/null)$" +} + +_all_branches () +{ + local g=$(_gitdir) + [ "$g" ] && (cd .git/patches/ && echo *) } # List the command options _cmd_options () { - stg $1 --help | grep -e " --[A-Za-z]" | sed -e "s/.*\(--[^ =]\+\).*/\1/" + stg $1 --help 2>/dev/null | grep -e " --[A-Za-z]" | sed -e "s/.*\(--[^ =]\+\).*/\1/" } # Generate completions for patches and patch ranges from the given @@ -132,6 +150,11 @@ _complete_patch_range_options () COMPREPLY=($(compgen -W "$options" -- "$cur")) } +_complete_branch () +{ + COMPREPLY=($(compgen -W "$(_cmd_options $1) $($2)" -- "${COMP_WORDS[COMP_CWORD]}")) +} + # Generate completions for options from the given list. _complete_options () { @@ -187,8 +210,12 @@ _stg () # stack commands float) _stg_patches $command _all_patches ;; goto) _stg_patches $command _all_other_patches ;; + hide) _stg_patches $command _unapplied_patches ;; pop) _stg_patches $command _applied_patches ;; push) _stg_patches $command _unapplied_patches ;; + series) _stg_patches $command _all_patches ;; + sink) _stg_patches $command _all_patches ;; + unhide) _stg_patches $command _hidden_patches ;; # patch commands delete) _stg_patches $command _all_patches ;; export) _stg_patches $command _applied_patches ;; @@ -202,6 +229,9 @@ _stg () sync) _stg_patches $command _applied_patches ;; # working-copy commands diff) _stg_patches_options $command _applied_patches "-r --range" ;; + # commands that usually raher accept branches + branch) _complete_branch $command _all_branches ;; + rebase) _complete_branch $command _all_branches ;; # all the other commands *) _stg_common $command ;; esac