From: Prarit Bhargava <pra...@redhat.com> redhat: Remove old evaluate_configs
Remove the old evaluate_configs. It will be replaced by a python script. Signed-off-by: Prarit Bhargava <pra...@redhat.com> diff --git a/redhat/configs/README.evaluate_configs b/redhat/configs/README.evaluate_configs deleted file mode 100644 index blahblah..blahblah 0 --- a/redhat/configs/README.evaluate_configs +++ /dev/null @@ -1,134 +0,0 @@ -evaluate_configs is a tool that can verify the settings of kernel -CONFIGs in the redhat/configs directory. The data for evaluate_configs -is a combination of the redhat/configs files and the priority files. - -Introduction to Basic Output -============================ - -This command demonstrates how to display information about the -CONFIG_HEADER_TEST option for RHEL. - -[prarit@prarit configs]$ ./evaluate_configs -p priority.rhel -c CONFIG_HEADER_TEST -CONFIG_HEADER_TEST -legend g ga1 ga2 d da1 da2 -common-x86_64 y - - - X - -common-ppc64le y - X - - X -common-s390x y - X - - X -common-s390x-zfcpdump y - - X X X -common-aarch64 y - - - X - -rhel-x86_64 y - - - X - -rhel-ppc64le y - X - - X -rhel-s390x y - X - - X -rhel-s390x-zfcpdump y - - X X X -rhel-aarch64 y - - - X - -pending-common-x86_64 - - - - X - -pending-common-ppc64le - - X - - X -pending-common-s390x - - X - - X -pending-common-s390x-zfcpdump - - - X X X -pending-common-aarch64 - - - - X - - -The legend row, shows the subdirectory entries. These can be mapped -back to the priority.rhel entries, for example, for x86_64 - -# x86_64 -x86_64=generic:generic-x86:generic-x86-x86_64 -x86_64-debug=generic:generic-x86:generic-x86-x86_64:debug:debug-x86-x86_64 - -are combined into one entry for x86_64 where - -g maps to "generic" -ga1 maps to "generic-x86" -ga2 maps to "generic-x86-x86-64" -d maps to "debug" -da1 maps to nothing (more on this below) -da2 maps to debug-x86-x86_64 - -The left hand column indicates the directory and config-variant. For -example, rhel-s390x-zfcpdump is the s390x-zfcpdump variant and the -row beside it shows the config settings in the rhel directory. - -The data contained in the output can have 5 values: - - y = CONFIG is set to 'y' - m = CONFIG is set to 'm' - n = CONFIG is set to 'is not set' - - = CONFIG file does not exist - X = CONFIG file entry is not in priority file - -As can be seen above in the CONFIG_HEADER_TEST output, da1 is not present -in the priority.rhel file and is marked with an 'X'. - -Options -======= - - -c CONFIG - Evalulate these specific CONFIGs. This can be a file, - or a comma-separated list. If nothing is specified then - all CONFIGs are examined by default.) - -d - Enable debug - -p priority.file - Specify a priority.file (no default) - -j - Evaluate common directory - -f - Evaluate and fix a priority's CONFIGs - -All commands except -j require a -p argument. - -Evaluate CONFIGs -================ - -The -f option can be used to evaluate all the CONFIGs by executing, for -example - -# evaluate_configs -p priority.rhel -f - -or a single CONFIG - -# evaluate_configs -p priority.rhel -f -c CONFIG_HEADER_TEST - -The Evaluate Output will show a different view than the Basic Output above: - -ERROR: (hierarchy) rhel/generic/CONFIG_HEADER_TEST : superseding value has y. -|CONFIG_HEADER_TEST (rhel-aarch64) -|g ga1 ga2 d da1 da2 g ga1 ga2 d da1 da2 g ga1 ga2 d da1 da2 -|y - - - X - y - - - X - - - - - X - -| Deleting rhel/generic/CONFIG_HEADER_TEST - -This view is the Basic Output's aarch64 data in a single line, From the -above output, - -common-aarch64 y - - - X - -rhel-aarch64 y - - - X - -pending-common-aarch64 - - - - X - - -The Evaluate output makes it easier to visually see a conflict. One -can read the line and if there are two y|m|n separated by one or more - or -X's in a line, then there is the possibility of a conflict. - -If the CONFIG setting is found to be incorrect it it automatically removed -and a message - -| Deleting rhel/generic/CONFIG_HEADER_TEST - -will be output. - -Evaluate common Directory -========================= - -This function does a 1-to-1 comparison of CONFIG settings in the -rhel and fedora directories, and checks to see if the CONFIG should be set -in the common directory. - -The output is the same as the Evaluate output. - -This functionality uses the priority.common file and can be executed via - -evaluate_configs -j - -for all CONFIGs, or - -evaluate_configs -j -c CONFIG_HEADER_TEST - -for a single CONFIG. diff --git a/redhat/configs/evaluate_configs b/redhat/configs/evaluate_configs deleted file mode 100755 index blahblah..blahblah 0 --- a/redhat/configs/evaluate_configs +++ /dev/null @@ -1,981 +0,0 @@ -#!/usr/bin/bash -trap '[ -d "$tempdir" ] && rm -rf "$tempdir"' EXIT INT - -# TODO: -c takes a comma separated list or file? -# TODO: allow for user to specify CONFIGS ^^^ ? -# TODO: move the undo the p setting to map_configs_to_array -# TODO: Fix ERROR: message so it only shows when the file is being deleted - -DEBUG=false - -# global definitions -CONFIG= -priority_file= -ORDER= -cfgvariants= -toplevels= -subdirs= -rows= -columns= -configmap= -cfgs= -cfgs_base= -weightorig= -numorder= -longheader= -weightorig= -weight= -declare -A toplevel_order - -tempdir=$(mktemp -d) - -whatcouldgowrong() { - echo "" - echo "usage: evaluate_configs [-c CONFIG] [-d] [-j] [ -p priority_file] [-f]" - echo "" - echo " -c CONFIG Evalulate specific CONFIGs (file or csl)" - echo " -d Enable debug" - echo " -p priority.file Specify a priority.file (no default)" - echo " -j Evaluate common directory" - echo " -f Evaluate CONFIGs" - echo "" - echo "examples)" - echo "" - echo "To show the status of CONFIG_HEADER_TEST in ARK," - echo " ./evaluate_configs -p priority.rhel -c CONFIG_HEADER_TEST" - echo "" - echo "To fix all the CONFIGS in Fedora," - echo " ./evaluate_configs -p priority.fedora -f" - echo "" - echo "To fix only CONFIG_HEADER_TEST in RHEL," - echo " ./evaluate_configs -p priority.rhel -c CONFIG_HEADER_TEST -f" - echo "" - echo "and commit the resulting changes." - echo "" - echo "To fix the common directory entries," - echo " ./evaluate_configs -j" - echo "" - exit 1 -} - -# Get a list of the config-variants -get_cfgvariants() { # uses priority_file - local configvariant - local cfgvariant - - # The priority files have a config-variant, followed by a hierarchy of - # directories to examine for that config level. The directories have - # '-' instead of '/'. - # - # For example, - # - # ppc64le-debug=generic:generic-powerpc:debug:debug-powerpc - # - - while read -r configvariant - do - # ignore any line with whitespace - test -z "$configvariant" && continue - # ignore any line beginning with a # - [[ "$configvariant" == \#* ]] && continue - # ignore any line beginning with ORDER - [[ "$configvariant" == ORDER* ]] && continue - # ignore any line beginning with EMPTY - [[ "$configvariant" == EMPTY* ]] && continue - - # -debug variants must include the base variant - # does the priority file contain a debug variant? - cfgvariant=$(echo "$configvariant" | cut -d "=" -f 1) - if grep -q "$cfgvariant-debug" "$priority_file"; then - # if it does, skip this variant and only use -debug - continue - fi - - # if this variant has a -debug, remove the -debug - cfgvariant=$(echo "$cfgvariant" | awk -F "-debug" ' { print $1 } ') - - # output "cfgvariant | configorder" - echo "$cfgvariant | $(echo "$configvariant" | cut -d "=" -f 2 | tr : " " )" - done < $priority_file -} - -# Find top level dirs for each ORDER. These are normally just debug and config. -get_toplevel_dirs() { # uses cfgvariants - local cfg - local cfgvariant - - # anything with a dash(-) in it is a subdir - echo "$cfgvariants" | while read -r cfgvariant - do - cfg=$(echo "$cfgvariant" | cut -d "|" -f 2) - for i in $cfg - do - echo "$i" | grep -v "-" - done - done | sort -u | tr '\n' ' ' -} - -# For each top level count subdirs and find max subdirs for each top level -get_subdirs() { # uses $cfgvariants and $toplevels - local max - local LINE - local count - local toplevel - - for toplevel in $toplevels - do - max=0 - count=0 - OLDIFS=$IFS; IFS=$'\n'; for LINE in $cfgvariants - do - LINE=$(echo "$LINE" | cut -d "|" -f 2) - count=0 - IFS=$' '; for i in $LINE - do - echo "$i" | grep -q -v $toplevel && continue - count=$(echo "$i" | awk -F "-" '{print NF-1}') - [ "$max" -lt "$count" ] && max="$count" - done - done - IFS=$OLDIFS - echo "$toplevel subdirs $((max + 1))" - 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, $toplevel_order - -for toplevel in $toplevels -do - local subdircnt - local linenum - local cfgvariant - local LINE - local count - local oldentry - local newentry - local found - local dashcount - local new - local topname - local new_topname - - subdircnt=$(echo "$subdirs" | grep "$toplevel" | awk -F "subdirs" ' { print $2 } ') - linenum=0 - echo "$cfgvariants" | while read -r cfgvariant - do - linenum=$((linenum + 1)) - # this seems strange to immediately reset cfgvariant but we - # want the value from the file, not the one in memory. The - # value in the file may have been modified by a previous - # toplevel. - cfgvariant=$(sed "${linenum}q;d" "$tempdir"/cfgvariants) - - LINE=$(echo "$cfgvariant" | cut -d "|" -f 2) - - $DEBUG && echo "LINE=$LINE" - # get the actual number of subdirs - count=$(for i in $LINE - do - echo "$i" | grep -q -v "$toplevel" && continue - echo "$i" | awk -F "-" '{print NF-1}' - done | wc -l) - - [ -z "$count" ] && continue - $DEBUG && echo "count=$count" - - # if the number of subdirs is the same, then bail - [ "$count" -eq "$subdircnt" ] && continue - - $DEBUG && echo "missing entries LINE=$LINE" - oldentry=$(for i in $LINE - do - echo "$i" | grep -q "$toplevel" && echo "$i" | tr "\n" " " - done| xargs) - $DEBUG && echo "oldentry=|$oldentry|" - - # Find the missing entry - found=$(for i in $oldentry - do - dashcount=$(echo "$i" | awk -F "-" '{print NF-1}') - dashcount=$((dashcount + 1)) - echo $dashcount - done | tr "\n" " ") - $DEBUG && echo "found=$found" - - # build the missing entry - count=1 - newentry=$(for i in $(seq 1 "$subdircnt") - do - if echo "$found" | grep -q "$i"; then - echo "$oldentry" | cut -d " " -f "$count" - count=$((count + 1)) - else - echo "${toplevel}-EMPTY$((i - 1))" - fi - done | tr "\n" " " | xargs) - $DEBUG && echo "newentry=|$newentry|" - - # insert the missing entry - if echo "$LINE" | grep -q "$toplevel"; then - new=${cfgvariant//$oldentry/$newentry} - else - # 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:" - $DEBUG && echo "orig=$cfgvariant" - $DEBUG && echo " new=$new" - - sed -i "${linenum}s/${cfgvariant}/${new}/" "$tempdir"/cfgvariants - - $DEBUG && echo "----------------------------" - done -done -} - -# create a configmap -get_configmap() { # uses $ORDER and $cfgvariants - local configvariant - local arch - local _configorder - local configorder - local order - - for order in $ORDER - do - # jforbes: pending-fedora can be dropped. It should be empty - # most of the time. - [ "$order" == "pending-fedora" ] && continue - - echo "$cfgvariants" | while read -r configvariant - do - arch=$(echo "$configvariant" | cut -d "|" -f 1) - _configorder=$(echo "$configvariant" | cut -d "|" -f 2 | tr : " " ) - configorder=$(for c in $_configorder - do - echo -n "${order}-${c} " - done; echo "") - - echo "${order}-$arch | $configorder" - done - done -} - -# pretty output -output_pretty_cfgs() { # uses cfgs and configmap, rows, and columns - local x - local index - local _configmap - - index=0 - for x in $(seq 1 $rows) - do - [ "$x" == 1 ] && echo "legend" "$1" - _configmap=$(echo "$configmap" | sed "${x}q;d" | cut -d "|" -f 1) - echo "$_configmap ${cfgs[@]:$index:$columns}" - index=$((index + columns)) - done | column -t -} - -# helper function to remove a CONFIG file -delete_file() { - local position - local configentry - - position=$1 - configentry=$2 - # if the entry doesn't exist, decrease weight by 1 - weight[$position]=$((weight[$position] - 1)) - if [ "${weight[$position]}" -le 0 ]; then - if [ -e "$configentry" ]; then - $DEBUG && echo "| Deleting $configentry ${weight[$position]})" || echo "| Deleting $configentry" - rm -f "$configentry" - fi - else - $DEBUG && echo "| Not deleted. Required by other config variants (${weight[$position]})" - fi -} - -# find duplicate entries -fix_broken_arches() { # uses ORDER, crows, columns, and configmap - local row - local x - local y - local value - local _value - local char - local position - local curr - - # See comment about weight in create_output_header() - weight=("${weightorig[@]}") - - # This search is handled differently than - # output_pretty_cfgs(). A string is created that - # is only for the specific cfg-variant (row * numorder - # long). This string is easier to evaluate. - for row in $(seq 0 $((crows - 1))) - do - # construct the string of values to view - value=$(for order in $(seq 0 $((numorder - 1))) - do - index=$(((order * (crows * columns)) + (row * columns))) - echo -n "${cfgs[@]:$index:$columns} " - done - echo "") - $DEBUG && echo "row=$row $value" - - # check to see if there is a config setting conflict - _value=$(echo "$value" | tr -d " X-") - if echo "$_value" | grep -q "yy\|mm\|nn"; then - # go through the value string, ex) y-y-Xm-, - # and find the characters that match the - # previous character. - curr="p" - position=0 - # use value here as each character is - # separated by a space - for char in $value - do - index=$(( ((crows * columns) * (position / columns)) + (row * columns) + (position % columns) )) - # sed is 1-based so add 1 to x and y - y=$(((index / columns) + 1)) - # configmap contains the cfgvariant and a - # pipe (+3), and needs to be 1-based - x=$(((index % columns) + 4)) - $DEBUG && echo "($x,$y) $index" - - configentry="$(echo "$configmap" | sed "${y}q;d" | cut -d " " -f "$x" | tr "-" "/")/$CONFIG" - cfgvariant=$(echo "$configmap" | sed "${y}q;d" | cut -d " " -f 1) - - # if this, char, is the same as curr then - # there is a conflict and char needs to - # be changed. - if [ "$char" == "$curr" ]; then - echo "" - echo "ERROR: (hierarchy) $configentry : superseding value has $curr." - echo "|$CONFIG ($cfgvariant)" - printf "|$longheader\n|$value" | column -t - $DEBUG && echo "position=$position | $(echo "$value" | cut -d " " -f $((position + 1)) ) | weight=${weight[$position]}" - - # See comment about weight in - # create_output_header() - delete_file "$position" "$configentry" - break - fi - case "$char" in - '-') - ;; - 'X') - # See comment about weight in - # create_output_header() - delete_file "$position" "$configentry" - ;; - * ) - curr=$char - ;; - esac - position=$((position + 1)) - done - else - # still have to examine this string because it may - # contain "X", which has to be accounted for in - # the weights. - echo "$value" | grep -q "X" || continue - position=0 - for char in $value - do - if [ "$char" == 'X' ]; then - index=$(( ((crows * columns) * (position / columns)) + (row * columns) + (position % columns) )) - # sed is 1-based so add 1 to x and y - y=$(((index / columns) + 1)) - # configmap contains the cfgvariant and - # a pipe (+3), and needs to be 1-based - x=$(((index % columns) + 4)) - $DEBUG && echo "($x,$y) $index" - - configentry="$(echo "$configmap" | sed "${y}q;d" | cut -d " " -f "$x" | tr "-" "/")/$CONFIG" - cfgvariant=$(echo "$configmap" | sed "${y}q;d" | cut -d " " -f 1) - # See comment about weight in - # create_output_header() - delete_file "$position" "$configentry" - fi - position=$((position + 1)) - done - fi - - done -} - -# compare the common, fedora, and rhel configs. -# By default this function uses the priority.common file -fix_common() { # uses cfgs, CONFIG, and ORDER - local index - local value - local _value - local x - local y - local configentry - local _configentry - local order - - # the priority.common array is - # common configs - # rhel configs - # fedora configs - for index in $(seq 0 $(((crows * columns) - 1))) - do - # this string is the concatenation of the - # common, rhel, and fedora config values - value=$(for order in $(seq 0 $((numorder -1))) - do - echo -n "${cfgs[$(( (order * crows * columns) + index))]}" - done - echo "") - - # It doesn't matter what common is set to so - # trim it off. - _value="${value:1}" - if echo "$_value" | grep -q "yy\|mm\|nn"; then - - # set _value to just y|m|n - _value="${_value:1}" - - # create a long array to see if the change is valid - checkvalue=$(for order in $(seq 0 $((numorder -1))) - do - step=$(( order * crows * columns)) - # this seems weird but it rounds off to columns - row=$(( (step + index) / columns * columns)) - echo -n "${cfgs[@]:$row:$columns} " - done; echo "") - - $DEBUG && echo "checkvalue=$checkvalue" - - IFS=', ' read -r -a checkvalue <<< "$checkvalue" - _index=$((index % columns)) - - for order in $(seq 1 $((numorder -1))) - do - checkvalue[$((( order * columns ) + _index))]='-' - done - $DEBUG && echo "updated checkvalue=${checkvalue[@]}" - - # set the common entry to _value, so that an analysis - # can be run on the other entries - checkvalue[$_index]="$_value" - - count=0 - cfgvalue=${checkvalue[0]} - warning=false - for i in ${checkvalue[@]} - do - echo "$i" | grep -q 'm\|n\|y' && cfgvalue=$i - if [ $count == $_index ]; then - if [ "$cfgvalue" != "$_value" ]; then - $DEBUG && echo "$CONFIG override will not work." - warning=true - break; - fi - _index=$((_index + columns)) - fi - count=$((count + 1)) - done - - $warning && break - - echo "$CONFIG found a match where common should be set." - - # sed is 1-based so add 1 to x and y - y=$(((index / columns) + 1)) - # configmap contains the cfgvariant and a - # pipe (+3), and needs to be 1-based - x=$(((index % columns) + 4)) - $DEBUG && echo "($x,$y) $index" - - # remove the existing rhel and fedora configs - configentry="$(echo "$configmap" | sed "${y}q;d" | cut -d " " -f "$x" | tr "-" "/")/$CONFIG" - for order in $ORDER - do - [ "$order" == "common" ] && continue - _configentry=${configentry//common/$order} - [ -e "$_configentry" ] && rm -f "$_configentry" - done - - # create a new common config - echo "$_value" in "$configentry" - case "$_value" in - m) - echo "${CONFIG}=m" > "$configentry" - ;; - y) - echo "${CONFIG}=y" > "$configentry" - ;; - n) - echo "# $CONFIG is not set" > "$configentry" - ;; - esac - fi - done -} - -# Check that ccolumns is consistent -debug_cfgvariants() { # uses $cfgvariants and sets crows and ccolumns - local LINE - - crows=$(echo "$cfgvariants" | wc -l) - - ccolumns=$(echo "$cfgvariants" | while read -r LINE - do - LINE=$(echo "$LINE" | cut -d "|" -f 2) - echo "$LINE" | wc -w - done | sort -u) - - # Error check columns - if [ "$(echo "$ccolumns" | wc -l)" != "1" ]; then - echo "ERROR in parser. There were multiple length columns found." - echo "$ccolumns" - exit 1 - fi -} - -# Create an output header, a fancy long header for fix_broken_arches, and the -# weights -create_output_header() { # uses $ORDER, $configmap, and sets output_header - # and weightorig - - local order - local dir - local convert - local f - local configline - - # We know that the configmap now contains correct sized entries for - # each arch. The arch doesn't really matter and we just need the - # information to make a header. - order=$(echo "$ORDER" | cut -d " " -f 1) - configline=$(echo "$configmap" | head -1 | cut -d "|" -f 2 | sed "s/${order}-//g") - for dir in $configline - do - convert=false - if echo "$dir" | grep -q "-"; then - if echo "$dir" | grep -q "EMPTY0"; then - dir=$(echo "$dir" | awk -F "-EMPTY0" ' { print $1 } ') - convert=true - fi - else - convert=true - fi - - ! $convert && continue - - # get the first letter of each word - f=$(echo "$dir" | head -c 1) - $DEBUG && echo "directory $dir entries will be converted to $f" - configline=${configline//$dir/$f} - done - - # Go through the configline and convert the directory names into header - # names For example, - # generic generic-x86 generic-x86-x86_64 generic-EMPTY3 debug-EMPTY0 debug-EMPTY1 debug-EMPTY2 - # will be converted to - # g ga1 ga2 ga3 d da1 da2 - output_header=$(for dir in $configline - do - # convert dirs with no dashes to the same thing - if ! echo "$dir" | grep -q "-"; then - echo "$dir" - continue - fi - f=$(echo "$dir" | cut -d "-" -f 1) - # convert g-x86 to ga, and g-x86-x86_64 to ga2, etc. - if echo "$dir" | grep -q "EMPTY"; then - numempty=$(echo "$dir" | awk -F "EMPTY" ' { print $2 } ') - if [ "$numempty" -eq 0 ]; then - echo "$f" - else - echo "${f}a${numempty}" - fi - else - numdashes=$(echo "$dir"| grep -o "-" | wc -l) - echo "${f}a${numdashes}" - fi - done | tr "\n" " ") - - # create a weightorig array that contains the weights of change for - # each directory. This is useful for the -f option display - for entry in $output_header - do - if echo "$entry" | grep -q 'a'; then - _weightorig+=(1) - else - _weightorig+=("$crows") - fi - done - - # It is possible (and valid) to have an subdir arch followed by - # a debug entry. The -f checker would have flagged this and - # removed the file. As a solution there is a weight associated - # with each entry's CONFIG file. A debug or generic entry has - # a weight equal the number of columns, and the arch entries all - # have a weight of one. The -f tracker subtracts one for each "hit" - # and only removes the file if the weight is 1. - - weightorig="" - longheader="" - for order in $(seq 1 $numorder) - do - weightorig="${weightorig[@]} ${_weightorig[@]}" - longheader="${longheader}${output_header}" - done - IFS=', ' read -r -a weightorig <<< "$weightorig" -} - -# initialize the array to '-' (undefined) and 'X' (not present/EMPTY) -init_cfgs() { #uses cfgs, rows, and columns - unset cfgs - eval "$(eval echo "cfgs[{1..$((rows * columns))}]='-'\;")" - # the -'s can be a problem when being parsed by other commands. I - # tried using +, o, ., X, etc. but none of the output was as clear as - # a dash. Initialize the 0th element to an unused letter. If still - # 'p' it can be changed back later on. - cfgs[0]=p - - # set EMPTY configs to X - for row in $(seq 0 $((rows - 1))) - do - index=$((row * columns)) - num=0 - for entry in $(echo "$cfgvariants" | sed "$(((row % crows) + 1))q;d" | cut -d "|" -f 2) - do - echo "$entry" | grep -q EMPTY && cfgs[$((index + num))]='X' - num=$((num + 1)) - done - done - cfgs_base=("${cfgs[@]}") -} - -# reset the configs to default -reset_cfgs() { - unset cfgs - cfgs=("${cfgs_base[@]}") -} - -# map the CONFIG files to the array -map_configs_to_array() { #uses CONFIG, configmap, cfgs - - local LINE - local contents - local _LINE - local row - local cols - local col - - for LINE in $(find ./ -name $CONFIG -printf '%P\n' | awk -F "/$CONFIG" ' { print $1 } ') - # loop through the CONFIG files - do - $DEBUG && echo "+-------------------" - $DEBUG && echo "found: $LINE" - - contents=$(grep "^# $CONFIG is not set\|^$CONFIG=" "$LINE"/"$CONFIG") - case $contents in - "# $CONFIG is not set") - contents=n - ;; - "${CONFIG}=y") - contents=y - ;; - "${CONFIG}=m") - contents=m - ;; - *) - echo "$LINE/$CONFIG has a strange entry ... skipping" - return 1 - break;; - esac - - $DEBUG && echo "contents=$contents" - - _LINE=$(echo "$LINE" | tr "/" "-") - $DEBUG && echo "_LINE=$_LINE" - # set each cfg to $contents - OLDIFS=$IFS; IFS=$'\n'; for rowandcol in $(echo "$configmap" | grep -n " $_LINE ") - do - row=$(echo "$rowandcol" | cut -d ":" -f 1) - # grep is 1 based and we need a 0 based number - row=$((row - 1)) - cols=$(echo "$rowandcol" | cut -d "|" -f 2) - $DEBUG && echo "row=$row" - $DEBUG && echo "cols=$cols" - - col=$(echo "$cols" | awk -F "$_LINE" ' { print $1 }' | wc -w) - $DEBUG && echo "($col, $row) = $contents" - # convert the (col,row) to an index in the array - $DEBUG && echo "setting element $(($((row * columns)) + col)) = $contents" - # set the config - cfgs[$(($((row * columns)) + col))]=$contents - done - IFS=$OLDIFS - done - - # undo the 'p' setting of the initial element - # (setting to 'p' done in init_cfgs) - [ "${cfgs[0]}" == "p" ] && cfgs[0]="-" - - return 0 -} - -generate_finalconfiglist() { - awk ' - /is not set/ { - split ($0, a, "#"); - split(a[2], b); - print b[1] ; - } - /=/ { - split ($0, a, "="); - print a[1]; - } - ' *.config | sort -u >> .finalconfiglist -} - -find_dead_configs() { - echo > .finalconfiglist - echo > .configlist - - grep -q "rhel" flavors && (cd ..; make rh-configs) && generate_finalconfiglist - grep -q "fedora" flavors && (cd ..; make fedora-configs) && generate_finalconfiglist - sort -o .finalconfiglist -u .finalconfiglist - - find ./ -name CONFIG_* | sed 's!.*/!!' | sort -u > .configlist - - echo "These CONFIGS defined in redhat/configs but not the final .configs have been deleted:" - comm .configlist .finalconfiglist -2 -3 | while read FILENAME - do - echo $FILENAME - find ./ -name $FILENAME | xargs rm -f - done - - rm -f .configlist .finalconfiglist -} - -# -# -# MAIN -# -# - -# PROCESS ARGUMENTS -FINDFIXES=false -FIXCOMMON=false -configs= -while getopts "c:dDfhjp:" opt; do - case ${opt} in - c ) - configs=$OPTARG - ;; - d ) - DEBUG=true - ;; - D ) - find_dead_configs - exit 0 - ;; - f ) - # Find fixes per config-variant - FINDFIXES=true - ;; - h ) - whatcouldgowrong - ;; - j ) - # jforbes mode - priority_file=priority.common - FIXCOMMON=true - ;; - p ) - # Get the high level order from the priority file - priority_file=$OPTARG - ;; - *) - whatcouldgowrong - ;; - esac -done - -$DEBUG && echo "priority_file=$priority_file" -$DEBUG && echo "configs=$CONFIG" -$DEBUG && echo "FINDFIXES=$FINDFIXES" -$DEBUG && echo "FIXCOMMON=$FIXCOMMON" - -# Do some simple error checking -if [ -z "$priority_file" ]; then - echo "Specify a priority.* file" - whatcouldgowrong -fi - -# if configs is not set then do all CONFIGS -if [ -z "$configs" ]; then - find ./ -name "CONFIG*" -type f -printf "%f\n" | sort -u > "$tempdir"/CONFIGS - configs=$tempdir/CONFIGS -fi - -# if configs is still not set, then parse the argument provided -if [ ! -e "$configs" ]; then -# assume the user is smart enough to specify CONFIGs - for config in ${configs//,/ } - do - # Allow users to specify configs without CONFIG_ - if ! echo "$config" | grep -q CONFIG; then - config="CONFIG_${config}" - fi - echo "$config" >> "$tempdir"/CONFIGS - done - configs=$tempdir/CONFIGS -else - # if the file exists just copy it - [ ! -e "$tempdir"/CONFIGS ] && cp "$configs" "$tempdir"/CONFIGS -fi - -ORDER=$(grep "^ORDER" "$priority_file"| cut -d "=" -f 2) - -# STEP 1. Parse the priority file - -cfgvariants=$(get_cfgvariants) -$DEBUG && echo "----------------------------------------" -$DEBUG && echo "cfgvariants:" -$DEBUG && echo "$cfgvariants" -$DEBUG && echo "----------------------------------------" -toplevels=$(get_toplevel_dirs "$cfgvariants") -$DEBUG && echo "Top level directories in priority file: $toplevels" -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 -fix_config_variants -$DEBUG && echo "" -$DEBUG && echo "" -$DEBUG && echo "Fixed: cfgvariants" -$DEBUG && cat "$tempdir"/cfgvariants - -# Reset cfgvariants to new values with EMPTYs. -# cfgvariants now contains the config-variant data with EMPTY subdirs. -cfgvariants=$(cat "$tempdir"/cfgvariants) -crows= -ccolumns= -debug_cfgvariants -$DEBUG && echo "For the config-variants there are $crows rows and $ccolumns columns." - -# STEP 2. Now that we have fixed the list of config variants, create a config -# map that contains all entries wrt the ORDER specified in the priority file. - -numorder=$(echo "$ORDER" | wc -w) -# jforbes: pending-fedora can be dropped. It should be empty -# most of the time. -echo "$ORDER" | grep -q "pending-fedora" && numorder=$((numorder -1)) - -# configmap is the list of config-variants used for displaying and analyzing -# the CONFIGs. -configmap=$(get_configmap) -$DEBUG && echo " " -$DEBUG && echo "The configmap is:" -$DEBUG && echo "$configmap" -$DEBUG && echo " " - -# STEP 3. Create an array and header to hold the configmap data. - -rows=$(echo "$configmap" | wc -l) -columns=$(echo "$configmap" | head -1 | cut -d "|" -f 2 | wc -w) -$DEBUG && echo "There are $rows rows and $columns columns in the configmap." - -create_output_header # sets output_header -$DEBUG && echo "output_header=|$output_header|" -$DEBUG && echo "longheader=|$longheader|" -$DEBUG && echo "output_header has weights ${weightorig[@]}" - -# create the cfgs array and initialize it to '-' (not found) -init_cfgs - -if $FINDFIXES; then - while read -r CONFIG - do - reset_cfgs - map_configs_to_array || continue - - fix_broken_arches "$output_header" - done < "$tempdir"/CONFIGS - exit -fi - -if $FIXCOMMON; then - while read -r CONFIG - do - reset_cfgs - map_configs_to_array || continue - fix_common - done < "$tempdir"/CONFIGS - exit -fi - -# only display the configs - while read -r CONFIG - do - reset_cfgs - map_configs_to_array || continue - echo "" - echo "$CONFIG" - output_pretty_cfgs "$output_header" - done < "$tempdir"/CONFIGS -exit -- https://gitlab.com/cki-project/kernel-ark/-/merge_requests/3867 -- _______________________________________________ kernel mailing list -- kernel@lists.fedoraproject.org To unsubscribe send an email to kernel-le...@lists.fedoraproject.org Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedoraproject.org/archives/list/kernel@lists.fedoraproject.org Do not reply to spam, report it: https://pagure.io/fedora-infrastructure/new_issue