Fix zsh compatibility issue in build/envsetup.sh

Arrays are zero indexed in bash and one indexed in zsh by default. This
leads to an off-by-one issue in the `godir` and `choosevariant` commands: when
prompted to chose an option, in order to pick option "n" you have to input
"n+1".

In those two specific instances, by using "substring expansion" instead of
array indexing, one can get consistent behaviour between bash and zsh
(equivalent to zero indexing).

Test: manual -
 # godir
 $ zsh
 $ source build/envsetup.sh
 $ godir SurfaceFlinger # There should be many options
 # Pick 1, check that you end up in the right location
 $ godir SurfaceFlinger.cpp # There should be only one possibility
 # make sure you end up in the right location
 # repeat with bash (to ensure compatibility is not broken)

 # choosevariant
 $ zsh
 $ source build/envsetup.h
 $ choosevariant # pick whatever variant you want
 $ printconfig # make sure the variant matches your choice
 # repeat with bash (to ensure compatibility is not broken)

Change-Id: I998d8fb48b708066b6db28a2129a2b09785fb0b1
This commit is contained in:
Guillaume Chelfi 2019-10-03 12:02:46 +02:00
parent 147f46ba72
commit ce000fdc4d
1 changed files with 3 additions and 3 deletions

View File

@ -524,7 +524,7 @@ function choosevariant()
export TARGET_BUILD_VARIANT=$default_value export TARGET_BUILD_VARIANT=$default_value
elif (echo -n $ANSWER | grep -q -e "^[0-9][0-9]*$") ; then elif (echo -n $ANSWER | grep -q -e "^[0-9][0-9]*$") ; then
if [ "$ANSWER" -le "${#VARIANT_CHOICES[@]}" ] ; then if [ "$ANSWER" -le "${#VARIANT_CHOICES[@]}" ] ; then
export TARGET_BUILD_VARIANT=${VARIANT_CHOICES[$(($ANSWER-1))]} export TARGET_BUILD_VARIANT=${VARIANT_CHOICES[@]:$(($ANSWER-1)):1}
fi fi
else else
if check_variant $ANSWER if check_variant $ANSWER
@ -1295,10 +1295,10 @@ function godir () {
echo "Invalid choice" echo "Invalid choice"
continue continue
fi fi
pathname=${lines[$(($choice-1))]} pathname=${lines[@]:$(($choice-1)):1}
done done
else else
pathname=${lines[0]} pathname=${lines[@]:0:1}
fi fi
\cd $T/$pathname \cd $T/$pathname
} }