From: Jan Stancek <jstancek(a)redhat.com>
redhat/configs/evaluate_configs: insert EMPTY tags at correct place
evaluate_configs currently inserts empty tags always at the end
of cfgvariants line, which breaks the table if a new variant
is introduced (which is not a super-set of debug variant).
Let's walk cfgvariants to discover all toplevel directories
and give each an ordering number. Then during addition of EMPTY
tags walk through existing tags and compare ordering number of
toplevel portion of each tag. This number determines where
to insert new tag.
Signed-off-by: Jan Stancek <jstancek(a)redhat.com>
diff --git a/redhat/configs/evaluate_configs b/redhat/configs/evaluate_configs
index blahblah..blahblah 100755
--- a/redhat/configs/evaluate_configs
+++ b/redhat/configs/evaluate_configs
@@ -25,6 +25,7 @@ numorder=
longheader=
weightorig=
weight=
+declare -A toplevel_order
tempdir=$(mktemp -d)
@@ -141,9 +142,35 @@ get_subdirs() { # uses $cfgvariants and $toplevels
done
}
+# Walk through cfgvariants and give each toplevel dir an ordering number.
+# This number is later used to insert EMPTY tags at correct place.
+create_toplevel_order() { # uses toplevel_order
+
+while read -r cfgvariant
+do
+ local i
+ local max
+ local order
+ local topname
+
+ LINE=$(echo "$cfgvariant" | cut -d "|" -f 2)
+
+ for i in $LINE; do
+ topname="${i%%-*}"
+ order=${toplevel_order[$topname]}
+ if [ -z "$order" ]; then
+ max=$(echo "${toplevel_order[@]}" | wc -w)
+ max=$((max + 1))
+ toplevel_order[$topname]=$max
+ $DEBUG && echo "toplevel_order[$topname] = $max"
+ fi
+ done
+done <<< "$cfgvariants"
+}
+
# For each config-variant, find missing sub-directories and mark them as
"EMPTY"
# This is very helpful for stage 3.
-fix_config_variants() { # uses $toplevels, $subdirs, $cfgvariants
+fix_config_variants() { # uses $toplevels, $subdirs, $cfgvariants, $toplevel_order
for toplevel in $toplevels
do
@@ -157,6 +184,8 @@ do
local found
local dashcount
local new
+ local topname
+ local new_topname
subdircnt=$(echo "$subdirs" | grep "$toplevel" | awk -F
"subdirs" ' { print $2 } ')
linenum=0
@@ -218,12 +247,25 @@ do
if echo "$LINE" | grep -q "$toplevel"; then
new=${cfgvariant//$oldentry/$newentry}
else
- # Assuming that there is always a generic entry
- # followed by a debug entry. If a debug only config
- # variant exists, there is a possibility that this
- # screws up badly because the EMPTY tags are always
- # added the end of the string. #FIXME
- new="$cfgvariant $newentry"
+ # Find out toplevel name of new EMPTY entries and use
+ # toplevel_order to figure out where to insert those.
+ found=0
+ new_topname="${newentry%%-*}"
+ new="$(echo "$cfgvariant" | cut -d "|" -f 1)|"
+ LINE=$(echo "$cfgvariant" | cut -d "|" -f 2)
+
+ for i in $LINE; do
+ topname="${i%%-*}"
+ if [ $found -eq 1 -o ${toplevel_order[$topname]} -lt ${toplevel_order[$new_topname]}
]; then
+ new="$new $i"
+ else
+ found=1
+ new="$new $newentry $i"
+ fi
+ done
+ if [ $found -eq 0 ]; then
+ new="$new $newentry"
+ fi
fi
$DEBUG && echo "REPLACED:"
@@ -818,6 +860,9 @@ subdirs=$(get_subdirs)
$DEBUG && echo "Top-level sub-directories:"
$DEBUG && echo "$subdirs"
+# Create ordering for toplevel dirs
+create_toplevel_order
+
# Add EMPTY entries for each missing subdirectory level in the config
# variants
echo "$cfgvariants" > "$tempdir"/cfgvariants
--
https://gitlab.com/cki-project/kernel-ark/-/merge_requests/1437