summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2015-04-29 12:26:12 +0200
committerZdenek Kabelac <zkabelac@redhat.com>2015-04-29 15:09:58 +0200
commitc5b4327f3d34f823ae01511ea8b7635c3637fe87 (patch)
treea62e93c8b874219cec2923ee94a44d7da5a4af49
parent923902013c6d47f02abe2d6171bdeed9f16f413c (diff)
downloadlvm2-c5b4327f3d34f823ae01511ea8b7635c3637fe87.tar.gz
tests: bash-fu for lvmconf
Sqeeze about 0.1s out of every created conf and use internal bash associative arrays instead of lot of command forking
-rw-r--r--test/lib/aux.sh33
1 files changed, 23 insertions, 10 deletions
diff --git a/test/lib/aux.sh b/test/lib/aux.sh
index 24be32339..961dfcf69 100644
--- a/test/lib/aux.sh
+++ b/test/lib/aux.sh
@@ -785,16 +785,29 @@ EOF
echo "$v"
done >> "$config_values"
- local s
- for s in $(cut -f1 -d/ "$config_values" | sort | uniq); do
- echo "$s {"
- local k
- for k in $(grep ^"$s"/ "$config_values" | cut -f1 -d= | sed -e 's, *$,,' | sort | uniq); do
- grep "^$k" "$config_values" | tail -n 1 | sed -e "s,^$s/, ,"
- done
- echo "}"
- echo
- done | tee "$config" | sed -e "s,^,## LVMCONF: ,"
+ declare -A CONF
+ local sec
+ local last_sec
+
+ # read sequential list and put into associative array
+ while IFS=$IFS_NL read -r v; do
+ # trim white-space-chars via echo when inserting
+ CONF[$(echo ${v%%=*})]=${v##*=}
+ done < "$config_values"
+
+ # sort by section and iterate through them
+ printf "%s\n" ${!CONF[@]} | sort | while read -r v ; do
+ sec=${v%%/*} # split on section'/'param_name
+ test "$sec" = "$last_sec" || {
+ test -z "$last_sec" || echo "}"
+ echo "$sec {"
+ last_sec=$sec
+ }
+ echo " ${v#*/} =${CONF[$v]}"
+ done > "$config"
+ echo "}" >> "$config"
+
+ sed -e "s,^,## LVMCONF: ," "$config"
}
lvmconf() {