Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Drake <dsd@laptop.org>2012-07-22 13:25:46 (GMT)
committer Daniel Drake <dsd@laptop.org>2012-08-08 02:47:44 (GMT)
commitac534ba156774f42e3d9130c778f3d1c5face1dc (patch)
tree078986bec2b322b365591a52deefbd8fd28709b1
parenta9fbe78634bac1e6054b794517f2cc6bc993b8a1 (diff)
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.
-rw-r--r--lib/shlib.sh14
-rw-r--r--modules/custom_packages/kspkglist.70.extras.sh14
-rw-r--r--modules/custom_scripts/kspost.80.nochroot.custom_scripts.sh9
-rw-r--r--modules/sd_card_image/image.50.makefs.sh13
-rw-r--r--modules/sd_card_image/postimage.50.makezd.sh12
-rw-r--r--modules/sugar_activities_extra/kspost.60.nochroot.activities.sh17
6 files changed, 32 insertions, 47 deletions
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