about summary refs log tree commit diff
diff options
context:
space:
mode:
authorClint Adams <clint@users.sourceforge.net>2008-01-22 01:18:47 +0000
committerClint Adams <clint@users.sourceforge.net>2008-01-22 01:18:47 +0000
commit898111026d1c75bd515a6ed1ef171d56c4d8bf0b (patch)
tree4d8cb1eff82f739cd5290cc86d5affcc595699dc
parent172a81db90b9b5a499fb10f1b6334dee32b24d88 (diff)
downloadzsh-898111026d1c75bd515a6ed1ef171d56c4d8bf0b.tar.gz
zsh-898111026d1c75bd515a6ed1ef171d56c4d8bf0b.tar.xz
zsh-898111026d1c75bd515a6ed1ef171d56c4d8bf0b.zip
Mikael Magnusson: 24396: don't pass -r to git ls-files for performance reasons, compensate for lack of recursion.
-rw-r--r--ChangeLog6
-rw-r--r--Completion/Unix/Command/_git27
2 files changed, 21 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 838b2e505..dfa5cb473 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-01-22  Clint Adams  <clint@zsh.org>
+
+	* Mikael Magnusson: 24396: Completion/Unix/Command/_git:
+	don't pass -r to git ls-files for performance reasons,
+	compensate for lack of recursion.
+
 2008-01-21  Wayne Davison  <wayned@users.sourceforge.net>
 
 	* unposted: Src/builtin.c: got rid of compiler warning about
diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git
index c5c3241c0..763257679 100644
--- a/Completion/Unix/Command/_git
+++ b/Completion/Unix/Command/_git
@@ -825,12 +825,12 @@ _git-diff-tree () {
         # new tree:
         #   ...
         _alternative \
-          "original tree:original tree:__git_tree_files $line[1]" \
-          "new tree:new tree:__git_tree_files $line[2]" && ret=0
+          "original tree:original tree:__git_tree_files . $line[1]" \
+          "new tree:new tree:__git_tree_files . $line[2]" && ret=0
       else
         _alternative \
           ': :__git_tree_ishs' \
-          ": :__git_tree_files $line[1]" && ret=0
+          ": :__git_tree_files . $line[1]" && ret=0
       fi
       ;;
   esac
@@ -923,7 +923,7 @@ _git-ls-tree () {
 
   case $state in
     files)
-      __git_tree_files $line[1] && ret=0
+      __git_tree_files . $line[1] && ret=0
       ;;
   esac
 }
@@ -1365,7 +1365,7 @@ _git-archive () {
 
   case $state in
     (files)
-      __git_tree_files $line[1] && ret=0
+      __git_tree_files . $line[1] && ret=0
       ;;
   esac
 }
@@ -1503,7 +1503,7 @@ _git-checkout () {
   case $state in
     (files)
       if [[ -n $line[1] ]]; then
-        __git_tree_files $line[1] && ret=0
+        __git_tree_files . $line[1] && ret=0
       else
         __git_cached_files && ret=0
       fi
@@ -1689,13 +1689,13 @@ _git-grep () {
         else
           _alternative \
             'tree:tree:__git_trees' \
-            "tree file:tree-files:__git_tree_files $line[first_tree,last_tree]" && ret=0
+            "tree file:tree-files:__git_tree_files .  $line[first_tree,last_tree]" && ret=0
         fi
       else
         if (( first_tree == 0 )); then
           __git_cached_files
         else
-          __git_tree_files $line[first_tree,last_tree]
+          __git_tree_files . $line[first_tree,last_tree]
         fi
       fi
       ;;
@@ -1835,7 +1835,7 @@ _git-reset () {
 
   if [[ $words[2] == --mixed ]]; then
     commit_arg=':commit:__git_revisions'
-    path_arg="*:file:__git_tree_files $words[3]"
+    path_arg="*:file:__git_tree_files . $words[3]"
   else
     commit_arg='::commit:__git_revisions'
   fi
@@ -2558,7 +2558,7 @@ __git_command_successful () {
 __git_objects () {
   compset -P '*:'
   if [[ -n $IPREFIX ]]; then
-    __git_tree_files ${IPREFIX%:}
+    __git_tree_files "$PREFIX" "${IPREFIX%:}"
   else
     _alternative \
       'revisions:revision:__git_revisions' \
@@ -2651,13 +2651,16 @@ __git_tree_files () {
 
   zparseopts -D -E -a multi_parts_opts M: J: V: 1 2 n F: X:
 
-  local tree
+  local tree Path
   integer at_least_one_tree_added
   local -a tree_files
 
+  Path=${1%/*}/
+  [[ $Path = / ]] && Path=.
+  shift
   (( at_least_one_tree_added = 0 ))
   for tree in $*; do
-    tree_files+=(${(ps:\0:)"$(_call_program tree-files git ls-tree --name-only -z -r $tree 2>/dev/null)"})
+    tree_files+=(${(ps:\0:)"$(_call_program tree-files git ls-tree --name-only -z $tree $Path 2>/dev/null)"})
     __git_command_successful && (( at_least_one_tree_added = 1 ))
   done