2009-05-19 00:56:52 -04:00
#!/usr/bin/env bash
2009-08-16 23:53:27 -04:00
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
2009-05-19 00:56:52 -04:00
#set -x
ulimit -n 1024
### Setup some variables.
2010-10-25 14:59:28 -04:00
### SVN_REVISION and BUILD_URL are set by Hudson if it is run by patch process
2010-11-02 01:33:05 -04:00
### Read variables from properties file
2011-06-14 11:05:39 -04:00
bindir = $( dirname $0 )
2011-08-02 12:37:57 -04:00
. $bindir /test-patch.properties
2009-05-19 00:56:52 -04:00
2011-08-05 10:28:30 -04:00
if [ -z " $MAVEN_HOME " ] ; then
MVN = mvn
else
MVN = $MAVEN_HOME /bin/mvn
fi
AWK = ${ AWK :- awk }
2009-05-19 00:56:52 -04:00
###############################################################################
parseArgs( ) {
case " $1 " in
HUDSON)
### Set HUDSON to true to indicate that this script is being run by Hudson
HUDSON = true
2011-05-16 15:42:52 -04:00
if [ [ $# != 16 ] ] ; then
echo " ERROR: usage $0 HUDSON <PATCH_DIR> <SUPPORT_DIR> <PS_CMD> <WGET_CMD> <JIRACLI> <SVN_CMD> <GREP_CMD> <PATCH_CMD> <FINDBUGS_HOME> <FORREST_HOME> <ECLIPSE_HOME> <WORKSPACE_BASEDIR> <JIRA_PASSWD> <CURL_CMD> <DEFECT> "
2009-05-19 00:56:52 -04:00
cleanupAndExit 0
fi
PATCH_DIR = $2
SUPPORT_DIR = $3
PS = $4
WGET = $5
JIRACLI = $6
SVN = $7
GREP = $8
PATCH = $9
FINDBUGS_HOME = ${ 10 }
FORREST_HOME = ${ 11 }
ECLIPSE_HOME = ${ 12 }
2011-05-16 15:42:52 -04:00
BASEDIR = ${ 13 }
JIRA_PASSWD = ${ 14 }
CURL = ${ 15 }
defect = ${ 16 }
2009-05-19 00:56:52 -04:00
### Retrieve the defect number
if [ -z " $defect " ] ; then
echo "Could not determine the patch to test. Exiting."
cleanupAndExit 0
fi
if [ ! -e " $PATCH_DIR " ] ; then
mkdir -p $PATCH_DIR
fi
ECLIPSE_PROPERTY = " -Declipse.home= $ECLIPSE_HOME "
; ;
DEVELOPER)
### Set HUDSON to false to indicate that this script is being run by a developer
HUDSON = false
2011-01-03 20:34:32 -05:00
if [ [ $# != 9 ] ] ; then
2011-01-03 20:05:00 -05:00
echo " ERROR: usage $0 DEVELOPER <PATCH_FILE> <SCRATCH_DIR> <SVN_CMD> <GREP_CMD> <PATCH_CMD> <FINDBUGS_HOME> <FORREST_HOME> <WORKSPACE_BASEDIR> "
2009-05-19 00:56:52 -04:00
cleanupAndExit 0
fi
### PATCH_FILE contains the location of the patchfile
PATCH_FILE = $2
if [ [ ! -e " $PATCH_FILE " ] ] ; then
echo " Unable to locate the patch file $PATCH_FILE "
cleanupAndExit 0
fi
PATCH_DIR = $3
### Check if $PATCH_DIR exists. If it does not exist, create a new directory
if [ [ ! -e " $PATCH_DIR " ] ] ; then
mkdir " $PATCH_DIR "
if [ [ $? = = 0 ] ] ; then
echo " $PATCH_DIR has been created "
else
echo " Unable to create $PATCH_DIR "
cleanupAndExit 0
fi
fi
SVN = $4
GREP = $5
PATCH = $6
FINDBUGS_HOME = $7
FORREST_HOME = $8
BASEDIR = $9
2011-08-05 10:28:30 -04:00
PS = ${ PS :- ps }
2009-05-19 00:56:52 -04:00
### Obtain the patch filename to append it to the version number
defect = ` basename $PATCH_FILE `
; ;
*)
echo " ERROR: usage $0 HUDSON [args] | DEVELOPER [args] "
cleanupAndExit 0
; ;
esac
}
###############################################################################
checkout ( ) {
echo ""
echo ""
echo "======================================================================"
echo "======================================================================"
echo " Testing patch for ${ defect } . "
echo "======================================================================"
echo "======================================================================"
echo ""
echo ""
### When run by a developer, if the workspace contains modifications, do not continue
2009-06-01 12:06:19 -04:00
status = ` $SVN stat --ignore-externals | sed -e '/^X[ ]*/D' `
2009-05-19 00:56:52 -04:00
if [ [ $HUDSON = = "false" ] ] ; then
if [ [ " $status " != "" ] ] ; then
echo "ERROR: can't run in a workspace that contains the following modifications"
echo " $status "
cleanupAndExit 1
fi
2011-08-02 12:37:57 -04:00
echo
2009-05-19 00:56:52 -04:00
else
cd $BASEDIR
$SVN revert -R .
rm -rf ` $SVN status --no-ignore`
$SVN update
fi
return $?
}
###############################################################################
setup ( ) {
### Download latest patch file (ignoring .htm and .html) when run from patch process
if [ [ $HUDSON = = "true" ] ] ; then
$WGET -q -O $PATCH_DIR /jira http://issues.apache.org/jira/browse/$defect
if [ [ ` $GREP -c 'Patch Available' $PATCH_DIR /jira` = = 0 ] ] ; then
echo " $defect is not \"Patch Available\". Exiting. "
cleanupAndExit 0
fi
relativePatchURL = ` $GREP -o '"/jira/secure/attachment/[0-9]*/[^"]*' $PATCH_DIR /jira | $GREP -v -e 'htm[l]*$' | sort | tail -1 | $GREP -o '/jira/secure/attachment/[0-9]*/[^"]*' `
patchURL = " http://issues.apache.org ${ relativePatchURL } "
patchNum = ` echo $patchURL | $GREP -o '[0-9]*/' | $GREP -o '[0-9]*' `
echo " $defect patch is being downloaded at `date` from "
echo " $patchURL "
$WGET -q -O $PATCH_DIR /patch $patchURL
VERSION = ${ SVN_REVISION } _${ defect } _PATCH-${ patchNum }
JIRA_COMMENT = " Here are the results of testing the latest attachment
$patchURL
against trunk revision ${ SVN_REVISION } ."
### Copy in any supporting files needed by this process
cp -r $SUPPORT_DIR /lib/* ./lib
#PENDING: cp -f $SUPPORT_DIR/etc/checkstyle* ./src/test
### Copy the patch file to $PATCH_DIR
else
VERSION = PATCH-${ defect }
cp $PATCH_FILE $PATCH_DIR /patch
if [ [ $? = = 0 ] ] ; then
echo " Patch file $PATCH_FILE copied to $PATCH_DIR "
else
echo " Could not copy $PATCH_FILE to $PATCH_DIR "
cleanupAndExit 0
fi
fi
2010-11-02 01:33:05 -04:00
### exit if warnings are NOT defined in the properties file
if [ -z " $OK_FINDBUGS_WARNINGS " ] || [ [ -z " $OK_JAVADOC_WARNINGS " ] ] || [ [ -z $OK_RELEASEAUDIT_WARNINGS ] ] ; then
echo "Please define the following properties in test-patch.properties file"
echo "OK_FINDBUGS_WARNINGS"
echo "OK_RELEASEAUDIT_WARNINGS"
2010-11-18 23:13:08 -05:00
echo "OK_JAVADOC_WARNINGS"
2010-11-02 01:33:05 -04:00
cleanupAndExit 1
fi
2009-05-19 00:56:52 -04:00
echo ""
echo ""
echo "======================================================================"
echo "======================================================================"
2010-11-02 01:33:05 -04:00
echo " Pre-build trunk to verify trunk stability and javac warnings"
2009-05-19 00:56:52 -04:00
echo "======================================================================"
echo "======================================================================"
echo ""
echo ""
2011-08-02 12:37:57 -04:00
# echo "$ANT_HOME/bin/ant -Djavac.args="-Xlint -Xmaxwarns 1000" $ECLIPSE_PROPERTY -Dforrest.home=${FORREST_HOME} -D${PROJECT_NAME}PatchProcess= clean tar > $PATCH_DIR/trunkJavacWarnings.txt 2>&1"
# $ANT_HOME/bin/ant -Djavac.args="-Xlint -Xmaxwarns 1000" $ECLIPSE_PROPERTY -Dforrest.home=${FORREST_HOME} -D${PROJECT_NAME}PatchProcess= clean tar > $PATCH_DIR/trunkJavacWarnings.txt 2>&1
2011-08-05 10:28:30 -04:00
$MVN clean compile -DskipTests -D${ PROJECT_NAME } PatchProcess -Ptest-patch > $PATCH_DIR /trunkJavacWarnings.txt 2>& 1
2009-05-19 00:56:52 -04:00
if [ [ $? != 0 ] ] ; then
echo "Trunk compilation is broken?"
cleanupAndExit 1
fi
}
###############################################################################
### Check for @author tags in the patch
checkAuthor ( ) {
echo ""
echo ""
echo "======================================================================"
echo "======================================================================"
echo " Checking there are no @author tags in the patch."
echo "======================================================================"
echo "======================================================================"
echo ""
echo ""
authorTags = ` $GREP -c -i '@author' $PATCH_DIR /patch`
echo " There appear to be $authorTags @author tags in the patch. "
if [ [ $authorTags != 0 ] ] ; then
JIRA_COMMENT = " $JIRA_COMMENT
-1 @author. The patch appears to contain $authorTags @author tags which the Hadoop community has agreed to not allow in code contributions."
return 1
fi
JIRA_COMMENT = " $JIRA_COMMENT
+1 @author. The patch does not contain any @author tags."
return 0
}
###############################################################################
### Check for tests in the patch
checkTests ( ) {
echo ""
echo ""
echo "======================================================================"
echo "======================================================================"
echo " Checking there are new or changed tests in the patch."
echo "======================================================================"
echo "======================================================================"
echo ""
echo ""
testReferences = ` $GREP -c -i '/test' $PATCH_DIR /patch`
echo " There appear to be $testReferences test files referenced in the patch. "
if [ [ $testReferences = = 0 ] ] ; then
if [ [ $HUDSON = = "true" ] ] ; then
patchIsDoc = ` $GREP -c -i 'title="documentation' $PATCH_DIR /jira`
if [ [ $patchIsDoc != 0 ] ] ; then
echo "The patch appears to be a documentation patch that doesn't require tests."
JIRA_COMMENT = " $JIRA_COMMENT
+0 tests included. The patch appears to be a documentation patch that doesn' t require tests."
return 0
fi
fi
JIRA_COMMENT = " $JIRA_COMMENT
-1 tests included. The patch doesn' t appear to include any new or modified tests.
2009-06-23 00:45:15 -04:00
Please justify why no new tests are needed for this patch.
Also please list what manual steps were performed to verify this patch."
2009-05-19 00:56:52 -04:00
return 1
fi
JIRA_COMMENT = " $JIRA_COMMENT
+1 tests included. The patch appears to include $testReferences new or modified tests."
return 0
}
2009-09-15 09:17:07 -04:00
cleanUpXml ( ) {
cd $BASEDIR /conf
for file in ` ls *.xml.template`
do
rm -f ` basename $file .template`
done
cd $BASEDIR
}
2009-05-19 00:56:52 -04:00
###############################################################################
### Attempt to apply the patch
applyPatch ( ) {
echo ""
echo ""
echo "======================================================================"
echo "======================================================================"
echo " Applying patch."
echo "======================================================================"
echo "======================================================================"
echo ""
echo ""
2011-06-14 11:05:39 -04:00
export PATCH
$bindir /smart-apply-patch.sh $PATCH_DIR /patch
2009-05-19 00:56:52 -04:00
if [ [ $? != 0 ] ] ; then
echo "PATCH APPLICATION FAILED"
JIRA_COMMENT = " $JIRA_COMMENT
-1 patch. The patch command could not apply the patch."
return 1
fi
return 0
}
###############################################################################
### Check there are no javadoc warnings
checkJavadocWarnings ( ) {
echo ""
echo ""
echo "======================================================================"
echo "======================================================================"
echo " Determining number of patched javadoc warnings."
echo "======================================================================"
echo "======================================================================"
echo ""
echo ""
echo " $ANT_HOME /bin/ant -Dversion= " ${ VERSION } " -DHadoopPatchProcess= clean javadoc | tee $PATCH_DIR /patchJavadocWarnings.txt "
2011-08-05 10:28:30 -04:00
( cd hadoop-project; mvn install)
( cd hadoop-annotations; mvn install)
2011-08-02 12:37:57 -04:00
#$ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= clean javadoc | tee $PATCH_DIR/patchJavadocWarnings.txt
2011-08-05 10:28:30 -04:00
$MVN clean compile javadoc:javadoc -DskipTests -Pdocs -D${ PROJECT_NAME } PatchProcess > $PATCH_DIR /patchJavadocWarnings.txt 2>& 1
javadocWarnings = ` $GREP '\[WARNING\]' $PATCH_DIR /patchJavadocWarnings.txt | $AWK '/Javadoc Warnings/,EOF' | $GREP warning | $AWK 'BEGIN {total = 0} {total += 1} END {print total}' `
2009-05-19 00:56:52 -04:00
echo ""
echo ""
echo " There appear to be $javadocWarnings javadoc warnings generated by the patched build. "
2010-11-02 01:33:05 -04:00
### if current warnings greater than OK_JAVADOC_WARNINGS
if [ [ $javadocWarnings > $OK_JAVADOC_WARNINGS ] ] ; then
2009-05-19 00:56:52 -04:00
JIRA_COMMENT = " $JIRA_COMMENT
2010-11-02 01:33:05 -04:00
-1 javadoc. The javadoc tool appears to have generated ` expr $(( $javadocWarnings - $OK_JAVADOC_WARNINGS )) ` warning messages."
2009-05-19 00:56:52 -04:00
return 1
fi
JIRA_COMMENT = " $JIRA_COMMENT
+1 javadoc. The javadoc tool did not generate any warning messages."
2010-11-02 01:33:05 -04:00
return 0
2009-05-19 00:56:52 -04:00
}
###############################################################################
### Check there are no changes in the number of Javac warnings
checkJavacWarnings ( ) {
echo ""
echo ""
echo "======================================================================"
echo "======================================================================"
echo " Determining number of patched javac warnings."
echo "======================================================================"
echo "======================================================================"
echo ""
echo ""
2011-08-02 12:37:57 -04:00
#echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" -Djavac.args="-Xlint -Xmaxwarns 1000" $ECLIPSE_PROPERTY -Dforrest.home=${FORREST_HOME} -DHadoopPatchProcess= clean tar > $PATCH_DIR/patchJavacWarnings.txt 2>&1"
#$ANT_HOME/bin/ant -Dversion="${VERSION}" -Djavac.args="-Xlint -Xmaxwarns 1000" $ECLIPSE_PROPERTY -Dforrest.home=${FORREST_HOME} -DHadoopPatchProcess= clean tar > $PATCH_DIR/patchJavacWarnings.txt 2>&1
2011-08-05 10:28:30 -04:00
$MVN clean compile -DskipTests -D${ PROJECT_NAME } PatchProcess -Ptest-patch > $PATCH_DIR /patchJavacWarnings.txt 2>& 1
2009-08-04 15:01:51 -04:00
if [ [ $? != 0 ] ] ; then
JIRA_COMMENT = " $JIRA_COMMENT
2009-05-19 00:56:52 -04:00
2009-08-04 15:01:51 -04:00
-1 javac. The patch appears to cause tar ant target to fail."
return 1
fi
2009-05-19 00:56:52 -04:00
### Compare trunk and patch javac warning numbers
if [ [ -f $PATCH_DIR /patchJavacWarnings.txt ] ] ; then
2011-08-05 10:28:30 -04:00
trunkJavacWarnings = ` $GREP '\[WARNING\]' $PATCH_DIR /trunkJavacWarnings.txt | $AWK 'BEGIN {total = 0} {total += 1} END {print total}' `
patchJavacWarnings = ` $GREP '\[WARNING\]' $PATCH_DIR /patchJavacWarnings.txt | $AWK 'BEGIN {total = 0} {total += 1} END {print total}' `
2009-05-19 00:56:52 -04:00
echo " There appear to be $trunkJavacWarnings javac compiler warnings before the patch and $patchJavacWarnings javac compiler warnings after applying the patch. "
if [ [ $patchJavacWarnings != "" && $trunkJavacWarnings != "" ] ] ; then
2009-06-30 20:56:15 -04:00
if [ [ $patchJavacWarnings -gt $trunkJavacWarnings ] ] ; then
2009-05-19 00:56:52 -04:00
JIRA_COMMENT = " $JIRA_COMMENT
-1 javac. The applied patch generated $patchJavacWarnings javac compiler warnings ( more than the trunk' s current $trunkJavacWarnings warnings) ."
return 1
fi
fi
fi
JIRA_COMMENT = " $JIRA_COMMENT
+1 javac. The applied patch does not increase the total number of javac compiler warnings."
return 0
}
###############################################################################
### Check there are no changes in the number of release audit (RAT) warnings
checkReleaseAuditWarnings ( ) {
echo ""
echo ""
echo "======================================================================"
echo "======================================================================"
echo " Determining number of patched release audit warnings."
echo "======================================================================"
echo "======================================================================"
echo ""
echo ""
2011-08-02 12:37:57 -04:00
#echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" -Dforrest.home=${FORREST_HOME} -DHadoopPatchProcess= releaseaudit > $PATCH_DIR/patchReleaseAuditWarnings.txt 2>&1"
#$ANT_HOME/bin/ant -Dversion="${VERSION}" -Dforrest.home=${FORREST_HOME} -DHadoopPatchProcess= releaseaudit > $PATCH_DIR/patchReleaseAuditWarnings.txt 2>&1
2011-08-05 10:28:30 -04:00
$MVN apache-rat:check -D${ PROJECT_NAME } PatchProcess 2>& 1
2011-08-02 12:37:57 -04:00
find . -name rat.txt | xargs cat > $PATCH_DIR /patchReleaseAuditWarnings.txt
2009-05-19 00:56:52 -04:00
### Compare trunk and patch release audit warning numbers
if [ [ -f $PATCH_DIR /patchReleaseAuditWarnings.txt ] ] ; then
patchReleaseAuditWarnings = ` $GREP -c '\!?????' $PATCH_DIR /patchReleaseAuditWarnings.txt`
echo ""
echo ""
2010-11-02 01:33:05 -04:00
echo " There appear to be $OK_RELEASEAUDIT_WARNINGS release audit warnings before the patch and $patchReleaseAuditWarnings release audit warnings after applying the patch. "
if [ [ $patchReleaseAuditWarnings != "" && $OK_RELEASEAUDIT_WARNINGS != "" ] ] ; then
if [ [ $patchReleaseAuditWarnings -gt $OK_RELEASEAUDIT_WARNINGS ] ] ; then
2009-05-19 00:56:52 -04:00
JIRA_COMMENT = " $JIRA_COMMENT
2010-11-02 01:33:05 -04:00
-1 release audit. The applied patch generated $patchReleaseAuditWarnings release audit warnings ( more than the trunk' s current $OK_RELEASEAUDIT_WARNINGS warnings) ."
2009-05-19 00:56:52 -04:00
$GREP '\!?????' $PATCH_DIR /patchReleaseAuditWarnings.txt > $PATCH_DIR /patchReleaseAuditProblems.txt
2010-11-04 23:48:48 -04:00
echo "Lines that start with ????? in the release audit report indicate files that do not have an Apache license header." >> $PATCH_DIR /patchReleaseAuditProblems.txt
2010-11-02 01:33:05 -04:00
JIRA_COMMENT_FOOTER = " Release audit warnings: $BUILD_URL /artifact/trunk/patchprocess/patchReleaseAuditProblems.txt
2009-05-19 00:56:52 -04:00
$JIRA_COMMENT_FOOTER "
return 1
fi
fi
fi
JIRA_COMMENT = " $JIRA_COMMENT
+1 release audit. The applied patch does not increase the total number of release audit warnings."
return 0
}
###############################################################################
### Check there are no changes in the number of Checkstyle warnings
checkStyle ( ) {
echo ""
echo ""
echo "======================================================================"
echo "======================================================================"
echo " Determining number of patched checkstyle warnings."
echo "======================================================================"
echo "======================================================================"
echo ""
echo ""
echo "THIS IS NOT IMPLEMENTED YET"
echo ""
echo ""
2011-08-02 12:37:57 -04:00
#echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= checkstyle"
#$ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= checkstyle
2011-08-05 10:28:30 -04:00
$MVN compile checkstyle:checkstyle -D${ PROJECT_NAME } PatchProcess
2011-08-02 12:37:57 -04:00
2010-10-25 14:59:28 -04:00
JIRA_COMMENT_FOOTER = " Checkstyle results: $BUILD_URL /artifact/trunk/build/test/checkstyle-errors.html
2009-05-19 00:56:52 -04:00
$JIRA_COMMENT_FOOTER "
### TODO: calculate actual patchStyleErrors
# patchStyleErrors=0
# if [[ $patchStyleErrors != 0 ]] ; then
# JIRA_COMMENT="$JIRA_COMMENT
#
# -1 checkstyle. The patch generated $patchStyleErrors code style errors."
# return 1
# fi
# JIRA_COMMENT="$JIRA_COMMENT
#
# +1 checkstyle. The patch generated 0 code style errors."
return 0
}
###############################################################################
### Check there are no changes in the number of Findbugs warnings
checkFindbugsWarnings ( ) {
2010-11-18 19:44:11 -05:00
findbugs_version = ` ${ FINDBUGS_HOME } /bin/findbugs -version`
2009-05-19 00:56:52 -04:00
echo ""
echo ""
echo "======================================================================"
echo "======================================================================"
echo " Determining number of patched Findbugs warnings."
echo "======================================================================"
echo "======================================================================"
echo ""
echo ""
2011-08-02 12:37:57 -04:00
#echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" -Dfindbugs.home=$FINDBUGS_HOME -Dforrest.home=${FORREST_HOME} -DHadoopPatchProcess= findbugs"
#$ANT_HOME/bin/ant -Dversion="${VERSION}" -Dfindbugs.home=${FINDBUGS_HOME} -Dforrest.home=${FORREST_HOME} -DHadoopPatchProcess= findbugs
2011-08-05 10:28:30 -04:00
$MVN clean compile findbugs:findbugs -D${ PROJECT_NAME } PatchProcess
2011-08-02 12:37:57 -04:00
2009-05-19 00:56:52 -04:00
if [ $? != 0 ] ; then
JIRA_COMMENT = " $JIRA_COMMENT
2010-11-18 19:44:11 -05:00
-1 findbugs. The patch appears to cause Findbugs ( version ${ findbugs_version } ) to fail."
2009-05-19 00:56:52 -04:00
return 1
fi
2011-08-02 12:37:57 -04:00
JIRA_COMMENT_FOOTER = " Findbugs warnings: $BUILD_URL /artifact/trunk/target/newPatchFindbugsWarnings.html
2009-05-19 00:56:52 -04:00
$JIRA_COMMENT_FOOTER "
2011-08-02 12:37:57 -04:00
cp $BASEDIR /hadoop-common/target/findbugsXml.xml $PATCH_DIR /patchFindbugsWarnings.xml
2009-05-19 00:56:52 -04:00
$FINDBUGS_HOME /bin/setBugDatabaseInfo -timestamp "01/01/2000" \
$PATCH_DIR /patchFindbugsWarnings.xml \
$PATCH_DIR /patchFindbugsWarnings.xml
2010-11-02 01:33:05 -04:00
findbugsWarnings = ` $FINDBUGS_HOME /bin/filterBugs -first "01/01/2000" $PATCH_DIR /patchFindbugsWarnings.xml \
2011-08-05 10:28:30 -04:00
$PATCH_DIR /newPatchFindbugsWarnings.xml | $AWK '{print $1}' `
2009-05-19 00:56:52 -04:00
$FINDBUGS_HOME /bin/convertXmlToText -html \
2011-08-02 12:37:57 -04:00
$PATCH_DIR /newPatchFindbugsWarnings.xml \
$PATCH_DIR /newPatchFindbugsWarnings.html
2010-11-02 01:33:05 -04:00
### if current warnings greater than OK_FINDBUGS_WARNINGS
if [ [ $findbugsWarnings > $OK_FINDBUGS_WARNINGS ] ] ; then
2009-05-19 00:56:52 -04:00
JIRA_COMMENT = " $JIRA_COMMENT
2010-11-18 19:44:11 -05:00
-1 findbugs. The patch appears to introduce ` expr $(( $findbugsWarnings - $OK_FINDBUGS_WARNINGS )) ` new Findbugs ( version ${ findbugs_version } ) warnings."
2009-05-19 00:56:52 -04:00
return 1
fi
JIRA_COMMENT = " $JIRA_COMMENT
2010-11-18 19:44:11 -05:00
+1 findbugs. The patch does not introduce any new Findbugs ( version ${ findbugs_version } ) warnings."
2009-05-19 00:56:52 -04:00
return 0
}
###############################################################################
### Run the test-core target
runCoreTests ( ) {
echo ""
echo ""
echo "======================================================================"
echo "======================================================================"
echo " Running core tests."
echo "======================================================================"
echo "======================================================================"
echo ""
echo ""
### Kill any rogue build processes from the last attempt
2011-08-05 10:28:30 -04:00
$PS auxwww | $GREP HadoopPatchProcess | $AWK '{print $2}' | /usr/bin/xargs -t -I { } /bin/kill -9 { } > /dev/null
2009-07-09 04:10:18 -04:00
PreTestTarget = ""
if [ [ $defect = = MAPREDUCE-* ] ] ; then
PreTestTarget = "create-c++-configure"
fi
2009-05-19 00:56:52 -04:00
2011-08-02 12:37:57 -04:00
#echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= -Dtest.junit.output.format=xml -Dtest.output=no -Dcompile.c++=yes -Dforrest.home=$FORREST_HOME $PreTestTarget test-core"
#$ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= -Dtest.junit.output.format=xml -Dtest.output=no -Dcompile.c++=yes -Dforrest.home=$FORREST_HOME $PreTestTarget test-core
2011-08-05 10:28:30 -04:00
$MVN clean test -Pnative -DHadoopPatchProcess
2009-05-19 00:56:52 -04:00
if [ [ $? != 0 ] ] ; then
2010-11-19 00:19:30 -05:00
### Find and format names of failed tests
2011-08-02 12:37:57 -04:00
failed_tests = ` grep -l -E "<failure|<error" $WORKSPACE /trunk/target/hadoop-common/surefire-reports/*.xml | sed -e "s|.*target/surefire-reports/TEST-| |g" | sed -e "s|\.xml||g" `
2009-05-19 00:56:52 -04:00
JIRA_COMMENT = " $JIRA_COMMENT
2010-11-18 19:44:11 -05:00
-1 core tests. The patch failed these core unit tests:
$failed_tests "
2009-05-19 00:56:52 -04:00
return 1
fi
JIRA_COMMENT = " $JIRA_COMMENT
+1 core tests. The patch passed core unit tests."
return 0
}
###############################################################################
### Run the test-contrib target
runContribTests ( ) {
echo ""
echo ""
echo "======================================================================"
echo "======================================================================"
echo " Running contrib tests."
echo "======================================================================"
echo "======================================================================"
echo ""
echo ""
2011-05-16 15:42:52 -04:00
if [ [ ` $GREP -c 'test-contrib' build.xml` = = 0 ] ] ; then
echo "No contrib tests in this project."
return 0
fi
2009-05-19 00:56:52 -04:00
### Kill any rogue build processes from the last attempt
2011-08-05 10:28:30 -04:00
$PS auxwww | $GREP HadoopPatchProcess | $AWK '{print $2}' | /usr/bin/xargs -t -I { } /bin/kill -9 { } > /dev/null
2009-05-19 00:56:52 -04:00
2011-08-02 12:37:57 -04:00
#echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" $ECLIPSE_PROPERTY -DHadoopPatchProcess= -Dtest.junit.output.format=xml -Dtest.output=no test-contrib"
#$ANT_HOME/bin/ant -Dversion="${VERSION}" $ECLIPSE_PROPERTY -DHadoopPatchProcess= -Dtest.junit.output.format=xml -Dtest.output=no test-contrib
echo "NOP"
2009-05-19 00:56:52 -04:00
if [ [ $? != 0 ] ] ; then
JIRA_COMMENT = " $JIRA_COMMENT
-1 contrib tests. The patch failed contrib unit tests."
return 1
fi
JIRA_COMMENT = " $JIRA_COMMENT
+1 contrib tests. The patch passed contrib unit tests."
return 0
}
2010-08-29 21:31:56 -04:00
###############################################################################
### Run the inject-system-faults target
checkInjectSystemFaults ( ) {
echo ""
echo ""
echo "======================================================================"
echo "======================================================================"
echo " Checking the integrity of system test framework code."
echo "======================================================================"
echo "======================================================================"
echo ""
echo ""
### Kill any rogue build processes from the last attempt
2011-08-05 10:28:30 -04:00
$PS auxwww | $GREP HadoopPatchProcess | $AWK '{print $2}' | /usr/bin/xargs -t -I { } /bin/kill -9 { } > /dev/null
2010-08-29 21:31:56 -04:00
2011-08-02 12:37:57 -04:00
#echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= -Dtest.junit.output.format=xml -Dtest.output=no -Dcompile.c++=yes -Dforrest.home=$FORREST_HOME inject-system-faults"
#$ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= -Dtest.junit.output.format=xml -Dtest.output=no -Dcompile.c++=yes -Dforrest.home=$FORREST_HOME inject-system-faults
echo "NOP"
2010-08-29 21:31:56 -04:00
if [ [ $? != 0 ] ] ; then
JIRA_COMMENT = " $JIRA_COMMENT
2010-11-02 01:33:05 -04:00
-1 system test framework. The patch failed system test framework compile."
2010-08-29 21:31:56 -04:00
return 1
fi
JIRA_COMMENT = " $JIRA_COMMENT
2010-11-02 01:33:05 -04:00
+1 system test framework. The patch passed system test framework compile."
2010-08-29 21:31:56 -04:00
return 0
}
2009-05-19 00:56:52 -04:00
###############################################################################
### Submit a comment to the defect's Jira
submitJiraComment ( ) {
local result = $1
### Do not output the value of JIRA_COMMENT_FOOTER when run by a developer
if [ [ $HUDSON = = "false" ] ] ; then
JIRA_COMMENT_FOOTER = ""
fi
if [ [ $result = = 0 ] ] ; then
comment = " +1 overall. $JIRA_COMMENT
$JIRA_COMMENT_FOOTER "
else
comment = " -1 overall. $JIRA_COMMENT
$JIRA_COMMENT_FOOTER "
fi
### Output the test result to the console
echo "
$comment "
if [ [ $HUDSON = = "true" ] ] ; then
echo ""
echo ""
echo "======================================================================"
echo "======================================================================"
echo " Adding comment to Jira."
echo "======================================================================"
echo "======================================================================"
echo ""
echo ""
### Update Jira with a comment
export USER = hudson
2010-04-14 23:08:09 -04:00
$JIRACLI -s https://issues.apache.org/jira -a addcomment -u hadoopqa -p $JIRA_PASSWD --comment " $comment " --issue $defect
$JIRACLI -s https://issues.apache.org/jira -a logout -u hadoopqa -p $JIRA_PASSWD
2009-05-19 00:56:52 -04:00
fi
}
###############################################################################
### Cleanup files
cleanupAndExit ( ) {
local result = $1
if [ [ $HUDSON = = "true" ] ] ; then
if [ -e " $PATCH_DIR " ] ; then
mv $PATCH_DIR $BASEDIR
fi
fi
echo ""
echo ""
echo "======================================================================"
echo "======================================================================"
echo " Finished build."
echo "======================================================================"
echo "======================================================================"
echo ""
echo ""
exit $result
}
###############################################################################
###############################################################################
###############################################################################
JIRA_COMMENT = ""
2010-10-25 14:59:28 -04:00
JIRA_COMMENT_FOOTER = " Console output: $BUILD_URL /console
2009-05-19 00:56:52 -04:00
This message is automatically generated."
### Check if arguments to the script have been specified properly or not
parseArgs $@
cd $BASEDIR
checkout
RESULT = $?
if [ [ $HUDSON = = "true" ] ] ; then
if [ [ $RESULT != 0 ] ] ; then
exit 100
fi
fi
setup
checkAuthor
RESULT = $?
2009-09-15 09:17:07 -04:00
if [ [ $HUDSON = = "true" ] ] ; then
cleanUpXml
fi
2009-11-03 17:53:08 -05:00
checkTests
2009-05-19 00:56:52 -04:00
( ( RESULT = RESULT + $? ) )
applyPatch
if [ [ $? != 0 ] ] ; then
submitJiraComment 1
cleanupAndExit 1
fi
checkJavadocWarnings
( ( RESULT = RESULT + $? ) )
checkJavacWarnings
( ( RESULT = RESULT + $? ) )
2010-11-02 01:33:05 -04:00
### Checkstyle not implemented yet
#checkStyle
#(( RESULT = RESULT + $? ))
2009-05-19 00:56:52 -04:00
checkFindbugsWarnings
( ( RESULT = RESULT + $? ) )
checkReleaseAuditWarnings
( ( RESULT = RESULT + $? ) )
### Do not call these when run by a developer
if [ [ $HUDSON = = "true" ] ] ; then
runCoreTests
( ( RESULT = RESULT + $? ) )
runContribTests
( ( RESULT = RESULT + $? ) )
fi
2010-08-29 21:31:56 -04:00
checkInjectSystemFaults
( ( RESULT = RESULT + $? ) )
2010-10-25 14:59:28 -04:00
JIRA_COMMENT_FOOTER = " Test results: $BUILD_URL /testReport/
2009-05-19 00:56:52 -04:00
$JIRA_COMMENT_FOOTER "
submitJiraComment $RESULT
cleanupAndExit $RESULT