diff --git a/bin/compareparameters.sh b/bin/compareparameters.sh new file mode 100644 index 0000000000000000000000000000000000000000..fc019cf9947234e224932746869c248867881a8b --- /dev/null +++ b/bin/compareparameters.sh @@ -0,0 +1,117 @@ +#!/bin/sh + +# 1. obtain a list new_parameters.csv of all current parameters +# retrieve all occurrences of GET_PARAM and GET_RUNTIME_PARAM +find dumux/ -name '*.[ch][ch]' -exec grep 'GET_PARAM' {} \; | sort -u >new_parameters.csv +find dumux/ -name '*.[ch][ch]' -exec grep 'GET_RUNTIME_PARAM' {} \; | sort -u >>new_parameters.csv +# remove #define's +sed -i '/#define/d' new_parameters.csv +# remove everything before GET_PARAM and GET_RUNTIME_PARAM +sed -i 's/^.*GET_PARAM/GET_PARAM/' new_parameters.csv +sed -i 's/^.*GET_RUNTIME_PARAM/GET_RUNTIME_PARAM/' new_parameters.csv +# remove everything before and including first comma +awk '{print substr($0,index($0,",")+1)}' new_parameters.csv >tmp.txt +mv tmp.txt new_parameters.csv +# remove leading whitespace +sed -i 's/^[ \t]*//' new_parameters.csv +# remove everything after and including paranthesis +sed -i 's/).*//' new_parameters.csv +# sort uniquely +sort -u new_parameters.csv -o new_parameters.csv +# keep only the lines containing two commas +sed -i '/,.*,/!d' new_parameters.csv +# append types to the end of the lines +sed -i '/^bool,/ s/$/, bool/' new_parameters.csv +sed -i '/^double,/ s/$/, double/' new_parameters.csv +sed -i '/^int,/ s/$/, int/' new_parameters.csv +sed -i '/^Scalar,/ s/$/, Scalar/' new_parameters.csv +sed -i '/^std::string,/ s/$/, std::string/' new_parameters.csv +# remove types from the beginning of the lines +sed -i 's/bool,//' new_parameters.csv +sed -i 's/double,//' new_parameters.csv +sed -i 's/int,//' new_parameters.csv +sed -i 's/Scalar,//' new_parameters.csv +sed -i 's/std::string,//' new_parameters.csv +# remove all blanks +sed -i 's/ //g' new_parameters.csv +# add blanks after every comma +sed -i 's/,/, /g' new_parameters.csv +# sort uniquely +sort -u new_parameters.csv -o new_parameters.csv +# remove lines containing no parameter names +sed -i '/, , /d' new_parameters.csv + + +# 2. obtain a list old_parameters.csv of all old parameters +# convert the spreadsheet to csv +if ! unoconv --format=csv -e FilterOptions=44,34,0,3,1/1/2/1/3/1/4/9/5/9 -o tmp.csv doc/doxygen/extradoc/parameters.ods; then + echo "Failed to convert parameters.ods. Be sure that it is not opened somewhere." + rm -f new_parameters.csv tmp.csv + exit 1 +fi +unoconv --format=csv -i FilterOptions=44,34,0,3,1/1/2/1/3/1/4/9/5/9 -o old_parameters.csv tmp.csv +rm tmp.csv +# remove lines containing no parameter names +sed -i '/,,/d' old_parameters.csv +# loop over all lines, add group name if necessary +word="" +while read line; do + word=$(echo "$line" | awk '{print $1;}') + #echo "$word" + firstletter=$(echo $word | head -c 1) + if [ $firstletter != "," ]; then + group=$word + fi + if [ $group = "" ]; then + echo "No group found in line $line. Abort." + fi + linewithoutgroup=$(echo "$line" | cut -d " " -f2-) + echo "$group $linewithoutgroup" >>tmp.csv +done <old_parameters.csv +mv tmp.csv old_parameters.csv +# format in the same way as new_parameters.csv +sed -i 's/ //g' old_parameters.csv +sed -i 's/,/, /g' old_parameters.csv +sort -u old_parameters.csv -o old_parameters.csv + +# 3. compare lists of old and new parameters +# treat additions +diff -u old_parameters.csv new_parameters.csv | grep -E "^\+" | grep -v "\++" >added.csv +if [[ -s added.csv ]]; then + echo "" + echo "Compared to parameters.ods, the following parameters have been _added_:" + echo "" + echo "Group, Parameter, Type:" + sed -i 's/+//g' added.csv + cat added.csv + echo "" + echo "Search for those parameters and their default values. If default values" + echo "are set, you can find them by searching for GroupNameParameterName (one" + echo "word only). Decide whether the parameter should be included in" + echo "doc/doxygen/extradoc/parameters.ods, possibly by discussing with the responsible guy." +fi +# treat deletions +diff -u old_parameters.csv new_parameters.csv | grep -E "^\-" | grep -v "\--" >deleted.csv +if [[ -s deleted.csv ]]; then + echo "" + echo "Compared to parameters.ods, the following parameters have been _deleted_:" + echo "" + echo "Group, Parameter, Type:" + sed -i 's/-//g' deleted.csv + cat deleted.csv + echo "" + echo "Check whether those parameters really don't exist anymore by grepping for" + echo "their name. If so, delete the corresponding rows in doc/doxygen/extradoc/parameters.ods." +fi +# final remark +if [[ ! -s added.csv && ! -s deleted.csv ]]; then + echo "" + echo "Compared to parameters.ods, no parameters have been added or deleted." + echo "" +else + echo "" + echo "_Important:_ If you change parameters.ods, be sure to export it to" + echo "parameters.html." +fi +# clean up +rm -f old_parameters.csv new_parameters.csv added.csv deleted.csv