diff options
-rw-r--r-- | Completion/Unix/Command/_bzr | 329 |
1 files changed, 321 insertions, 8 deletions
diff --git a/Completion/Unix/Command/_bzr b/Completion/Unix/Command/_bzr index 26e992dd3..53c663b5f 100644 --- a/Completion/Unix/Command/_bzr +++ b/Completion/Unix/Command/_bzr @@ -1,13 +1,326 @@ #compdef bzr -local _bzr_subcommands expl curcontext="$curcontext" +# bzr is the bazaar-ng revision-control system -_bzr_subcommands=(${(f)"$(_call_program bzr bzr shell-complete)"}) +local curcontext="$curcontext" state line expl cmd args ret=1 +typeset -A opt_args -if (( CURRENT == 2 )); then - _describe -t subcommand 'subcommand' _bzr_subcommands -else -# this part should call bzr shell-complete <subcmd> when -# it has been tweaked properly - _files +_arguments -C \ + '1: :->cmd' \ + '*:: :->args' && ret=0 + +if (( ! $+_svn_cmds )); then + typeset -gH _bzr_cmds + _bzr_cmds=(${(f)"$(_call_program bzr bzr shell-complete)"}) +fi + +if [[ $state != 'args' ]]; then + _describe -t subcommand 'subcommand' _bzr_cmds + return 0 fi + +cmd="$words[1]" +curcontext="${curcontext%:*:*}:bzr-$cmd:" + +(( $+functions[_bzr_unknownFiles] )) || +_bzr_unknownFiles() { + local fileList + fileList=(${(ps:\0:)"$(bzr ls --null --unknown)"}) + compadd -af fileList + return 0 +} + +(( $+functions[_bzr_unknownRoot] )) || +_bzr_unknownRoot() { + local fileList + fileList=(${(ps:\0:)"$(bzr ls --null --from-root --unknown)"}) + compadd -af fileList + return 0 +} + +(( $+functions[_bzr_versionedFiles] )) || +_bzr_versionedFiles() { + local fileList + fileList=(${(ps:\0:)"$(bzr ls --null --versioned)"}) + compadd -af fileList + return 0 +} + +(( $+functions[_bzr_completeParents] )) || +_bzr_completeParents() { + local parentFile=$(bzr root 2>/dev/null)/.bzr/parent + [[ -r $parentFile ]] && compadd -X "Completing parents" $(cat $parentFile) +} + +args=( '(-)'{--help,-h}'[show help message]' ) + +case $cmd in +(add) + args+=( + '--no-recurse[do not recurse into subdirectories]' + '(-q --quiet)'{--quiet,-q}'[be quiet]' + '*:unknown files:_bzr_unknownFiles' + ) + ;; + +(annotate|praise|blame) + args+=( '*:files:_bzr_versionedFiles' ) + ;; + +(clone|branch|get) + args+=( + '(-r --revision)'{--revision,-r}'[revision]:rev:' + '--basis[specify basis branch]:basis:' + ) + if (( CURRENT == 2 )); then + args+=( '*:FROM_LOCATION:_files -/' ) + elif (( CURRENT == 3 )); then + args+=( '*:TO_LOCATION:_files -/' ) + fi + ;; + +(rename|mv) + if (( CURRENT == 2 )); then + args+=( '*:old name:_bzr_versionedFiles' ) + else + args+=( '*:new name:' ) + fi + ;; + +(cat) + args+=( + '(-r --revision)'{--revision,-r}'[revision]:rev:' + '*:file:_bzr_versionedFiles' + ) + ;; + +(root) + args+=( '*:file:_files' ) + ;; + +(log) + args+=( + '(-r --revision)'{--revision,-r}'[revision or range]:rev or rev range:' + '(-v --verbose)'{--verbose,-v}'[show revision manifest]' + '(-l --short --long)'{--long,-l}'[use long format (default)]' + '(-l --long)--short[use short format]' + '(-m --message)'{--message,-m}'[specify regexp]:regexp:' + '--show-ids[show file IDs]' + '--forward[reverse direction of revisions]' + '--timezone[specify timezone for dates]:timezone:' + '*:file:_bzr_versionedFiles' + ) + ;; + +(resolve) + args+=( + '--all[resolve all conflicts in this tree]' + '*:file:_bzr_versionedFiles' + ) + ;; + +(status|st|stat) + args+=( + '--all[include unchanged versioned files]' + '--show-ids[show file IDs]' + '*:file:_bzr_versionedFiles' + ) + ;; + +(check) + args+=( + '(-v --verbose)'{--verbose,-v}'[display more information]' + '*:DIR:_files -/' + ) + ;; + +(mkdir|upgrade|renames) + args+=( '*:DIR:_files -/' ) + ;; + +(remove|rm) + args+=( + '(-v --verbose)'{--verbose,-v}'[display more information]' + '*:file:_bzr_versionedFiles' + ) + ;; + +(pull) + args+=( + '--remember[Remember the specified location as a default]' + '--overwrite[Ignore differences, overwrite unconditionally]' + '*:local repository:_files -/' + ) + _bzr_completeParents + ;; + +(missing) + args+=( + '(-v --verbose -q --quiet)'{--verbose,-v}'[display more information]' + '(-q --quiet -v --verbose)'{--quiet,-q}'[be quiet]' + '(-l --long --short --log_format)--line[Use log format with one line per revision. Same as "--log-format line"]' + '(-l --long --short --line)--log-format[Use the specified log format]:log format' + '(-l --long --short --line --log-format)'{--long,-l}'[Use detailed log format. Same as "--log-format long"]' + '--mine-only[Display changes in the local branch only]' + '--reverse[Reverse the order of revisions]' + '(-l --long --log_format)--short[Use moderately short log format. Same as "--log-format short"]' + '--show-ids[show internal object ids]' + '--theirs-only[Display changes in the remote branch only]' + '*:local repository:_files -/' + ) + _bzr_completeParents + ;; + +(commit|checkin|ci) + args+=( + '(-m --message)'{--message,-m}'[commit message]:message text:' + '(-F --file)'{--file,-F}'[commit message from file]:message file:' + '--unchanged[include unchanged files]' + '(-v --verbose)'{--verbose,-v}'[display more information]' + '*:modified files:_bzr_versionedFiles' + ) + ;; + +(conflicts|added|deleted|modified|unknowns|directories|ignored) + ;; + +(revno|init|version) + ;; + +(whoami) + args+=( '--email[only show e-mail address]' ) + ;; + +(inventory) + args+=( + '(-r --revision)'{--revision,-r}'[show inventory of a revision]:revision:' + '--show-ids[show file IDs]' + ) + ;; + +(diff|dif|di) + args+=( + '(-r --revision)'{--revision,-r}'[revision]:revision:' + '--diff-options[options to pass to gdiff]:diff options:' + '*:files:_files' + ) + ;; + +(export) + args+=( + '(-r --revision)'{--revision,-r}'[revision]:revision:' + '--format=[format of exported file]:format:(dir tar tgz tbz2)' + '--root[root directory of patch]:_files -/' + '*:destination:_files' + ) + ;; + +(ignore) + args+=( '*:NAME_PATTERN:_bzr_unknownRoot' ) + ;; + +(info) + args+=( '*:branch:_files -/' ) + ;; + +(testament) + args+=( + '(-r --revision)'{--revision,-r}'[revision]:revision:' + '(-l --long)'{--long,-l}'[use long format]' + '*:branch:_files -/' + ) + ;; + +(revert|merge-revert) + args+=( + '(-r --revision)'{--revision,-r}'[revision]:revision:' + '--no-backup[skip generation of backup~ files]' + '*:file:_bzr_versionedFiles' + ) + ;; + +(merge) + args+=( + '(-r --revision)'{--revision,-r}'[revision]:revision:' + '--reprocess[Reprocess to reduce spurious conflicts]' + '--show-base[Show base revision text in conflicts]' + '--force[ignore uncommitted changes]' + '--merge-type:merge type:(diff3 merge3 weave)' + '*:local repository:_files -/' + ) + _bzr_completeParents + ;; + +(ls) + args+=( + '(-v --verbose)'{--verbose,-v}'[display more information]' + '(-r --revision)'{--revision,-r}'[revision]:revision:' + '--from-root[Print all paths from the root of the branch]' + '--non-recursive[Do not recurse into subdirectories]' + '--null[Null separate the files]' + '--ignored[Print ignored files]' + '--unknown[Print unknown files]' + '--versioned[Print versioned files]' + ) + ;; + +(move) + if (( CURRENT == 2 )); then + args+=( + '*:files:_bzr_versionedFiles' + ) + else + args=( + '*:destination dir:_files -/' + ) + fi + ;; + +(help) + args=( + '(-l --long)'{--long,-l}'[use long format]' + '*:subcmds:->cmds' + ) + _arguments -s "$args[@]" && ret=0 + _describe -t subcommand 'subcommand' _bzr_cmds + return 0 + ;; + + # Plugins + +(visualize|visualise|viz|vis) + args+=( '(-r --revision)'{--revision,-r}'[starting revision]:rev:' ) + ;; + +(gannotate|gblame|gpraise) + args+=( + '--all[show annotations on all lines]' + '--plain[do not hightlight annotation lines]' + '*:files:_bzr_versionedFiles' + ) + ;; + +(push) + args+=( + '--overwrite[Ignore differences, overwrite unconditionally]' + '*:local repository:_files -/' + ) + _bzr_completeParents + ;; + +(clean-tree) + args+=( + '--dry-run[show files to delete instead of deleting them]' + '--ignored[delete all ignored files]' + '--detritus[delete conflict files, merge backups, failed self-tests, *~, *.tmp, etc]' + ) + ;; + +(*) + _message "unknown bzr command completion: $cmd" + return 1 + ;; +esac + +_arguments -s "$args[@]" && ret=0 +return ret |