X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/blobdiff_plain/de7a79c435e5bcbe713c75ec2be1b0221e1d555e..340793d1f7dc889720ceef3271ca58187474d110:/contrib/stgit-completion.bash diff --git a/contrib/stgit-completion.bash b/contrib/stgit-completion.bash index bef5dbb..8d49e21 100644 --- a/contrib/stgit-completion.bash +++ b/contrib/stgit-completion.bash @@ -13,15 +13,14 @@ _stg_commands=" add applied - assimilate branch - bury delete diff clean clone commit cp + edit export files float @@ -42,10 +41,12 @@ _stg_commands=" rebase refresh rename + repair resolved rm series show + sink status sync top @@ -81,6 +82,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 () { @@ -98,6 +106,36 @@ _all_other_patches () | grep -v "^$(cat $g/patches/$b/current 2> /dev/null)$" } +_all_branches () +{ + local g=$(_gitdir) + [ "$g" ] && (cd $g/patches/ && echo *) +} + +_conflicting_files () +{ + local g=$(_gitdir) + [ "$g" ] && stg status --conflict +} + +_dirty_files () +{ + local g=$(_gitdir) + [ "$g" ] && stg status --modified --new --deleted +} + +_unknown_files () +{ + local g=$(_gitdir) + [ "$g" ] && stg status --unknown +} + +_known_files () +{ + local g=$(_gitdir) + [ "$g" ] && git ls-files +} + # List the command options _cmd_options () { @@ -137,6 +175,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 () { @@ -144,6 +187,11 @@ _complete_options () COMPREPLY=($(compgen -W "$options" -- "${COMP_WORDS[COMP_CWORD]}")) } +_complete_files () +{ + COMPREPLY=($(compgen -W "$(_cmd_options $1) $2" -- "${COMP_WORDS[COMP_CWORD]}")) +} + _stg_common () { _complete_options "$(_cmd_options $1)" @@ -190,27 +238,35 @@ _stg () # repository commands id) _stg_patches $command _all_patches ;; # stack commands - bury) _stg_patches_options $command _applied_patches "-t --to" ;; float) _stg_patches $command _all_patches ;; goto) _stg_patches $command _all_other_patches ;; - hide) _stg_patches $command _all_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 ;; - unhide) _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 ;; + edit) _stg_patches $command _applied_patches ;; + export) _stg_patches $command _all_patches ;; files) _stg_patches $command _all_patches ;; log) _stg_patches $command _all_patches ;; mail) _stg_patches $command _all_patches ;; pick) _stg_patches $command _unapplied_patches ;; - refresh)_stg_patches_options $command _applied_patches "-p --patch" ;; +# refresh)_stg_patches_options $command _applied_patches "-p --patch" ;; + refresh) _complete_files $command "$(_dirty_files)" ;; rename) _stg_patches $command _all_patches ;; show) _stg_patches $command _all_patches ;; sync) _stg_patches $command _applied_patches ;; # working-copy commands diff) _stg_patches_options $command _applied_patches "-r --range" ;; + resolved) _complete_files $command "$(_conflicting_files)" ;; + add) _complete_files $command "$(_unknown_files)" ;; +# rm) _complete_files $command "$(_known_files)" ;; + # 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