about summary refs log tree commit diff
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