Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
[PATCH 24/25] Consider `--tree` when searching installed rocks.
- X-seq: zsh-workers 42852
- From: doron.behar@xxxxxxxxx
- To: zsh-workers@xxxxxxx
- Subject: [PATCH 24/25] Consider `--tree` when searching installed rocks.
- Date: Sat, 26 May 2018 18:06:33 +0300
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=0CPEbc7yuOg/p2iGeTRG1PRgYnDMkpqHoaFtI06QJd0=; b=HBQeZQQvssr620LYCvLtwrXDn66gw+8gpSp03GoUeXLKalZ4tQ/BDdE/0iMFZ2VwpQ ghrtzVhNpletnCX+e1G5c1+X6SAoCgS0kX1c2N/oZSb2ns4dOWjDb7wOlLzuCpqdEJzJ DbINMmRVvc3FYdgW0lCv0FPnHSBRpV5DvnQPRuhGB68s2TM+uUUYNKCXusVz4CQ5OcpF Knxy62rCvGzemA9KM4+os0qVdB5nRzNALJFB8N8kmacgeXVdsrOpuXdnBvq9lAxRDg1b 89d5Vuy3ztSBWO+VsjUWuGPGbvpDs0RjH1Sxfno4oyld6+fEcP54O1MuVqcUSplTzbZV NIJg==
- In-reply-to: <20180526150634.15683-1-doron.behar@gmail.com>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- List-unsubscribe: <mailto:zsh-workers-unsubscribe@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- References: <20180526150634.15683-1-doron.behar@gmail.com>
From: Doron Behar <doron.behar@xxxxxxxxx>
---
Completion/Unix/Command/_luarocks | 126 +++++++++++++++++++++---------
1 file changed, 91 insertions(+), 35 deletions(-)
diff --git a/Completion/Unix/Command/_luarocks b/Completion/Unix/Command/_luarocks
index 8de95c188..17fa8248e 100644
--- a/Completion/Unix/Command/_luarocks
+++ b/Completion/Unix/Command/_luarocks
@@ -59,6 +59,7 @@ __luarocks_rock_version(){
# TODO: actually complete versions of installed rocks using the cache
# How does luarocks handles multiple versions of the same package?
# If anybody knows, please write something beautiful here
+ # TODO: get somehow from $@ the option given (if used) to --tree
_message -e "version for installed rock ${words[$i]}"
return
;;
@@ -107,56 +108,95 @@ ___luarocks_installed_rocks_cache_policy(){
# {{{ helper: installed rocks
(( $+functions[__luarocks_installed_rocks] )) ||
__luarocks_installed_rocks(){
- local update_policy
- zstyle -s ":completion:${curcontext}:" cache-policy update_policy
- if [[ -z "$update_policy" ]]; then
- zstyle ":completion:${curcontext}:" cache-policy ___luarocks_installed_rocks_cache_policy
- fi
- if _cache_invalid luarocks_installed_list; then
- rocks_list=($(luarocks list --porcelain))
- _store_cache luarocks_installed_list rocks_list
+ # This function optionally recieves one argument of the tree in which
+ # installed rocks are searched for. If this argument is used, the installed
+ # rocks which will be completed by this function will not use the cache which
+ # is valid only for installed rocks on default trees like /usr/lib/luarocks
+ # and ~/.luarocks
+ local tree="$1"
+ if [[ -z ${tree} ]]; then
+ local update_policy
+ zstyle -s ":completion:${curcontext}:" cache-policy update_policy
+ if [[ -z "$update_policy" ]]; then
+ zstyle ":completion:${curcontext}:" cache-policy ___luarocks_installed_rocks_cache_policy
+ fi
+ if _cache_invalid luarocks_installed_list; then
+ rocks_list=($(luarocks list --porcelain))
+ _store_cache luarocks_installed_list rocks_list
+ else
+ _retrieve_cache luarocks_installed_list
+ fi
+ if [[ -z ${rocks_list} ]]; then
+ _message -r "no installed rocks"
+ return
+ fi
+ if _cache_invalid luarocks_installed_names; then
+ rocks_names=()
+ for i in {1.."${#rocks_list[@]}"..4}; do
+ rocks_names+=("${rocks_list[$i]}")
+ done
+ _store_cache luarocks_installed_names rocks_names
+ else
+ _retrieve_cache luarocks_installed_names
+ fi
+ if _cache_invalid luarocks_installed_versions; then
+ rocks_versions=()
+ for i in {2.."${#rocks_list[@]}"..4}; do
+ rocks_versions+=("${rocks_list[$i]}")
+ done
+ _store_cache luarocks_installed_versions rocks_versions
+ else
+ _retrieve_cache luarocks_installed_versions
+ fi
+ if _cache_invalid luarocks_installed_descriptions; then
+ rocks_descriptions=()
+ for i in {1.."${#rocks_names[@]}"}; do
+ name_version_description="$(luarocks show ${rocks_names[$i]} 2>/dev/null | head -2 | tail -1)"
+ total_length=${#name_version_description}
+ garbage_length="$((${#rocks_names[$i]} + ${#rocks_versions[$i]} + 5))"
+ description="${name_version_description[${garbage_length},${total_length}]}"
+ rocks_descriptions+=("${description}")
+ done
+ _store_cache luarocks_installed_descriptions rocks_descriptions
+ else
+ _retrieve_cache luarocks_installed_descriptions
+ fi
+ if _cache_invalid luarocks_installed_names_and_descriptions; then
+ rocks_names_and_descriptions=()
+ for i in {1.."${#rocks_names[@]}"}; do
+ name_and_description=${rocks_names[$i]}:${rocks_descriptions[$i]}
+ rocks_names_and_descriptions+=(${name_and_description})
+ done
+ else
+ _store_cache luarocks_installed_names_and_descriptions rocks_names_and_descriptions
+ fi
else
- _retrieve_cache luarocks_installed_list
- fi
- if _cache_invalid luarocks_installed_names; then
+ rocks_list=($(luarocks --tree="${tree}" list --porcelain 2> /dev/null))
+ if [[ -z ${rocks_list} ]]; then
+ _message "no installed rocks in the specified tree"
+ return
+ fi
rocks_names=()
for i in {1.."${#rocks_list[@]}"..4}; do
rocks_names+=("${rocks_list[$i]}")
done
- _store_cache luarocks_installed_names rocks_names
- else
- _retrieve_cache luarocks_installed_names
- fi
- if _cache_invalid luarocks_installed_versions; then
rocks_versions=()
for i in {2.."${#rocks_list[@]}"..4}; do
rocks_versions+=("${rocks_list[$i]}")
done
- _store_cache luarocks_installed_versions rocks_versions
- else
- _retrieve_cache luarocks_installed_versions
- fi
- if _cache_invalid luarocks_installed_descriptions; then
rocks_descriptions=()
for i in {1.."${#rocks_names[@]}"}; do
- name_version_description="$(luarocks show ${rocks_names[$i]} | head -2 | tail -1)"
+ name_version_description="$(luarocks show ${rocks_names[$i]} 2> /dev/null | head -2 | tail -1)"
total_length=${#name_version_description}
garbage_length="$((${#rocks_names[$i]} + ${#rocks_versions[$i]} + 5))"
description="${name_version_description[${garbage_length},${total_length}]}"
rocks_descriptions+=("${description}")
done
- _store_cache luarocks_installed_descriptions rocks_descriptions
- else
- _retrieve_cache luarocks_installed_descriptions
- fi
- if _cache_invalid luarocks_installed_names_and_descriptions; then
rocks_names_and_descriptions=()
for i in {1.."${#rocks_names[@]}"}; do
name_and_description=${rocks_names[$i]}:${rocks_descriptions[$i]}
rocks_names_and_descriptions+=(${name_and_description})
done
- else
- _store_cache luarocks_installed_names_and_descriptions rocks_names_and_descriptions
fi
_describe 'installed rocks' rocks_names_and_descriptions
}
@@ -169,21 +209,37 @@ __luarocks_installed_rocks(){
(( $+functions[__luarocks_rock] )) ||
__luarocks_rock(){
local -a alts=()
- for arg in "$@"; do
- case $arg in
+ while [[ $# -gt 0 ]]; do
+ arg="$1"
+ case "$arg" in
(rockspec)
alts+=(':rock file:{_files -g "*.rockspec"}')
+ shift 1
+ continue
;;
(rockpack)
alts+=(':rock file:{_files -g "*.src.rock"}')
+ shift 1
+ continue
;;
(external)
alts+=(':external rock:')
+ shift 1
+ continue
;;
(installed)
- alts+=(':local rock:__luarocks_installed_rocks')
+ tree="$2"
+ alts+=(":local rock:{__luarocks_installed_rocks ${tree}}")
+ if [[ -z "${tree}" ]]; then
+ shift
+ else
+ shift 2
+ fi
+ continue
;;
esac
+ shift
+ continue
done
_alternative ${alts[@]}
}
@@ -250,7 +306,7 @@ local doc_command_options=(
_luarocks_doc(){
_arguments \
"${doc_command_options[@]}" \
- '1: :{__luarocks_rock "installed"}'
+ '1: :{__luarocks_rock "installed" '"${opt_args[--tree]}"'}'
}
# }}}
# {{{ `download` command
@@ -383,7 +439,7 @@ local remove_command_options=(
_luarocks_remove(){
_arguments -A "-*" \
"${remove_command_options[@]}" \
- '1: :{__luarocks_rock "installed"}' \
+ '1: :{__luarocks_rock "installed" '"${opt_args[--tree]}"'}' \
'2:: :{__luarocks_rock_version "installed"}'
}
# }}}
@@ -418,7 +474,7 @@ local show_command_options=(
_luarocks_show(){
_arguments \
"${show_command_options[@]}" \
- '1: :{__luarocks_rock "installed"}'
+ "1: :{__luarocks_rock 'installed' "${opt_args[--tree]}"}"
}
# }}}
# {{{ `unpack` command
--
2.17.0
Messages sorted by:
Reverse Date,
Date,
Thread,
Author