From: Jan Stancek jstancek@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@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