From ac534ba156774f42e3d9130c778f3d1c5face1dc Mon Sep 17 00:00:00 2001 From: Daniel Drake Date: Sun, 22 Jul 2012 13:25:46 +0000 Subject: Centralize option parsing for options that can be specified multiple times Use common code for parsing environment for interesting options. Cleaner, and fixes handling of variables with newlines included in various places. --- diff --git a/lib/shlib.sh b/lib/shlib.sh index c984039..34982b0 100644 --- a/lib/shlib.sh +++ b/lib/shlib.sh @@ -17,6 +17,20 @@ read_config() { echo ${!vname} } +find_option_values() { + local out=$1 + local module=$2 + local option=$3 + local prefix=CFG_${module}__${option} + + while IFS= read -r -d '' line; do + local name=${line%%=*} + local value=${line#*=} + [[ $name == $prefix || $name == ${prefix}_* ]] || continue + eval "$out+=('$value')" + done < <(env --null) +} + read_buildnr() { local buildnr_path=$intermediatesdir/buildnr if [[ -e $buildnr_path ]]; then diff --git a/modules/custom_packages/kspkglist.70.extras.sh b/modules/custom_packages/kspkglist.70.extras.sh index 03be524..9aff5f1 100644 --- a/modules/custom_packages/kspkglist.70.extras.sh +++ b/modules/custom_packages/kspkglist.70.extras.sh @@ -3,24 +3,22 @@ . $OOB__shlib -while IFS= read -r -d '' line; do - [[ "${line:0:34}" == "CFG_custom_packages__add_packages_" || "${line:0:34}" == "CFG_custom_packages__add_packages=" ]] || continue - pkgs=${line#*=} +find_option_values pkgs_add custom_packages add_packages +for pkgs in "${pkgs_add[@]}"; do oIFS=$IFS IFS=$'\n\t, ' for pkg in $pkgs; do echo "$pkg" done IFS=$oIFS -done < <(env --null) +done -while IFS= read -r -d '' line; do - [[ "${line:0:34}" == "CFG_custom_packages__del_packages_" || "${line:0:34}" == "CFG_custom_packages__del_packages=" ]] || continue - pkgs=${line#*=} +find_option_values pkgs_del custom_packages del_packages +for pkgs in "${pkgs_del[@]}"; do oIFS=$IFS IFS=$'\n\t, ' for pkg in $pkgs; do echo "-$pkg" done IFS=$oIFS -done < <(env --null) +done diff --git a/modules/custom_scripts/kspost.80.nochroot.custom_scripts.sh b/modules/custom_scripts/kspost.80.nochroot.custom_scripts.sh index a9b81a0..d5559f6 100644 --- a/modules/custom_scripts/kspost.80.nochroot.custom_scripts.sh +++ b/modules/custom_scripts/kspost.80.nochroot.custom_scripts.sh @@ -3,14 +3,9 @@ . $OOB__shlib -oIFS=$IFS -IFS=$'\n' -for line in $(env); do - [[ "${line:0:34}" == "CFG_custom_scripts__custom_script_" ]] || continue - script=${line#*=} +find_option_values scripts custom_scripts custom_script +for script in "${scripts[@]}"; do echo "echo 'Executing custom script $script'" echo "export oob_config_dir=\"$oob_config_dir\"" echo "[ -x \"$script\" ] && \"$script\" || bash \"$script\"" done -IFS=$oIFS - diff --git a/modules/sd_card_image/image.50.makefs.sh b/modules/sd_card_image/image.50.makefs.sh index c081b3e..1b692f0 100644 --- a/modules/sd_card_image/image.50.makefs.sh +++ b/modules/sd_card_image/image.50.makefs.sh @@ -128,20 +128,13 @@ EOF } -found_val=0 -oIFS=$IFS -IFS=$'\n' -for line in $(env); do - [[ "${line:0:24}" == "CFG_sd_card_image__size_" ]] || continue - val=${line#*=} +find_option_values sizes sd_card_image size +for val in "${sizes[@]}"; do disk_size=${val%,*} ext= expr index "$vals" ',' &>/dev/null && ext=${vals#*,} - make_image $disk_size $ext - found_val=1 done -IFS=$oIFS # If no sizes were specified, create an image with automatic size. -[ "$found_val" = "1" ] || make_image auto +[[ ${#sizes[@]} == 0 ]] && make_image auto diff --git a/modules/sd_card_image/postimage.50.makezd.sh b/modules/sd_card_image/postimage.50.makezd.sh index dc605ea..50be9a0 100644 --- a/modules/sd_card_image/postimage.50.makezd.sh +++ b/modules/sd_card_image/postimage.50.makezd.sh @@ -37,19 +37,13 @@ function make_zd() { } -found=0 -oIFS=$IFS -IFS=$'\n' -for line in $(env); do - [[ "${line:0:24}" == "CFG_sd_card_image__size_" ]] || continue - vals=${line#*=} +find_option_values sizes sd_card_image size +for vals in "${sizes[@]}"; do disk_size=${vals%,*} ext= expr index "$vals" ',' &>/dev/null && ext=${vals#*,} make_zd $ext - found=1 done -IFS=$oIFS # When no size options were specified, we make a default image. -[ "$found" = "1" ] || make_zd +[[ ${#sizes[@]} == 0 ]] && make_zd diff --git a/modules/sugar_activities_extra/kspost.60.nochroot.activities.sh b/modules/sugar_activities_extra/kspost.60.nochroot.activities.sh index 246f8d2..eb226f7 100644 --- a/modules/sugar_activities_extra/kspost.60.nochroot.activities.sh +++ b/modules/sugar_activities_extra/kspost.60.nochroot.activities.sh @@ -5,26 +5,17 @@ cache=$cachedir/activities -oIFS=$IFS -IFS=$'\n' -for line in $(env); do - [[ "${line:0:32}" == "CFG_sugar_activities_extra__url_" ]] || continue - aurl=${line#*=} +find_option_values urls sugar_activities_extra url +for aurl in "${urls[@]}"; do echo "Downloading from $aurl ..." >&2 wget --no-verbose --inet4-only -P $cache -N "$aurl" - install_sugar_bundle $cache/$(basename "$aurl") done -for line in $(env); do - [[ "${line:0:38}" == "CFG_sugar_activities_extra__local_dir=" || "${line:0:38}" == "CFG_sugar_activities_extra__local_dir_" ]] || continue - actpath=${line#*=} +find_option_values dirs sugar_activities_extra local_dir +for actpath in "${dirs[@]}"; do [ -n "$actpath" -a -d "$actpath" ] || continue - - IFS=$oIFS for i in "$actpath"/*; do install_sugar_bundle $i done - IFS=$'\n' done -IFS=$oIFS -- cgit v0.9.1