summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--Completion/Unix/Command/_subversion15
2 files changed, 18 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 1b93f3d94..3022b6a19 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-11-19 Peter Stephenson <pws@csr.com>
+
+ * Greg: 27416: Completion/Unix/Command/_subversion: repository
+ path enhancement.
+
2009-11-17 Peter Stephenson <pws@csr.com>
* unposted: Completion/Unix/Command/_perforce: improve
@@ -12354,5 +12359,5 @@
*****************************************************
* This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.4815 $
+* $Revision: 1.4816 $
*****************************************************
diff --git a/Completion/Unix/Command/_subversion b/Completion/Unix/Command/_subversion
index 9d6babed5..2dbcb6d65 100644
--- a/Completion/Unix/Command/_subversion
+++ b/Completion/Unix/Command/_subversion
@@ -2,6 +2,7 @@
_svn () {
local curcontext="$curcontext" state line expl ret=1
+ typeset -A opt_args
_arguments -C \
'(-)--help[print help information]' \
@@ -207,12 +208,20 @@ _svn_status() {
(( $+functions[_svn_remote_paths] )) ||
_svn_remote_paths() {
- local expl remfiles remdispf remdispd suf ret=1
+ local expl remfiles remdispf remdispd suf ret=1 pfx='\^/' sub='^/'
+
+ # prefix must match a valid repository path format, either standard style
+ # schema://host/path/.. or ^/path/.. specifying a path relative to the
+ # root of the working directory repository. In the second form, allow the
+ # leading '^' be escaped in case the user has the extendedglob option set.
+ [[ -prefix *://*/ ]] ||
+ [[ -f .svn/entries && ( -prefix '^/' || -prefix '\^/' ) ]] ||
+ return 1
- [[ -prefix *://*/ ]] || return 1
+ # return if remote access is not permitted
zstyle -T ":completion:${curcontext}:" remote-access || return 1
- remfiles=( ${(f)"$(svn list $IPREFIX${PREFIX%%[^./][^/]#} 2>/dev/null)"} )
+ remfiles=( ${(f)"$(svn list $IPREFIX${${PREFIX%%[^/]#}/#$pfx/$sub} 2>/dev/null)"} )
(( $? == 0 )) || return 1
# you might consider trying to return early if $#remfiles is zero,