From abb68241a313c0630930528badfc3c5a5109fee1 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Sun, 19 Jun 2016 20:46:45 -0400 Subject: [PATCH] Use ${!array[@]} syntax to iterate over arrays. Bash 3 accepts ${array[@]:0} but this is invalid in bash 4 for empty arrays. Instead, use ${!array[@]} to get indexes into the array and look up entries using them. --- chocpkg/chocpkg | 31 ++++++++++++++++++++----------- chocpkg/modules/package_group.sh | 19 ++++++++++++------- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/chocpkg/chocpkg b/chocpkg/chocpkg index a3da4a5..8c559e4 100755 --- a/chocpkg/chocpkg +++ b/chocpkg/chocpkg @@ -62,9 +62,9 @@ dependencies() { } set_dependencies_native() { - local i=0 - while [ $i -lt ${#DEPENDENCIES[@]} ]; do - dep="${DEPENDENCIES[$i]}" + local i + for i in ${!DEPENDENCIES[@]}; do + local dep="${DEPENDENCIES[$i]}" if [[ "$PACKAGE_TYPE" = native ]] && ! [[ "$dep" =~ native: ]]; then DEPENDENCIES[$i]="native:$dep" fi @@ -82,8 +82,9 @@ variant() { # Check if the given variant was declared in the package file. valid_variant() { - local for_variant=$1 - for v in "${ALL_VARIANTS[@]}"; do + local i for_variant=$1 + for i in "${!ALL_VARIANTS[@]}"; do + local v="${ALL_VARIANTS[$i]}" if [ "$v" = "$for_variant" ]; then return 0 fi @@ -94,8 +95,9 @@ valid_variant() { # Get the default variant for the specified package. Usually this is the # stable variant but it can be overridden. package_default_variant() { - local for_package=$1 - for v in "${LATEST_PACKAGES[@]}"; do + local i for_package=$1 + for i in "${!LATEST_PACKAGES[@]}"; do + local v="${LATEST_PACKAGES[$i]}" if [ "$v" = "$for_package" ]; then echo "latest" return @@ -142,6 +144,7 @@ configure_for_package() { if [ "${#ALL_VARIANTS[@]}" -eq 0 ]; then ALL_VARIANTS=(stable) fi + if ! valid_variant "$PACKAGE_VARIANT"; then error_exit "Unknown variant $PACKAGE_VARIANT for package $package." fi @@ -205,7 +208,9 @@ setup_build_environment() { } install_dependencies() { - for dep in "${DEPENDENCIES[@]:0}"; do + local i + for i in "${!DEPENDENCIES[@]}"; do + local dep="${DEPENDENCIES[$i]}" chocpkg install "$dep" done } @@ -216,6 +221,7 @@ cmd_installed() { } cmd_fetch() { + check_valid_variant do_fetch } @@ -287,8 +293,9 @@ package_info() { printf "\n" printf "variants:" - for v in "${ALL_VARIANTS[@]}"; do - printf "%s\n" "$v" + local i + for i in "${!ALL_VARIANTS[@]}"; do + printf "%s\n" "${ALL_VARIANTS[$i]}" done | sort | uniq | while read v; do printf " %s" "$v" done @@ -310,7 +317,9 @@ cmd_info() { } cmd_dependencies() { - for dep in "${DEPENDENCIES[@]:0}"; do + local i + for i in "${!DEPENDENCIES[@]}"; do + local dep="${DEPENDENCIES[$i]}" echo "$dep" chocpkg dependencies "$dep" done | sort | uniq diff --git a/chocpkg/modules/package_group.sh b/chocpkg/modules/package_group.sh index 68263f7..dd6826a 100644 --- a/chocpkg/modules/package_group.sh +++ b/chocpkg/modules/package_group.sh @@ -17,20 +17,24 @@ do_build() { # Installing a package group means installing all its packages; we don't # trigger the build step like 'install' usually does (we don't have one). cmd_install() { - for package in "${DEPENDENCIES[@]:0}"; do - chocpkg install "$package" + local i + for i in "${!DEPENDENCIES[@]}"; do + chocpkg install "${DEPENDENCIES[$i]}" done } # Reinstalling a package group means reinstalling *all* its packages. cmd_reinstall() { - for package in "${DEPENDENCIES[@]:0}"; do - chocpkg reinstall "$package" + local i + for i in "${!DEPENDENCIES[@]}"; do + chocpkg reinstall "${DEPENDENCIES[$i]}" done } cmd_dependencies() { - for package in "${DEPENDENCIES[@]:0}"; do + local i + for i in "${!DEPENDENCIES[@]}"; do + local package="${DEPENDENCIES[$i]}" echo "$package" chocpkg dependencies "$package" done | sort | uniq @@ -38,8 +42,9 @@ cmd_dependencies() { # Package group is installed if all its packages are installed. cmd_installed() { - for package in "${DEPENDENCIES[@]:0}"; do - chocpkg installed "$package" + local i + for i in "${!DEPENDENCIES[@]}"; do + chocpkg installed "${DEPENDENCIES[$i]}" done }