zsh-workers
 help / color / mirror / code / Atom feed
* PATCH: _adb: Just check current dir instead of recursively
@ 2016-03-19 18:01 Mikael Magnusson
  0 siblings, 0 replies; only message in thread
From: Mikael Magnusson @ 2016-03-19 18:01 UTC (permalink / raw)
  To: zsh-workers

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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2016-03-19 18:27 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-03-19 18:01 PATCH: _adb: Just check current dir instead of recursively Mikael Magnusson

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).