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