# svk(1) completion have svk && _svk() { local cur prev commands options command COMPREPLY=() _get_comp_words_by_ref cur prev 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 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 svk # Local variables: # mode: shell-script # sh-basic-offset: 4 # sh-indent-comment: t # indent-tabs-mode: nil # End: # ex: ts=4 sw=4 et filetype=sh