diff --git a/third_party/forked/shell2junit/sh2ju.sh b/third_party/forked/shell2junit/sh2ju.sh index 097d13bf93b..866ea504e55 100755 --- a/third_party/forked/shell2junit/sh2ju.sh +++ b/third_party/forked/shell2junit/sh2ju.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash ### Copyright 2010 Manuel Carrasco MoƱino. (manolo at apache.org) ### ### Licensed under the Apache License, Version 2.0. @@ -18,6 +18,7 @@ ### -name="TestName" : the test name which will be shown in the junit report ### -error="RegExp" : a regexp which sets the test as failure when the output matches it ### -ierror="RegExp" : same as -error but case insensitive +### -output="Path" : path to output directory, defaults to "./results" ### - Junit reports are left in the folder 'result' under the directory where the script is executed. ### - Configure Jenkins to parse junit files from the generated folder ### @@ -25,29 +26,28 @@ asserts=00; errors=0; total=0; content="" date=`which gdate 2>/dev/null || which date` -# create output folder +# default output folder juDIR=`pwd`/results -mkdir -p "$juDIR" || exit # The name of the suite is calculated based in your script name suite="" # A wrapper for the eval method witch allows catching seg-faults and use tee errfile=/tmp/evErr.$$.log -eVal() { - eval "$1" +function eVal() { + (eval "$1") # stdout and stderr may currently be inverted (see below) so echo may write to stderr echo $? 2>&1 | tr -d "\n" > $errfile } # Method to clean old tests -juLogClean() { +function juLogClean() { echo "+++ Removing old junit reports from: $juDIR " rm -f "$juDIR"/TEST-* } # Execute a command and record its results -juLog() { +function juLog() { suite=""; errfile=/tmp/evErr.$$.log date=`which gdate || which date` @@ -61,10 +61,13 @@ juLog() { -class=*) class=`echo "$1" | sed -e 's/-class=//'`; shift;; -ierror=*) ereg=`echo "$1" | sed -e 's/-ierror=//'`; icase="-i"; shift;; -error=*) ereg=`echo "$1" | sed -e 's/-error=//'`; shift;; + -output=*) juDIR=`echo "$1" | sed -e 's/-output=//'`; shift;; *) ya=1;; esac done + # create output directory + mkdir -p "$juDIR" || exit # use first arg as name if it was not given if [ -z "$name" ]; then name="$asserts-$1" @@ -75,9 +78,6 @@ juLog() { class="default" fi - echo "name is: $name" - echo "class is: $class" - suite=$class # calculate command to eval @@ -100,7 +100,7 @@ juLog() { ini=`$date +%s.%N` # execute the command, temporarily swapping stderr and stdout so they can be tee'd to separate files, # then swapping them back again so that the streams are written correctly for the invoking process - ((eVal "$cmd" | tee -a $outf) 3>&1 1>&2 2>&3 | tee $errf) 3>&1 1>&2 2>&3 + ( (eVal "$cmd" | tee -a $outf) 3>&1 1>&2 2>&3 | tee $errf) 3>&1 1>&2 2>&3 evErr=`cat $errfile` rm -f $errfile end=`$date +%s.%N` @@ -119,19 +119,23 @@ juLog() { errMsg=`cat $errf` rm -f $errf # calculate vars - asserts=`expr $asserts + 1` - errors=`expr $errors + $err` + asserts=$(($asserts+1)) + errors=$(($errors+$err)) time=`echo "$end - $ini" | bc -l` total=`echo "$total + $time" | bc -l` # write the junit xml report ## failure tag [ $err = 0 ] && failure="" || failure=" - + + + " ## testcase tag content="$content - + $failure ^^g" $juDIR/TEST-$suite.xml ## remove testSuite so we can add it later @@ -159,11 +168,10 @@ EOF else # no file exists. Adding a new file cat < "$juDIR/TEST-$suite.xml" - + $content EOF fi -} - +} \ No newline at end of file