# svk completion by Guillaume Rousse # # $Id: svk,v 1.1 2006/03/01 10:45:03 ianmacd Exp $ _svk() { local cur prev commands options command COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} commands='add admin annotate ann blame praise cat checkout co cleanup \ cmerge cm commit ci copy cp delete del remove rm depotmap \ depot describe desc diff di help h ? import info list ls log \ merge mirror mi mkdir move mv ren rename patch propdel pd pdel \ propedit pe pedit propget pg pget proplist pl plist propset ps \ pset pull push resolved revert smerge sm status st stat switch \ sw sync sy update up verify' if [[ $COMP_CWORD -eq 1 ]] ; then if [[ "$cur" == -* ]]; then COMPREPLY=( $( compgen -W '--version' -- $cur ) ) else COMPREPLY=( $( compgen -W "$commands" -- $cur ) ) fi else prev=${COMP_WORDS[COMP_CWORD-1]} case $prev in -@(F|-file|-targets)) _filedir return 0; ;; --encoding) COMPREPLY=( $( compgen -W \ '$( iconv --list | sed -e "s@//@@;" )' \ -- "$cur" ) ) return 0; ;; esac command=${COMP_WORDS[1]} if [[ "$cur" == -* ]]; then # possible options for the command case $command in add) options=' --non-recursive -N -q --quiet' ;; @(blame|annotate|ann|praise)) options='-r --revisions -x --cross' ;; cat) options='-r --revision' ;; @(checkout|co)) options='-r --revision -q --quiet -N \ --non-recursive -l --list -d \ --detach --export --relocate \ --purge' ;; cleanup) options='-a --all' ;; @(cmerge|cm)) options='-c --change -l --log -r \ --revision -a --auto \ --verbatim --no-ticket -m \ --message -F --file --template \ --encoding -P --patch -S \ --sign -C --check-only --direct' ;; @(commit|ci)) options='--import -m --message -F \ --file --encoding --template \ -P --patch -S --sign -C \ --check-only -N \ --non-recursive --direct' ;; @(copy|cp)) options='-r --revision -p --parent -q \ --quiet -m --message -F --file \ --template --encoding -P \ --patch -S --sign -C \ --check-only --direct' ;; @(delete|del|remove|rm)) options='-k --keep-local -m --message \ -F --file --encoding \ --template -P --patch -S \ --sign -C --check-only --direct' ;; @(depotmap|depot)) options='-i --init -l --list -d \ --detach --relocate' ;; @(diff|di)) options='-r --revision -s --summarize \ -b --verbose -N --non-recursive' ;; import) options='-f --from-checkout -t \ --to-checkout -m --message -F \ --file --template --encoding \ -P --patch -S --sign -C \ --check-only -N \ --non-recursive --direct' ;; @(list|ls)) options='-r --revision -v --verbose -R \ --recursive -d --depth -f \ --full-path' ;; log) options='-r --revision -l --limit -q \ --quiet -x --cross -v --verbose' ;; merge) options='-r --revision -c --change -I \ --incremental -a --auto -l \ --log -s --sync -t --to -f \ --from --verbatim --no-ticket \ --track-rename -m --message \ -F --file --template \ --encoding -P --patch -S \ --sign -C --check-only --direct' ;; @(mirror|mi)) options='-l --list -d --detach \ --relocate --recover --unlock \ --upgrade' ;; mkdir) options='-p --parent -m --message -F \ --file --template --encoding \ -P --patch -S --sign -C \ --check-only --direct' ;; @(move|mv|rename|ren)) options='-r --revision -p --parent -q \ --quiet -m --message -F --file \ --encoding --template -P \ --patch -S --sign -C \ --check-only --direct' ;; patch) options='--depot' ;; @(propdel|propset|pdel|pset|pd|ps)) options='-R --recursive -r --revision \ --revprop -m --message -F \ --file --template --encoding \ -P --patch -S --sign -C \ --check-only -q --quiet \ --direct' ;; @(propedit|pedit|pe)) options='-R --recursive -r --revision \ --revprop -m --message -F \ --file --template --encoding \ -P --patch -S --sign -C \ --check-only --direct' ;; @(propget|pget|pg)) options='-R --recursive -r --revision \ --revprop --strict' ;; @(proplist|plist|pl)) options='-R --recursive -v --verbose \ -r --revision --revprop' ;; pull) options='-a --all -l --lump' ;; push) options='-f --from -l --lump -C \ --check -P --patch -S --sign \ --verbatim' ;; resolved) options='-R --recursive' ;; revert) options='-R --recursive -q --quiet' ;; @(smerge|sm)) options='-I --incremental -l --log -B \ --baseless -b --base -s --sync \ -t --to -f --from --verbatim \ --no-ticket --track-rename \ --host --remoterev -m \ --message -F --file --template \ --encoding -P --patch -S \ --sign -C --check-only --direct' ;; @(status|stat|st)) options='-q --quiet --no-ignore -N \ --non-recursive -v --verbose' ;; @(switch|sw)) options='-r --revision -d --detach -q \ --quiet' ;; @(sync|sy)) options='-a --all -s --skipto -t \ --torev' ;; @(update|up)) options='-r --revision -N \ --non-recursive -C \ --check-only -s --sync -m \ --merge -q --quiet' ;; esac options="$options --help -h" COMPREPLY=( $( compgen -W "$options" -- $cur ) ) else case $command in @(help|h|\?)) COMPREPLY=( $( compgen -W "$commands \ environment commands intro" -- $cur ) ) ;; admin) COMPREPLY=( $( compgen -W 'help \ deltify dump hotcopy \ list-dblogs list-unused-dblogs \ load lstxns recover rmtxns \ setlog verify rmcache' \ -- $cur ) ) ;; patch) COMPREPLY=( $( compgen -W '--ls --list \ --cat --view --regen \ --regenerate --up --update \ --apply --rm --delete' \ -- $cur ) ) ;; sync) COMPREPLY=( $( compgen -W "$( svk \ mirror --list 2>/dev/null | \ awk '/^\//{print $1}' )" \ -- $cur ) ) ;; @(co|checkout|push|pull)) if [[ "$cur" == //*/* ]]; then path=${cur%/*}/ else path=// fi COMPREPLY=( $( compgen -W "$( svk \ list $path 2>/dev/null | sed -e 's|\(.*\)|'$path'\1|')" -- $cur ) ) ;; *) _filedir ;; esac fi fi return 0 } complete -F _svk -o default svk