From 8991a2219e5245aa053051bcf8c0e159d411e02a Mon Sep 17 00:00:00 2001 From: Markus Vock Date: Thu, 29 Mar 2012 11:41:48 +0200 Subject: [PATCH] Added _be, a file for the zsh completion system (see zshcompsys(1)). Copy to, e. g. /usr/local/share/zsh/site-functions. --- misc/completion/_be | 373 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 373 insertions(+) create mode 100644 misc/completion/_be diff --git a/misc/completion/_be b/misc/completion/_be new file mode 100644 index 0000000..15f9fe0 --- /dev/null +++ b/misc/completion/_be @@ -0,0 +1,373 @@ +#compdef be + +__be_commands () { + local -a commands + commands=( + assign:'Assign an individual or group to fix a bug' + comment:'Add a comment to a bug' + commit:'Commit the currently pending changes to the repository' + depend:'Add / remove bug dependencies' + diff:'Compare bug reports with older tree' + due:'Set bug due dates' + help:'Print help for given command or topic' + html:'Generate a static HTML dump of the current repository status' + import_xml:'Import comments and bugs from XML' + init:'Create an on-disk bug repository' + list:'List bugs' + merge:'Merge duplicate bugs' + new:'Create a new bug' + remove:'Remove (delete) a bug and its comments' + serve:'Serve bug directory storage over HTTP' + set:'Change bug directory settings' + severity:'Change a bug’s severity level' + show:'Show a particular bug, comment, or combination of both' + status:'Change a bug’s status level' + subscribe:'(Un)subscribe to change notification' + tag:'Tag a bug, or search bugs for tags' + target:'Assorted bug target manipulations and queries' + ) + + integer ret=1 + _describe -t commands 'commands' commands && ret=0 + return ret +} + +_be-assign () { + local curcontext="$curcontext" state line expl ret=1 + assignees=("${(f)$(be assign --complete)}" "-" "none") + ids=("${(f)$(be assign - --complete)}") + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + ':assignee:($assignees)' \ + ':ticket ID:($ids)' \ + && return 0 +} + +_be-comment () { + local curcontext="$curcontext" state line expl ret=1 + ids=("${(f)$(be comment --complete)}") + ids=(${ids[5,-1]}) + mimes=("text/plain" "text/xml" "image/jpeg" "image/png" "image/svg" "application/xhtml+xml" "application/pdf") + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '(-a --author)'{-a,--author=-}'[Set the comment author]:author:($authors)' \ + '--alt-id[Set an alternate comment ID]:($ids)' \ + '(-c --content-type)'{-c,--content-type=-}'[Set comment content-type (e.g. text/plain)]:mime type:($mimes)' \ + ':ID:($ids)' \ + && return 0 +} + +_be-commit () { + local curcontext="$curcontext" state line expl ret=1 + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '(-b --body)'{-b,--body=-}'[Provide the detailed body for the commit message]:body:((EDITOR\:"start editor" ""\:"write on command line"))' \ + '(-a --allow-empty)'{-a,--allow-empty}'[Allow empty commits]' \ + ':summary (‘-’ for stdin):' \ + && return 0 +} + +_be-depend () { + local curcontext="$curcontext" state line expl ret=1 + ids=("${(f)$(be depend --complete)}") + ids=(${ids[9,-1]}) + statusses=("${(f)$(be depend --status --complete)}") + sevties=("${(f)$(be depend --severity --complete)}") + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '(-r --remove)'{-r,--remove}'[Remove dependency (instead of adding it)]' \ + '(-s --show-status)'{-s,--show-status}'[Show status of blocking bugs]' \ + '(-S --show-summary)'{-S,--show-summary}'[Show summary of blocking bugs]' \ + '--status=-[Only show bugs matching the STATUS specifier]:status:($statusses)' \ + '--severity=-[Only show bugs matching the SEVERITY specifier]:severity:($sevties)' \ + {-t,--tree-depth=-}'[Print dependency tree rooted at BUG-ID with DEPTH levels of both blockers and blockees]:depth:' \ + '--repair[Check for and repair one-way links]' \ + '*:ID:($ids)' \ + && return 0 +} + +_be-diff () { + # TODO subscription completion is too hard for me atm… + # one should probably use _combination… but how?? + # TODO maybe even a nice copletion for repo? but how?? + local curcontext="$curcontext" state line expl ret=1 + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '(-r --repo)'{-r,--repo=-}'[Compare with repository instead of the current repository]:repository:' \ + '(-s --subscription)'{-s,--subscribe=-}'[Only print changes matching subscription]:subscription:' \ + '(-u --uuids)'{-u,--uuids}'[Only print the changed bug UUIDS]' \ + && return 0 +} + +_be-due () { + # XXX This command is currently defunct in be itself +} + +_be-help () { + # XXX Needs no completion. What to do? +} + +_be-html () { + local curcontext="$curcontext" state line expl ret=1 + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '(-o --output)'{-o,--output=-}'[Set the output path]' \ + '(-t --template)'{-t,--template=-}'[Use a different template]' \ + '--title=-[Set the bug repository title]' \ + '--index-header=-[Set the index page headers]' \ + '(-e --export-template)'{-e,--export-template}'[Export the default template and exit]' \ + '(-d --export-template-dir)'{-d,--export-template-dir=-}'[Set the directory for the template export]' \ + '(-l --min-id-length)'{-l,--min-id-length=-}'[Attempt to truncate bug and comment IDs to this length]' \ + '(-v -verbose)'{-v,--verbose}'[Verbose output]' \ + && return 0 +} + +_be-import_xml () { + local curcontext="$curcontext" state line expl ret=1 + ids=("${(f)$(be import_xml --comment-root --complete)}") + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '(-i --ignore-missing-references)'{-i,--ignore-missing-references}'[Ignore unknown elements]' \ + '(-a --add-only)'{-a,--add-only}'[Cancel when bugs already exist]' \ + '(-p --preserve-uuids)'{-p,--preserve-uuids}'[Preserve UUIDs for trusted input (potential name collisions)]' \ + '(-c --comment-root)'{-c,--comment-root=-}'[Supply a bug or comment ID as the root of any standalon elements]:ID:($ids)' \ + && return 0 +} + +_be-init () { + local curcontext="$curcontext" state line expl ret=1 + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + && return 0 +} + +_be-list () { + local curcontext="$curcontext" state line expl ret=1 + statusses=("${(f)$(be list --status --complete)}") + sevties=("${(f)$(be list --severity --complete)}") + devers=("${(f)$(be list --assigned --complete)}") + crits=(assigned comments creator extra_strings full last_modified mine reporter severity status summary time uuid) + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '--status=-[Only show bugs matching the status specifier]:status level:($statusses)' \ + '--severity=-[Only show bugs matching the severity specifier]:severity:($sevties)' \ + '--important[List bugs of “serious” or higher severity]' \ + '(-a --assigned)'{-a,--assigned=-}'[Only show bugs assigned to a certain developer]:developer:($devers)' \ + '(-m --mine)'{-m,--mine}'[Only show bugs assigned to you]' \ + '(-e --extra-strings)'{-e,--extra-strings=-}'[Only show bugs matching the argument, e.g. --extra-strings TAG:working,TAG:xml]' \ + '(-S --sort)'{-S,--sort=-}'[Adjust bug-sort criteria]:sort criteria:($crits)' \ + '(-t --tags)'{-t,--tags}'[Add TAGS: field to standard listing format]' \ + '(-i --ids)'{-i,--ids}'[Only print the bug IDs]' \ + '(-x --xml)'{-x,--xml}'[Dump output in XML format]' \ + && return 0 +} + +_be-merge () { + local curcontext="$curcontext" state line expl ret=1 + ids=("${(f)$(be merge --complete)}") + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '1:merge into:($ids)' \ + '2:merge what:($ids)' \ + && return 0 +} + +_be-new () { + local curcontext="$curcontext" state line expl ret=1 + # These seemingly ugly lines split the output of the command in $(cmd) into an array. + sevties=("${(f)$(be new -s --complete)}") + statusses=("${(f)$(be new -t --complete)}") + devers=("${(f)$(be new -a --complete)}") + creators=("${(f)$(be new -c --complete)}") # XXX This currently seems to give *no* results + reporters=("${(f)$(be new -r --complete)}") # XXX This currently seems to give *no* results + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '(-r --reporter)'{-r,--reporter=-}'[The user who reported the bug]:reporter:($reporters)' \ + '(-c --creator)'{-c,--creator=-}'[The user who created the bug]:creator:($creators)' \ + '(-a --assigned)'{-a,--assigned=-}'[The developer in charge of the bug]:developer:($devers)' \ + '(-t --status)'{-t,--status=-}'[The bug’s status level]:status level:($statusses)' \ + '(-s --severity)'{-s,--severity=-}'[The bug’s severity]:severity:($sevties)' \ + && return 0 +} + +_be-remove () { + local curcontext="$curcontext" state line expl ret=1 + ids=("${(f)$(be remove --complete)}") + ids=(${ids[2,-1]}) + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '*:ID:($ids)' \ + && return 0 +} + +_be-serve () { + local curcontext="$curcontext" state line expl ret=1 + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '--port=-[Bind server to port]' \ + '--host=-[Set host string]' \ + '(-r --read-only)'{-r,--read-only}'[Disable operations that require writing]' \ + '(-n --notify)'{-n,--notify=-}'[Send notification emails for changes]' \ + '(-s --ssl)'{-s,--ssl}'[Use CherryPy to serve HTTPS (HTTP over SSL/TLS)]' \ + '(-a --auth)'{-a,--auth=-}'[Require authentication]' \ + && return 0 +} + +_be-set () { + local curcontext="$curcontext" state line expl ret=1 + + #XXX This command is documented as not providing a good interface for some settings. Postponed! + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + && return 0 +} + +_be-severity () { + local curcontext="$curcontext" state line expl ret=1 + sevties=("${(f)$(be severity --complete)}") + sevties=(${sevties[2,-1]}) + ids=("${(f)$(be severity ${sevties[1]} --complete)}") + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '1:severity:($sevties)' \ + '2:ID:($ids)' \ + && return 0 +} + +_be-show () { + local curcontext="$curcontext" state line expl ret=1 + ids=("${(f)$(be show --complete)}") + + # TODO completion of comment IDs does *not* work! + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '(-x --xml)'{-x,--xml}'[Dump as XML]' \ + '--only-raw-body[When printing only a single comment, just print it’s body]' \ + '(-c --no-comments)'{-c,--no-comments}'[Disable comment output]' \ + '*:ID:($ids[5,-1])' \ + && return 0 +} + +_be-status () { + local curcontext="$curcontext" state line expl ret=1 + statusses=("${(f)$(be status --complete)}") + statusses=(${statusses[2,-1]}) + ids=("${(f)$(be status ${statusses[1]} --complete)}") + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '1:status:($statusses)' \ + '2:ID:($ids)' \ + && return 0 +} + +_be-subscribe () { + local curcontext="$curcontext" state line expl ret=1 + ids=("${(f)$(be subscribe --complete)}") + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '(-u --unsubscribe)'{-u,--unsubscribe}'[Unsubscribe instead of subscribing]' \ + '(-a --list-all)'{-a,--list-all}'[List subscribers for all bugs]' \ + '(-l --list)'{-l,--list}'[List subscribers]' \ + '(-s --subscriber)'{-s,--subscriber=-}'[Email address of the subscriber]:email:' \ + '(-S --servers)'{-S,--servers=-}'[Servers from which you want notification]:server:' \ + '(-t --types)'{-t,--types=-}'[Types of changes you wish to be notified about]:types:' \ + '1:ID:($ids[8,-1])' \ + && return 0 +} + +_be-tag () { + local curcontext="$curcontext" state line expl ret=1 + ids=("${(f)$(be tag --complete)}") + # tags=("${(f)$(be tag ${ids[1]} --complete)}") # XXX This seems to always return *nothing* + tags=("${(f)$(be tag --list)}") + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '(-r --remove)'{-r,--remove}'[Remove tag (instead of adding)]' \ + '(-l --list)'{-l,--list}'[List all available tags and exit]' \ + '1:ID:($ids[4,-1])' \ + '*:tag:($tags)' \ + && return 0 +} + +_be-target () { + local curcontext="$curcontext" state line expl ret=1 + ids=("${(f)$(be target --complete)}") + # awk splits the lines into tokens delimited by ': ', then prints only the second of each line. + targets=("${(f)$(be list --severity=target | awk -F ': ' -- '{print($2)}' )}") + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '(-r --resolve *)'{-r,--resolve+}'[Print the UUID for the target bug whose summary matches TARGET]:target:($targets)' \ + '1:ID:($ids[3,-1])' \ + '2:target:($targets)' \ + && return 0 +} + +_be () { + local curcontext="$curcontext" state line expl ret=1 + + _arguments -C \ + '(-h --help)'{-h,--help}'[Print a help message]' \ + '--complete[Print a list of possible completions]' \ + '(-r --repo)'{-r,--repo=-}'[Select BE repository (see ‘be help repo’) rather than the current directory]:repository: ' \ + '--paginate[Pipe all output into less (or if set, $PAGER)]' \ + '--no-pager[Do not pipe output into a pager]' \ + '--version[Print version string]' \ + '--full-version[Print full version information]' \ + '1:command:->command' \ + '*::argument:->option-or-argument' && ret=0 + + case $state in + (command) + _wanted commands expl 'svn command' __be_commands && ret=0 + #__be_commands + ;; + (option-or-argument) + becommand="${words[1]}" + curcontext="${curcontext%:*:*}:be${becommand}:" + _call_function ret _be-${becommand} + + ;; + *) + echo "$state" + ;; + esac +} + +_be "$@" -- 2.26.2