about summary refs log tree commit diff
path: root/Completion/Unix
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix')
-rw-r--r--Completion/Unix/Command/_stgit59
1 files changed, 9 insertions, 50 deletions
diff --git a/Completion/Unix/Command/_stgit b/Completion/Unix/Command/_stgit
index c8a3c8c80..129b21a92 100644
--- a/Completion/Unix/Command/_stgit
+++ b/Completion/Unix/Command/_stgit
@@ -2,53 +2,7 @@
 
 typeset -a subcmds
 
-subcmds=(
-  'help:print the detailed command usage'
-  'version:display version information'
-  'copyright:display copyright information'
-  'clone:make a local clone of a remote repository'
-  'id:print the GIT hash value of a StGIT reference'
-  'applied:print the applied patches'
-  'branch:manage patch stacks'
-  'clean:delete the empty patches in the series'
-  'commit:permanently store the applied patches into stack base'
-  'float:push patches to the top, even if applied'
-  'goto:push or pop patches to the given one'
-  'hide:hide a patch in the series'
-  'init:initialise the current branch for use with StGIT'
-  'patches:show the applied patches modifying a file'
-  'pop:pop one or more patches from the stack'
-  'pull:pull the changes from the remote repository'
-  'push:push one or more patches onto of the stack'
-  'rebase:move the stack base to another point in history'
-  'repair:Fix StGit metadata if branch was modified with git commands'
-  'series:print the patch series'
-  'sink:send patches deeper down the stack'
-  'top:print the name of the top patch'
-  'unapplied:print the unapplied patches'
-  'uncommit:turn regular GIT commits into StGIT patches'
-  'unhide:unhide a hidden patch in the series'
-  'delete:delete patches'
-  'edit:edit a patch description or diff'
-  'export:exports patches to a directory'
-  'files:show the files modified by a patch (or the current patch)'
-  'fold:integrate a GNU diff patch into the current patch'
-  'import:import a GNU diff file as a new patch'
-  'log:display the patch changelog'
-  'mail:send a patch or series of patches by e-mail'
-  'new:create a new patch and make it the topmost one'
-  'pick:import a patch from a different branch or a commit object'
-  'refresh:generate a new commit for the current patch'
-  'rename:rename a patch in the series'
-  'show:show the commit corresponding to a patch (or the current patch)'
-  'sync:synchronise patches with a branch or a series'
-  'add:add files or directories to the repository'
-  'cp:copy files inside the repository'
-  'diff:show the tree diff'
-  'resolved:mark a file conflict as solved'
-  'rm:remove files from the repository'
-  'status:show the tree status'
-)
+subcmds=( ${${${(M)${(f)"$(stg help 2> /dev/null)"}## *}#  }/#(#b)([^[:space:]]##)[[:space:]]##(*)/$match[1]:$match[2]} )
 
 local curcontext="$curcontext"
 local subcmd
@@ -64,14 +18,19 @@ else
 
   case $subcmd in
     (push)
-      _wanted -V "unapplied patches" expl "patch" compadd $(stg unapplied) \
+      _wanted -V "unapplied patches" expl "patch" \
+       	compadd ${${(M)${(f)"$(stg series 2> /dev/null)"}##- *}#- } \
 		&& ret=0
     ;;
     (pop)
-      _wanted -V "applied patches" expl "patch" compadd $(stg applied) && ret=0
+      _wanted -V "applied patches" expl "patch" \
+	compadd ${${(M)${(f)"$(stg series 2> /dev/null)"}##[+>] *}#[+>] } \
+		&& ret=0
     ;;
     (edit|files|goto|rename|log|float|delete|sink|mail|sync|show|pick|hide)
-      _wanted -V "patches" expl "patch" compadd $(stg series --noprefix) && ret=0
+      _wanted -V "patches" expl "patch" \
+	compadd $(stg series --noprefix > /dev/null) \
+		&& ret=0
     ;;
     (*)
       _files