forked from openkylin/platform_build
Add Atest tab completion script.
Now Atest can autocomplete module names, dir and filenames with tab completion, and zsh users can benefit from it. Bug: 110629292 Test: In both bash and zsh environments: source build/envsetup.sh && lunch aosp_arm-eng atest <tab><tab> # has candidates adb <tab><tab> # has candidates ENVSETUP_NO_COMPLETION=atest:adb . build/envsetup.sh && lunch aosp_arm-eng atest <tab><tab> # no candidates adb <tab><tab> # no candidates Change-Id: Ib1c9e02feeb8aaf75c0b97821ae26e13ba8df350
This commit is contained in:
parent
226dd71836
commit
a881a257ca
64
envsetup.sh
64
envsetup.sh
|
@ -48,12 +48,12 @@ function build_build_var_cache()
|
||||||
{
|
{
|
||||||
local T=$(gettop)
|
local T=$(gettop)
|
||||||
# Grep out the variable names from the script.
|
# Grep out the variable names from the script.
|
||||||
cached_vars=`cat $T/build/envsetup.sh | tr '()' ' ' | awk '{for(i=1;i<=NF;i++) if($i~/get_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '`
|
cached_vars=(`cat $T/build/envsetup.sh | tr '()' ' ' | awk '{for(i=1;i<=NF;i++) if($i~/get_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '`)
|
||||||
cached_abs_vars=`cat $T/build/envsetup.sh | tr '()' ' ' | awk '{for(i=1;i<=NF;i++) if($i~/get_abs_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '`
|
cached_abs_vars=(`cat $T/build/envsetup.sh | tr '()' ' ' | awk '{for(i=1;i<=NF;i++) if($i~/get_abs_build_var/) print $(i+1)}' | sort -u | tr '\n' ' '`)
|
||||||
# Call the build system to dump the "<val>=<value>" pairs as a shell script.
|
# Call the build system to dump the "<val>=<value>" pairs as a shell script.
|
||||||
build_dicts_script=`\builtin cd $T; build/soong/soong_ui.bash --dumpvars-mode \
|
build_dicts_script=`\builtin cd $T; build/soong/soong_ui.bash --dumpvars-mode \
|
||||||
--vars="$cached_vars" \
|
--vars="${cached_vars[*]}" \
|
||||||
--abs-vars="$cached_abs_vars" \
|
--abs-vars="${cached_abs_vars[*]}" \
|
||||||
--var-prefix=var_cache_ \
|
--var-prefix=var_cache_ \
|
||||||
--abs-var-prefix=abs_var_cache_`
|
--abs-var-prefix=abs_var_cache_`
|
||||||
local ret=$?
|
local ret=$?
|
||||||
|
@ -317,7 +317,7 @@ function set_sequence_number()
|
||||||
|
|
||||||
# Takes a command name, and check if it's in ENVSETUP_NO_COMPLETION or not.
|
# Takes a command name, and check if it's in ENVSETUP_NO_COMPLETION or not.
|
||||||
function should_add_completion() {
|
function should_add_completion() {
|
||||||
local cmd="$1"
|
local cmd="$(basename $1| sed 's/_completion//' |sed 's/\.\(.*\)*sh$//')"
|
||||||
case :"$ENVSETUP_NO_COMPLETION": in
|
case :"$ENVSETUP_NO_COMPLETION": in
|
||||||
*:"$cmd":*)
|
*:"$cmd":*)
|
||||||
return 1
|
return 1
|
||||||
|
@ -330,22 +330,27 @@ function addcompletions()
|
||||||
{
|
{
|
||||||
local T dir f
|
local T dir f
|
||||||
|
|
||||||
# Keep us from trying to run in something that isn't bash.
|
# Keep us from trying to run in something that's neither bash nor zsh.
|
||||||
if [ -z "${BASH_VERSION}" ]; then
|
if [ -z "$BASH_VERSION" -a -z "$ZSH_VERSION" ]; then
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Keep us from trying to run in bash that's too old.
|
# Keep us from trying to run in bash that's too old.
|
||||||
if [ ${BASH_VERSINFO[0]} -lt 3 ]; then
|
if [ -n "$BASH_VERSION" -a ${BASH_VERSINFO[0]} -lt 3 ]; then
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
local completion_files=(
|
||||||
|
system/core/adb/adb.bash
|
||||||
|
system/core/fastboot/fastboot.bash
|
||||||
|
tools/tradefederation/core/atest/atest_completion.sh
|
||||||
|
)
|
||||||
# Completion can be disabled selectively to allow users to use non-standard completion.
|
# Completion can be disabled selectively to allow users to use non-standard completion.
|
||||||
# e.g.
|
# e.g.
|
||||||
# ENVSETUP_NO_COMPLETION=adb # -> disable adb completion
|
# ENVSETUP_NO_COMPLETION=adb # -> disable adb completion
|
||||||
# ENVSETUP_NO_COMPLETION=adb:bit # -> disable adb and bit completion
|
# ENVSETUP_NO_COMPLETION=adb:bit # -> disable adb and bit completion
|
||||||
for f in system/core/adb/adb.bash system/core/fastboot/fastboot.bash; do
|
for f in ${completion_files[*]}; do
|
||||||
if [ -f "$f" ] && should_add_completion $(basename "$f" .bash) ; then
|
if [ -f "$f" ] && should_add_completion "$f"; then
|
||||||
. $f
|
. $f
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@ -353,6 +358,7 @@ function addcompletions()
|
||||||
if should_add_completion bit ; then
|
if should_add_completion bit ; then
|
||||||
complete -C "bit --tab" bit
|
complete -C "bit --tab" bit
|
||||||
fi
|
fi
|
||||||
|
complete -F _lunch lunch
|
||||||
}
|
}
|
||||||
|
|
||||||
function choosetype()
|
function choosetype()
|
||||||
|
@ -646,7 +652,6 @@ function _lunch()
|
||||||
COMPREPLY=( $(compgen -W "${COMMON_LUNCH_CHOICES_CACHE}" -- ${cur}) )
|
COMPREPLY=( $(compgen -W "${COMMON_LUNCH_CHOICES_CACHE}" -- ${cur}) )
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
complete -F _lunch lunch
|
|
||||||
|
|
||||||
# Configures the build to build unbundled apps.
|
# Configures the build to build unbundled apps.
|
||||||
# Run tapas with one or more app names (from LOCAL_PACKAGE_NAME)
|
# Run tapas with one or more app names (from LOCAL_PACKAGE_NAME)
|
||||||
|
@ -1562,24 +1567,37 @@ function atest()
|
||||||
"$(gettop)"/tools/tradefederation/core/atest/atest.py "$@"
|
"$(gettop)"/tools/tradefederation/core/atest/atest.py "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ "x$SHELL" != "x/bin/bash" ]; then
|
# Zsh needs bashcompinit called to support bash-style completion.
|
||||||
case `ps -o command -p $$` in
|
function add_zsh_completion() {
|
||||||
|
autoload -U compinit && compinit
|
||||||
|
autoload -U bashcompinit && bashcompinit
|
||||||
|
}
|
||||||
|
|
||||||
|
function validate_current_shell() {
|
||||||
|
local current_sh="$(ps -o command -p $$)"
|
||||||
|
case "$current_sh" in
|
||||||
*bash*)
|
*bash*)
|
||||||
|
function check_type() { type -t "$1"; }
|
||||||
;;
|
;;
|
||||||
|
*zsh*)
|
||||||
|
function check_type() { type "$1"; }
|
||||||
|
add_zsh_completion ;;
|
||||||
*)
|
*)
|
||||||
echo "WARNING: Only bash is supported, use of other shell would lead to erroneous results"
|
echo -e "WARNING: Only bash and zsh are supported.\nUse of other shell would lead to erroneous results."
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
}
|
||||||
|
|
||||||
# Execute the contents of any vendorsetup.sh files we can find.
|
# Execute the contents of any vendorsetup.sh files we can find.
|
||||||
for f in `test -d device && find -L device -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort` \
|
function source_vendorsetup() {
|
||||||
`test -d vendor && find -L vendor -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort` \
|
for dir in device vendor product; do
|
||||||
`test -d product && find -L product -maxdepth 4 -name 'vendorsetup.sh' 2> /dev/null | sort`
|
for f in $(test -d $dir && \
|
||||||
do
|
find -L $dir -maxdepth 4 -name 'vendorsetup.sh' 2>/dev/null | sort); do
|
||||||
echo "including $f"
|
echo "including $f"; . $f
|
||||||
. $f
|
done
|
||||||
done
|
done
|
||||||
unset f
|
}
|
||||||
|
|
||||||
|
validate_current_shell
|
||||||
|
source_vendorsetup
|
||||||
addcompletions
|
addcompletions
|
||||||
|
|
Loading…
Reference in New Issue