Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: PATCH: _bzr
- X-seq: zsh-workers 22390
- From: Wayne Davison <wayned@xxxxxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxx
- Subject: Re: PATCH: _bzr
- Date: Tue, 28 Mar 2006 15:07:59 -0800
- In-reply-to: <20050909134846.GA22966@xxxxxxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
- References: <20050906160630.GA10503@xxxxxxxxxxx> <5740.1126261568@xxxxxxxxxxxxxxxxxxxxxxx> <20050909134846.GA22966@xxxxxxxxxxx>
There's another _bzr completion function available that was in the bzr
repository (in the contrib/zsh subdir). This one is more complete than
what we have, so I refined it quite a bit, and then checked it in.
Since many of you folks are much better at completion functions than me,
please feel free to give it a look and see if it can't be improved even
more. I'll attach it to this message to make it easy to review...
..wayne..
#compdef bzr
# bzr is the bazaar-ng revision-control system
local curcontext="$curcontext" state line expl cmd args ret=1
typeset -A opt_args
_arguments -C \
'1: :->cmd' \
'*:: :->args' && ret=0
if (( ! $+_bzr_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
Messages sorted by:
Reverse Date,
Date,
Thread,
Author