From eaaac9c89f2d71626e6be1a29a3e01b1c42aa5cb Mon Sep 17 00:00:00 2001 From: Daniel Shahaf Date: Fri, 29 Jul 2016 17:03:03 +0000 Subject: 38965: _svnadmin: Complete 'freeze' as a precommand. --- Completion/Unix/Command/_subversion | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'Completion/Unix/Command/_subversion') diff --git a/Completion/Unix/Command/_subversion b/Completion/Unix/Command/_subversion index 08ba0e846..2c21aa740 100644 --- a/Completion/Unix/Command/_subversion +++ b/Completion/Unix/Command/_subversion @@ -183,6 +183,9 @@ _svn () { _svnadmin () { local curcontext="$curcontext" state line ret=1 + integer NORMARG + local context state_descr + typeset -A opt_args _arguments -C \ '(-)--help[print help information]' \ @@ -214,11 +217,36 @@ _svnadmin () { ) if [[ $usage == *REPOS_PATH* ]]; then args+=( ":repository path:_files -/" ) + case $cmd in + (freeze) + args+=( "*:arguments:->normal" ) + ;; + esac elif [[ $cmd = help ]]; then args+=( "*:subcommand:_svnadmin_commands" ) fi - _arguments "$args[@]" && ret=0 + _arguments -n -s -S : "$args[@]" && ret=0 + + case $state in + # Test cases: + # svnadmin freeze . rsync -- offers --file + # svnadmin freeze -- . rsync - offers rsync's options + # + # Note: the NORMARG calculations here include one positional argument + # (the '.') before the command. + (normal) + if (( ${words[(i)--]} < CURRENT )); then + words[1,NORMARG]=() + (( CURRENT -= NORMARG )) + _normal && ret=0 + elif (( NORMARG+1 == CURRENT )); then + # ### don't allow --options in this case + # TODO: this should just use '_normal -F "(-*)"', but _normal ignores its arguments. + _command_names -e && ret=0 + fi + ;; + esac else _message "unknown svnadmin command: $words[1]" fi -- cgit 1.4.1