summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Completion/Unix/Command/_bzr329
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