diff options
author | Zdenek Kabelac <zkabelac@redhat.com> | 2015-04-29 12:26:12 +0200 |
---|---|---|
committer | Zdenek Kabelac <zkabelac@redhat.com> | 2015-04-29 15:09:58 +0200 |
commit | c5b4327f3d34f823ae01511ea8b7635c3637fe87 (patch) | |
tree | a62e93c8b874219cec2923ee94a44d7da5a4af49 | |
parent | 923902013c6d47f02abe2d6171bdeed9f16f413c (diff) | |
download | lvm2-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.sh | 33 |
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() { |