about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Completion/Unix/Command/_subversion18
2 files changed, 23 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 7f4675d11..05b478624 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2015-08-28  Daniel Shahaf  <d.s@daniel.shahaf.name>
+
+	* 36306: Completion/Unix/Command/_subversion: _subversion:
+	Complete --show-item values
+
 2015-08-28  Peter Stephenson  <p.stephenson@samsung.com>
 
 	* users/20475: Doc/Zsh/contrib.yo: mention that cdr mechanism
diff --git a/Completion/Unix/Command/_subversion b/Completion/Unix/Command/_subversion
index bbcaf3ac9..3cc9e8a0b 100644
--- a/Completion/Unix/Command/_subversion
+++ b/Completion/Unix/Command/_subversion
@@ -4,6 +4,20 @@ _svn () {
   local curcontext="$curcontext" state line expl ret=1
   typeset -A opt_args
 
+  # Colons in values must be escaped.
+  local -A show_item_keys=(
+     kind                  "the kind of TARGET (file or dir)"
+     url                   "the URL of TARGET in the repository"
+     relative-url          "the repository-relative URL"
+     repos-root-url        "the repository root URL"
+     repos-uuid            "the repository UUID"
+     revision              "the revision of TARGET"
+     last-changed-revision "the most recent revision in which TARGET was changed"
+     last-changed-date     "the date of the last-changed revision"
+     last-changed-author   "the author of the last-changed revision"
+     wc-root               "the working copy root path"
+  )
+
   local update_policy
   zstyle -s ":completion:*:*:$service:*" cache-policy update_policy
   if [[ -z "$update_policy" ]]; then
@@ -71,6 +85,10 @@ _svn () {
           while (( idx=$args[(I)*--trust-server-cert-failures:arg:] )); do
             args[(I)*--trust-server-cert-failures:arg:]=( --trust-server-cert-failures':failures:_values -s , "certificate failures to ignore" "unknown-ca[unknown authority]" "cn-mismatch[hostname mismatch]" "expired[certificate expired]" "not-yet-valid[certificate not yet valid]" "other[all other failures]"' )
           done
+          while (( idx=$args[(I)*--show-item:arg:] )); do
+            # (q) to quote the parentheses in the value
+            args[(I)*--show-item:arg:]=( --show-item':item key:(('"`for i j in ${(kv)show_item_keys}; do print -rn - $i\\\\:"${(q)j}" ""; done`"'))' )
+          done
 	  _store_cache svn-${cmd}-args args
 	fi