Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm
Precedence: bulk
X-No-Archive: yes
List-Id: Zsh Workers List <zsh-workers.zsh.org>
List-Post: <mailto:zsh-workers@zsh.org>
List-Help: <mailto:zsh-workers-help@zsh.org>
X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au
X-Spam-Level: 
X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM,
	T_DKIM_INVALID autolearn=ham autolearn_force=no version=3.4.1
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20120113;
        h=from:to:subject:date:message-id;
        bh=BjgOQPGNIY58KSTJZOqPnJXMlT65dXgvmzPLMbcA7nM=;
        b=WFXqad6xaU22JWLKJ49wkTGloia9+eHwZYKM20o9zFZXTxR2LiaTqc6A8MOeyf+AeW
         6xHcpjB/Lp4YGbETrN6W5FlODXA77dEJbukjIkpInYgtFCer+zrGpxLnWbsPuafAAQV2
         1IWWO8x+ItjnUMVe3hq6Oq9yCdXNlR90vpiUVVFr5vs3kub+mu7qQvBKRNcWoMZGkS6j
         FgjeRAHLH/N3CnvDqwZkmWIxl6zVhhFF/3gW96CYHeIz0Azx5bNEoGd+gaMaAzmXcvhq
         rOgQO3W2lcL46AMzRjonSJSJte49rVY3x2rgv1XlE9Jj6tMqdMZD+IlW56qw7N5Hu6zP
         wcqA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20130820;
        h=x-gm-message-state:from:to:subject:date:message-id;
        bh=BjgOQPGNIY58KSTJZOqPnJXMlT65dXgvmzPLMbcA7nM=;
        b=PqcgfupiFbWykMJ45QOF45aizXWSPVjO7TBB2vKhZGKBlzQaNzZ5Znp2hFUWotlW8V
         /U15HGduoWNWTtSsf38d1ejLim9noM7VhbEbcyrdaRQnIdJDoyw14yudZPYtzeh/UYqF
         Q5TyQ4KSwBHymep3GAIZ0Ln39udiLPSrJ7e0dMUNTbe/ZhkMHsCmrNYBWMFcFH/IojRO
         edNZ569SqbKym7+Kk3Y06co02wdyUm0O6Sz86hD0te66oT+k6Y9u8weMeEvVbsC7atRa
         F5UmrGupMffIWB19Xke8b+7InyYtXPgA6Ia8Y3E6zLytVqnv9jFO7o6qP0lXtGVTR09+
         Tq2w==
X-Gm-Message-State: AD7BkJKmpvnmc+kocSbpl2epUhw8I2wKmh5jPAn+ox0SIo7TpDtgumXfQPFLCNL/cUaRvg==
X-Received: by 10.28.46.5 with SMTP id u5mr5355450wmu.75.1458410469427;
        Sat, 19 Mar 2016 11:01:09 -0700 (PDT)
From: Mikael Magnusson <mikachu@gmail.com>
To: zsh-workers@zsh.org
Subject: PATCH: _adb: Just check current dir instead of recursively
Date: Sat, 19 Mar 2016 19:01:04 +0100
Message-Id: <1458410464-25754-1-git-send-email-mikachu@gmail.com>
X-Mailer: git-send-email 2.6.1
X-Seq: zsh-workers 38187

So while the previous patch was an improvement in theory, in practice it
seems most android installs don't in fact have 'find'. Or 'printf'. So
this reimplements the remote completion to not do a recursive cached
listing, and just list the current directory instead.

---
 Completion/Unix/Command/_adb | 38 ++++++++++++--------------------------
 1 file changed, 12 insertions(+), 26 deletions(-)

diff --git a/Completion/Unix/Command/_adb b/Completion/Unix/Command/_adb
index c0a2bb2..377d1da 100644
--- a/Completion/Unix/Command/_adb
+++ b/Completion/Unix/Command/_adb
@@ -470,40 +470,26 @@ _adb_device_available() {
   return 1
 }
 
-(( $+functions[_adb_full_folder_scan] )) ||
-_adb_full_folder_scan() {
-  filesystem_content=( ${${(f)"$(adb ${=ADB_DEVICE_SPECIFICATION} shell 'cd /;for i in *
-      do
-        case $i in
-          proc|sys|acct)
-            ;;
-          *)
-            find $i 2> /dev/null
-            ;;
-        esac
-      done' )"}%$'\r'} )
-}
-
 (( $+functions[_adb_remote_folder] )) ||
 _adb_remote_folder () {
-  local expl
-  zstyle -s ":completion:${curcontext}:" cache-policy update_policy
-  if [[ -z "$update_policy" ]]; then
-    zstyle ":completion:${curcontext}:" cache-policy _adb_cache_policy_daily
-  fi
-  local cacheid=folder_cache_${$(adb ${=ADB_DEVICE_SPECIFICATION} get-serialno)}
-  typeset -a filesystem_content
-  if _cache_invalid "$cacheid" || ! _retrieve_cache "$cacheid"
-  then
-    _adb_full_folder_scan
-    _store_cache "$cacheid" filesystem_content
+  typeset -a files dirs
+  local pref=${PREFIX}
+  if [[ $pref != */* ]]; then
+    pref=
+  elif [[ $pref != */ ]]; then
+    pref=${pref%/*}/
   fi
+  # yes, this ls is sickening to look at, but android doesn't have printf or find
+  files=(${${(f)"$(adb ${=ADB_DEVICE_SPECIFICATION} shell 'ls -d 2> /dev/null '$pref'*/ '$pref'*')"}%$'\r'})
+  dirs=(${${(M)files:#*/}%/})
+  files=(${${files:|dirs}:#*\*(/|)})
   _adb_device_available && \
-    _wanted adb_remote_folder expl 'file/folder on device' _multi_parts $@ -i / filesystem_content
+    _wanted adb_remote_folder expl 'file/folder on device' _multi_parts $@ / files
 }
 
 (( $+functions[_adb_installed_packages] )) ||
 _adb_installed_packages() {
+  local update_policy
   zstyle -s ":completion:${curcontext}:" cache-policy update_policy
   if [[ -z "$update_policy" ]]; then
     zstyle ":completion:${curcontext}:" cache-policy _adb_cache_policy_single_command
-- 
2.6.1

