#!/bin/bash OPM_TESTS_ROOT=$1 BUILD_DIR=$2 CONVERT_ECL=$3 TMPDIR=`mktemp -d` mkdir $TMPDIR/orig mkdir $TMPDIR/new # Copy results from a test run to refence dir # $1 = source directory to copy data from # $2 = destination directory to copy data to # $3 = base file name for files to copy # $4...$@ = file types to copy copyToReferenceDir () { SRC_DIR=$1 DST_DIR=$2 STEM=$3 FILETYPES=${@:4} mkdir -p $DST_DIR DIFF=1 for filetype in $FILETYPES do # Don't flag as changed if both reference and result dir lack a file type # In particular to handle the optional RFT's if [ ! -f $SRC_DIR/$STEM.$filetype ] && [ ! -f $DST_DIR/$STEM.$filetype ] then continue fi diff -q "$SRC_DIR/$STEM.$filetype" "$DST_DIR/$STEM.$filetype" res=$? if test $res -ne 0 && test -n "$CONVERT_ECL" then cp $SRC_DIR/$STEM.$filetype $TMPDIR/new $CONVERT_ECL $TMPDIR/new/$STEM.$filetype cp $DST_DIR/$STEM.$filetype $TMPDIR/orig $CONVERT_ECL $TMPDIR/orig/$STEM.$filetype diff -u $TMPDIR/orig/$STEM.F$filetype $TMPDIR/new/$STEM.F$filetype >> $WORKSPACE/data_diff fi if test $res -ne 0 then cp "$SRC_DIR/$STEM.$filetype" $DST_DIR DIFF=0 fi done return $DIFF } # Copy damaris results from a test run to refence dir # $1 = source directory to copy data from # $2 = destination directory to copy data to # $3 = base file name for files to copy copyDamarisToReferenceDir () { SRC_DIR=$1 DST_DIR=$2 STEM=$3 mkdir -p $DST_DIR FIRST_FILE=`ls -v1 $SRC_DIR/$STEM*.h5 | head -n1` LAST_FILE=`ls -v1 $SRC_DIR/$STEM*.h5 | tail -n1` for file in $FIRST_FILE $LAST_FILE do h5diff -v "$file" "$DST_DIR/`basename $file`" >> $WORKSPACE/data_diff cp "$file" $DST_DIR done } changed_tests="" # Read failed tests FAILED_TESTS=`cat $BUILD_DIR/Testing/Temporary/LastTestsFailed*.log` test -z "$FAILED_TESTS" && exit 5 for failed_test in $FAILED_TESTS do grep -q -E "compareECLFiles|compareDamarisFiles" <<< $failed_test test $? -ne 0 && continue failed_test=`echo $failed_test | sed -e 's/.*://g' -e 's/\+/./g'` # Extract test properties dir=`dirname "$0"` binary=$(awk -v search="set_tests_properties\\\($failed_test\$" -v prop="SIMULATOR" -f $dir/getprop.awk $BUILD_DIR/CTestTestfile.cmake) dir_name=$(awk -v search="set_tests_properties\\\($failed_test\$" -v prop="DIRNAME" -f $dir/getprop.awk $BUILD_DIR/CTestTestfile.cmake) file_name=$(awk -v search="set_tests_properties\\\($failed_test\$" -v prop="FILENAME" -f $dir/getprop.awk $BUILD_DIR/CTestTestfile.cmake) test_name=$(awk -v search="set_tests_properties\\\($failed_test\$" -v prop="TESTNAME" -f $dir/getprop.awk $BUILD_DIR/CTestTestfile.cmake) echo "$failed_test ${binary} ${dirname} ${file_name} ${test_name}" if grep -q compareECLFiles <<< $failed_test then copyToReferenceDir \ $BUILD_DIR/tests/results/$binary+$test_name \ $OPM_TESTS_ROOT/$dir_name/opm-simulation-reference/$binary \ $file_name \ EGRID INIT RFT SMSPEC UNRST UNSMRY test $? -eq 0 && changed_tests="$changed_tests $test_name" if [ -d $configuration/build-opm-simulators/tests/results/$binary+$test_name/restart ] then RSTEPS=`ls -1 $BUILD_DIR/tests/results/$binary+$test_name/restart/*.UNRST | sed -e 's/.*RESTART_*//' | sed 's/[.].*//' ` result=0 for RSTEP in $RSTEPS do copyToReferenceDir \ $BUILD_DIR/tests/results/$binary+$test_name/restart/ \ $OPM_TESTS_ROOT/$dir_name/opm-simulation-reference/$binary/restart \ ${file_name}_RESTART_${RSTEP} \ EGRID INIT RFT SMSPEC UNRST UNSMRY res=$? test $result -eq 0 || result=$res done test $result -eq 0 && changed_tests="$changed_tests $test_name(restart)" fi else copyDamarisToReferenceDir \ $BUILD_DIR/tests/results/$binary+$test_name \ $OPM_TESTS_ROOT/$dir_name/opm-simulation-reference/$binary \ $file_name changed_tests="$changed_tests $test_name" fi done # special tests copyToReferenceDir \ $BUILD_DIR/tests/results/init/flow+norne \ $OPM_TESTS_ROOT/norne/opm-simulation-reference/flow \ NORNE_ATW2013 \ EGRID INIT test $? -eq 0 && changed_tests="$changed_tests norne_init" changed_tests=`echo $changed_tests | xargs` echo -e "Automatic Reference Data Update for ${REASON:-(Unknown)}\n" > /tmp/cmsg if [ -z "$REASON" ] then echo -e "Reason: fill in this\n" >> /tmp/cmsg else echo -e "Reason: $REASON\n" >> /tmp/cmsg fi if [ -n "$CONVERT_ECL" ] then for dep in opm-common opm-grid do pushd $WORKSPACE/deps/$dep > /dev/null name=`printf "%-14s" $dep` rev=`git rev-parse HEAD` echo -e "$name = $rev" >> /tmp/cmsg popd > /dev/null done echo -e "opm-simulators = `git rev-parse HEAD`" >> /tmp/cmsg fi echo -e "\n### Changed Tests ###\n" >> /tmp/cmsg for t in ${changed_tests} do echo " * ${t}" >> /tmp/cmsg done cd $OPM_TESTS_ROOT if [ -n "$BRANCH_NAME" ] then git checkout -b $BRANCH_NAME $BRANCH_BASE fi # Add potential new files untracked=`git status --porcelain | awk '$1~/\?/{print $2}'` if [ -n "$untracked" ] then git add $untracked fi if [ -z "$REASON" ] then git commit -a -t /tmp/cmsg else git commit -a -F /tmp/cmsg fi rm -rf $TMPDIR