[lvm-devel] master - tests: bash-fu for lvmconf

Zdenek Kabelac zkabelac at fedoraproject.org
Wed Apr 29 13:10:28 UTC 2015


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=c5b4327f3d34f823ae01511ea8b7635c3637fe87
Commit:        c5b4327f3d34f823ae01511ea8b7635c3637fe87
Parent:        923902013c6d47f02abe2d6171bdeed9f16f413c
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Wed Apr 29 12:26:12 2015 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Wed Apr 29 15:09:58 2015 +0200

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
---
 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 24be323..961dfcf 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() {




More information about the lvm-devel mailing list