test-patch.sh
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:28k
源码类别:

网格计算

开发平台:

Java

  1. #!/usr/bin/env bash
  2. #set -x
  3. ulimit -n 1024
  4. ### Setup some variables.  
  5. ### JOB_NAME, SVN_REVISION, and BUILD_NUMBER are set by Hudson if it is run by patch process
  6. ###############################################################################
  7. parseArgs() {
  8.   case "$1" in
  9.     HUDSON)
  10.       ### Set HUDSON to true to indicate that this script is being run by Hudson
  11.       HUDSON=true
  12.       if [[ $# != 17 ]] ; then
  13.         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> <PYTHON_HOME> <WORKSPACE_BASEDIR> <TRIGGER_BUILD> <JIRA_PASSWD> <JAVA5_HOME> "
  14.         cleanupAndExit 0
  15.       fi
  16.       PATCH_DIR=$2
  17.       SUPPORT_DIR=$3
  18.       PS=$4
  19.       WGET=$5
  20.       JIRACLI=$6
  21.       SVN=$7
  22.       GREP=$8
  23.       PATCH=$9
  24.       FINDBUGS_HOME=${10}
  25.       FORREST_HOME=${11}
  26.       ECLIPSE_HOME=${12}
  27.       PYTHON_HOME=${13}
  28.       BASEDIR=${14}
  29.       TRIGGER_BUILD_URL=${15}
  30.       JIRA_PASSWD=${16}
  31.       JAVA5_HOME=${17}
  32.       ### Retrieve the defect number
  33.       if [ ! -e $PATCH_DIR/defectNum ] ; then
  34.         echo "Could not determine the patch to test.  Exiting."
  35.         cleanupAndExit 0
  36.       fi
  37.       defect=`cat $PATCH_DIR/defectNum`
  38.       if [ -z "$defect" ] ; then
  39.         echo "Could not determine the patch to test.  Exiting."
  40.         cleanupAndExit 0
  41.       fi
  42.       ECLIPSE_PROPERTY="-Declipse.home=$ECLIPSE_HOME"
  43.       PYTHON_PROPERTY="-Dpython.home=$PYTHON_HOME"
  44.       ;;
  45.     DEVELOPER)
  46.       ### Set HUDSON to false to indicate that this script is being run by a developer
  47.       HUDSON=false
  48.       if [[ $# != 10 ]] ; then
  49.         echo "ERROR: usage $0 DEVELOPER <PATCH_FILE> <SCRATCH_DIR> <SVN_CMD> <GREP_CMD> <PATCH_CMD> <FINDBUGS_HOME> <FORREST_HOME> <WORKSPACE_BASEDIR> <JAVA5_HOME>"
  50.         cleanupAndExit 0
  51.       fi
  52.       ### PATCH_FILE contains the location of the patchfile
  53.       PATCH_FILE=$2 
  54.       if [[ ! -e "$PATCH_FILE" ]] ; then
  55.         echo "Unable to locate the patch file $PATCH_FILE"
  56.         cleanupAndExit 0
  57.       fi
  58.       PATCH_DIR=$3
  59.       ### Check if $PATCH_DIR exists. If it does not exist, create a new directory
  60.       if [[ ! -e "$PATCH_DIR" ]] ; then
  61. mkdir "$PATCH_DIR"
  62. if [[ $? == 0 ]] ; then 
  63.   echo "$PATCH_DIR has been created"
  64. else
  65.   echo "Unable to create $PATCH_DIR"
  66.   cleanupAndExit 0
  67. fi
  68.       fi
  69.       SVN=$4
  70.       GREP=$5
  71.       PATCH=$6
  72.       FINDBUGS_HOME=$7
  73.       FORREST_HOME=$8
  74.       BASEDIR=$9
  75.       JAVA5_HOME=$10
  76.       ### Obtain the patch filename to append it to the version number
  77.       defect=`basename $PATCH_FILE` 
  78.       ;;
  79.     *)
  80.       echo "ERROR: usage $0 HUDSON [args] | DEVELOPER [args]"
  81.       cleanupAndExit 0
  82.       ;;
  83.   esac
  84. }
  85. ###############################################################################
  86. checkout () {
  87.   echo ""
  88.   echo ""
  89.   echo "======================================================================"
  90.   echo "======================================================================"
  91.   echo "    Testing patch for ${defect}."
  92.   echo "======================================================================"
  93.   echo "======================================================================"
  94.   echo ""
  95.   echo ""
  96.   ### When run by a developer, if the workspace contains modifications, do not continue
  97.   status=`$SVN stat`
  98.   if [[ $HUDSON == "false" ]] ; then
  99.     if [[ "$status" != "" ]] ; then
  100.       echo "ERROR: can't run in a workspace that contains the following modifications"
  101.       echo "$status"
  102.       cleanupAndExit 1
  103.     fi
  104.   else   
  105.     cd $BASEDIR
  106.     $SVN revert -R .
  107.     rm -rf `$SVN status`
  108.     $SVN update
  109.   fi
  110.   return $?
  111. }
  112. ###############################################################################
  113. setup () {
  114.   ### Download latest patch file (ignoring .htm and .html) when run from patch process
  115.   if [[ $HUDSON == "true" ]] ; then
  116.     $WGET -q -O $PATCH_DIR/jira http://issues.apache.org/jira/browse/$defect
  117.     if [[ `$GREP -c 'Patch Available' $PATCH_DIR/jira` == 0 ]] ; then
  118.       echo "$defect is not "Patch Available".  Exiting."
  119.       cleanupAndExit 0
  120.     fi
  121.     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]*/[^"]*'`
  122.     patchURL="http://issues.apache.org${relativePatchURL}"
  123.     patchNum=`echo $patchURL | $GREP -o '[0-9]*/' | $GREP -o '[0-9]*'`
  124.     echo "$defect patch is being downloaded at `date` from"
  125.     echo "$patchURL"
  126.     $WGET -q -O $PATCH_DIR/patch $patchURL
  127.     VERSION=${SVN_REVISION}_${defect}_PATCH-${patchNum}
  128.     JIRA_COMMENT="Here are the results of testing the latest attachment 
  129.   $patchURL
  130.   against trunk revision ${SVN_REVISION}."
  131.     ### Copy in any supporting files needed by this process
  132.     cp -r $SUPPORT_DIR/lib/* ./lib
  133.     #PENDING: cp -f $SUPPORT_DIR/etc/checkstyle* ./src/test
  134.   ### Copy the patch file to $PATCH_DIR
  135.   else
  136.     VERSION=PATCH-${defect}
  137.     cp $PATCH_FILE $PATCH_DIR/patch
  138.     if [[ $? == 0 ]] ; then
  139.       echo "Patch file $PATCH_FILE copied to $PATCH_DIR"
  140.     else
  141.       echo "Could not copy $PATCH_FILE to $PATCH_DIR"
  142.       cleanupAndExit 0
  143.     fi
  144.   fi
  145.   echo ""
  146.   echo ""
  147.   echo "======================================================================"
  148.   echo "======================================================================"
  149.   echo "    Pre-building trunk to determine trunk number"
  150.   echo "    of release audit, javac, and Findbugs warnings."
  151.   echo "======================================================================"
  152.   echo "======================================================================"
  153.   echo ""
  154.   echo ""
  155.   ### DISABLE RELEASE AUDIT UNTIL HADOOP-4074 IS FIXED
  156.   ### Do not call releaseaudit when run by a developer
  157.   ### if [[ $HUDSON == "true" ]] ; then
  158.     ### echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= releaseaudit > $PATCH_DIR/trunkReleaseAuditWarnings.txt 2>&1"
  159.     ### $ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= releaseaudit > $PATCH_DIR/trunkReleaseAuditWarnings.txt 2>&1
  160.   ### fi
  161.   echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" -Djavac.args="-Xlint -Xmaxwarns 1000" $ECLIPSE_PROPERTY -DHadoopPatchProcess= clean tar > $PATCH_DIR/trunkJavacWarnings.txt 2>&1"
  162.   $ANT_HOME/bin/ant -Dversion="${VERSION}" -Djavac.args="-Xlint -Xmaxwarns 1000" $ECLIPSE_PROPERTY -DHadoopPatchProcess= clean tar > $PATCH_DIR/trunkJavacWarnings.txt 2>&1
  163.   if [[ $? != 0 ]] ; then
  164.     echo "Trunk compilation is broken?"
  165.     cleanupAndExit 1
  166.   fi
  167.   echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" -Dfindbugs.home=$FINDBUGS_HOME -DHadoopPatchProcess= findbugs > /dev/null 2>&1"
  168.   $ANT_HOME/bin/ant -Dversion="${VERSION}" -Dfindbugs.home=$FINDBUGS_HOME -DHadoopPatchProcess= findbugs > /dev/null 2>&1
  169.   if [[ $? != 0 ]] ; then
  170.     echo "Trunk findbugs is broken?"
  171.     cleanupAndExit 1
  172.   fi
  173.   cp $BASEDIR/build/test/findbugs/*.xml $PATCH_DIR/trunkFindbugsWarnings.xml
  174. }
  175. ###############################################################################
  176. ### Check for @author tags in the patch
  177. checkAuthor () {
  178.   echo ""
  179.   echo ""
  180.   echo "======================================================================"
  181.   echo "======================================================================"
  182.   echo "    Checking there are no @author tags in the patch."
  183.   echo "======================================================================"
  184.   echo "======================================================================"
  185.   echo ""
  186.   echo ""
  187.   authorTags=`$GREP -c -i '@author' $PATCH_DIR/patch`
  188.   echo "There appear to be $authorTags @author tags in the patch."
  189.   if [[ $authorTags != 0 ]] ; then
  190.     JIRA_COMMENT="$JIRA_COMMENT
  191.     -1 @author.  The patch appears to contain $authorTags @author tags which the Hadoop community has agreed to not allow in code contributions."
  192.     return 1
  193.   fi
  194.   JIRA_COMMENT="$JIRA_COMMENT
  195.     +1 @author.  The patch does not contain any @author tags."
  196.   return 0
  197. }
  198. ###############################################################################
  199. ### Check for tests in the patch
  200. checkTests () {
  201.   echo ""
  202.   echo ""
  203.   echo "======================================================================"
  204.   echo "======================================================================"
  205.   echo "    Checking there are new or changed tests in the patch."
  206.   echo "======================================================================"
  207.   echo "======================================================================"
  208.   echo ""
  209.   echo ""
  210.   testReferences=`$GREP -c -i '/test' $PATCH_DIR/patch`
  211.   echo "There appear to be $testReferences test files referenced in the patch."
  212.   if [[ $testReferences == 0 ]] ; then
  213.     if [[ $HUDSON == "true" ]] ; then
  214.       patchIsDoc=`$GREP -c -i 'title="documentation' $PATCH_DIR/jira`
  215.       if [[ $patchIsDoc != 0 ]] ; then
  216.         echo "The patch appears to be a documentation patch that doesn't require tests."
  217.         JIRA_COMMENT="$JIRA_COMMENT
  218.     +0 tests included.  The patch appears to be a documentation patch that doesn't require tests."
  219.         return 0
  220.       fi
  221.     fi
  222.     JIRA_COMMENT="$JIRA_COMMENT
  223.     -1 tests included.  The patch doesn't appear to include any new or modified tests.
  224.                         Please justify why no tests are needed for this patch."
  225.     return 1
  226.   fi
  227.   JIRA_COMMENT="$JIRA_COMMENT
  228.     +1 tests included.  The patch appears to include $testReferences new or modified tests."
  229.   return 0
  230. }
  231. ###############################################################################
  232. ### Attempt to apply the patch
  233. applyPatch () {
  234.   echo ""
  235.   echo ""
  236.   echo "======================================================================"
  237.   echo "======================================================================"
  238.   echo "    Applying patch."
  239.   echo "======================================================================"
  240.   echo "======================================================================"
  241.   echo ""
  242.   echo ""
  243.   $PATCH -E -p0 < $PATCH_DIR/patch
  244.   if [[ $? != 0 ]] ; then
  245.     echo "PATCH APPLICATION FAILED"
  246.     JIRA_COMMENT="$JIRA_COMMENT
  247.     -1 patch.  The patch command could not apply the patch."
  248.     return 1
  249.   fi
  250.   return 0
  251. }
  252. ###############################################################################
  253. ### Check there are no javadoc warnings
  254. checkJavadocWarnings () {
  255.   echo ""
  256.   echo ""
  257.   echo "======================================================================"
  258.   echo "======================================================================"
  259.   echo "    Determining number of patched javadoc warnings."
  260.   echo "======================================================================"
  261.   echo "======================================================================"
  262.   echo ""
  263.   echo ""
  264.   echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= clean javadoc | tee $PATCH_DIR/patchJavadocWarnings.txt"
  265.   $ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= clean javadoc | tee $PATCH_DIR/patchJavadocWarnings.txt
  266.   javadocWarnings=`$GREP -c '[javadoc] [0-9]* warning' $PATCH_DIR/patchJavadocWarnings.txt`
  267.   echo ""
  268.   echo ""
  269.   echo "There appear to be $javadocWarnings javadoc warnings generated by the patched build."
  270.   if [[ $javadocWarnings != 0 ]] ; then
  271.     JIRA_COMMENT="$JIRA_COMMENT
  272.     -1 javadoc.  The javadoc tool appears to have generated $javadocWarnings warning messages."
  273.     return 1
  274.   fi
  275.   JIRA_COMMENT="$JIRA_COMMENT
  276.     +1 javadoc.  The javadoc tool did not generate any warning messages."
  277. return 0
  278. }
  279. ###############################################################################
  280. ### Check there are no changes in the number of Javac warnings
  281. checkJavacWarnings () {
  282.   echo ""
  283.   echo ""
  284.   echo "======================================================================"
  285.   echo "======================================================================"
  286.   echo "    Determining number of patched javac warnings."
  287.   echo "======================================================================"
  288.   echo "======================================================================"
  289.   echo ""
  290.   echo ""
  291.   echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" -Djavac.args="-Xlint -Xmaxwarns 1000" $ECLIPSE_PROPERTY -DHadoopPatchProcess= tar > $PATCH_DIR/patchJavacWarnings.txt 2>&1"
  292.   $ANT_HOME/bin/ant -Dversion="${VERSION}" -Djavac.args="-Xlint -Xmaxwarns 1000" $ECLIPSE_PROPERTY -DHadoopPatchProcess= tar > $PATCH_DIR/patchJavacWarnings.txt 2>&1
  293.   ### Compare trunk and patch javac warning numbers
  294.   if [[ -f $PATCH_DIR/patchJavacWarnings.txt ]] ; then
  295.     trunkJavacWarnings=`$GREP -o '[javac] [0-9]* warning' $PATCH_DIR/trunkJavacWarnings.txt | awk '{total += $2} END {print total}'`
  296.     patchJavacWarnings=`$GREP -o '[javac] [0-9]* warning' $PATCH_DIR/patchJavacWarnings.txt | awk '{total += $2} END {print total}'`
  297.     echo "There appear to be $trunkJavacWarnings javac compiler warnings before the patch and $patchJavacWarnings javac compiler warnings after applying the patch."
  298.     if [[ $patchJavacWarnings != "" && $trunkJavacWarnings != "" ]] ; then
  299.       if [[ $patchJavacWarnings > $trunkJavacWarnings ]] ; then
  300.         JIRA_COMMENT="$JIRA_COMMENT
  301.     -1 javac.  The applied patch generated $patchJavacWarnings javac compiler warnings (more than the trunk's current $trunkJavacWarnings warnings)."
  302.         return 1
  303.       fi
  304.     fi
  305.   fi
  306.   JIRA_COMMENT="$JIRA_COMMENT
  307.     +1 javac.  The applied patch does not increase the total number of javac compiler warnings."
  308.   return 0
  309. }
  310. ###############################################################################
  311. ### Check there are no changes in the number of release audit (RAT) warnings
  312. checkReleaseAuditWarnings () {
  313.   echo ""
  314.   echo ""
  315.   echo "======================================================================"
  316.   echo "======================================================================"
  317.   echo "    Determining number of patched release audit warnings."
  318.   echo "======================================================================"
  319.   echo "======================================================================"
  320.   echo ""
  321.   echo ""
  322.   echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= releaseaudit > $PATCH_DIR/patchReleaseAuditWarnings.txt 2>&1"
  323.   $ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= releaseaudit > $PATCH_DIR/patchReleaseAuditWarnings.txt 2>&1
  324.   ### Compare trunk and patch release audit warning numbers
  325.   if [[ -f $PATCH_DIR/patchReleaseAuditWarnings.txt ]] ; then
  326.     trunkReleaseAuditWarnings=`$GREP -c '!?????' $PATCH_DIR/trunkReleaseAuditWarnings.txt`
  327.     patchReleaseAuditWarnings=`$GREP -c '!?????' $PATCH_DIR/patchReleaseAuditWarnings.txt`
  328.     echo ""
  329.     echo ""
  330.     echo "There appear to be $trunkReleaseAuditWarnings release audit warnings before the patch and $patchReleaseAuditWarnings release audit warnings after applying the patch."
  331.     if [[ $patchReleaseAuditWarnings != "" && $trunkReleaseAuditWarnings != "" ]] ; then
  332.       if [[ $patchReleaseAuditWarnings > $trunkReleaseAuditWarnings ]] ; then
  333.         JIRA_COMMENT="$JIRA_COMMENT
  334.     -1 release audit.  The applied patch generated $patchReleaseAuditWarnings release audit warnings (more than the trunk's current $trunkReleaseAuditWarnings warnings)."
  335.         $GREP '!?????' $PATCH_DIR/patchReleaseAuditWarnings.txt > $PATCH_DIR/patchReleaseAuditProblems.txt
  336.         $GREP '!?????' $PATCH_DIR/trunkReleaseAuditWarnings.txt > $PATCH_DIR/trunkReleaseAuditProblems.txt
  337.         echo "A diff of patched release audit warnings with trunk release audit warnings." > $PATCH_DIR/releaseAuditDiffWarnings.txt
  338.         echo "Lines that start with ????? in the release audit report indicate files that do not have an Apache license header." > $PATCH_DIR/releaseAuditDiffWarnings.txt
  339.         echo "" > $PATCH_DIR/releaseAuditDiffWarnings.txt
  340.         diff $PATCH_DIR/patchReleaseAuditProblems.txt $PATCH_DIR/trunkReleaseAuditProblems.txt >> $PATCH_DIR/releaseAuditDiffWarnings.txt
  341.         JIRA_COMMENT_FOOTER="Release audit warnings: http://hudson.zones.apache.org/hudson/job/$JOB_NAME/$BUILD_NUMBER/artifact/trunk/current/releaseAuditDiffWarnings.txt
  342. $JIRA_COMMENT_FOOTER"
  343.         return 1
  344.       fi
  345.     fi
  346.   fi
  347.   JIRA_COMMENT="$JIRA_COMMENT
  348.     +1 release audit.  The applied patch does not increase the total number of release audit warnings."
  349.   return 0
  350. }
  351. ###############################################################################
  352. ### Check there are no changes in the number of Checkstyle warnings
  353. checkStyle () {
  354.   echo ""
  355.   echo ""
  356.   echo "======================================================================"
  357.   echo "======================================================================"
  358.   echo "    Determining number of patched checkstyle warnings."
  359.   echo "======================================================================"
  360.   echo "======================================================================"
  361.   echo ""
  362.   echo ""
  363.   echo "THIS IS NOT IMPLEMENTED YET"
  364.   echo ""
  365.   echo ""
  366.   echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= checkstyle"
  367.   $ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= checkstyle
  368.   JIRA_COMMENT_FOOTER="Checkstyle results: http://hudson.zones.apache.org/hudson/job/$JOB_NAME/$BUILD_NUMBER/artifact/trunk/build/test/checkstyle-errors.html
  369. $JIRA_COMMENT_FOOTER"
  370.   ### TODO: calculate actual patchStyleErrors
  371. #  patchStyleErrors=0
  372. #  if [[ $patchStyleErrors != 0 ]] ; then
  373. #    JIRA_COMMENT="$JIRA_COMMENT
  374. #
  375. #    -1 checkstyle.  The patch generated $patchStyleErrors code style errors."
  376. #    return 1
  377. #  fi
  378. #  JIRA_COMMENT="$JIRA_COMMENT
  379. #
  380. #    +1 checkstyle.  The patch generated 0 code style errors."
  381.   return 0
  382. }
  383. ###############################################################################
  384. ### Check there are no changes in the number of Findbugs warnings
  385. checkFindbugsWarnings () {
  386.   echo ""
  387.   echo ""
  388.   echo "======================================================================"
  389.   echo "======================================================================"
  390.   echo "    Determining number of patched Findbugs warnings."
  391.   echo "======================================================================"
  392.   echo "======================================================================"
  393.   echo ""
  394.   echo ""
  395.   echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" -Dfindbugs.home=$FINDBUGS_HOME -DHadoopPatchProcess= findbugs"
  396.   $ANT_HOME/bin/ant -Dversion="${VERSION}" -Dfindbugs.home=$FINDBUGS_HOME -DHadoopPatchProcess= findbugs
  397.   if [ $? != 0 ] ; then
  398.     JIRA_COMMENT="$JIRA_COMMENT
  399.     -1 findbugs.  The patch appears to cause Findbugs to fail."
  400.     return 1
  401.   fi
  402. JIRA_COMMENT_FOOTER="Findbugs warnings: http://hudson.zones.apache.org/hudson/job/$JOB_NAME/$BUILD_NUMBER/artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html
  403. $JIRA_COMMENT_FOOTER"
  404.   cp $BASEDIR/build/test/findbugs/*.xml $PATCH_DIR/patchFindbugsWarnings.xml
  405. $FINDBUGS_HOME/bin/setBugDatabaseInfo -timestamp "01/01/1999" 
  406.     $PATCH_DIR/trunkFindbugsWarnings.xml 
  407.     $PATCH_DIR/trunkFindbugsWarnings.xml
  408.   $FINDBUGS_HOME/bin/setBugDatabaseInfo -timestamp "01/01/2000" 
  409.     $PATCH_DIR/patchFindbugsWarnings.xml 
  410.     $PATCH_DIR/patchFindbugsWarnings.xml
  411.   $FINDBUGS_HOME/bin/computeBugHistory -output $PATCH_DIR/findbugsMerge.xml 
  412.     $PATCH_DIR/trunkFindbugsWarnings.xml 
  413.     $PATCH_DIR/patchFindbugsWarnings.xml
  414.   findbugsWarnings=`$FINDBUGS_HOME/bin/filterBugs -first "01/01/2000" $PATCH_DIR/findbugsMerge.xml 
  415.     $BASEDIR/build/test/findbugs/newPatchFindbugsWarnings.xml | /usr/bin/awk '{print $1}'`
  416.   $FINDBUGS_HOME/bin/convertXmlToText -html 
  417.     $BASEDIR/build/test/findbugs/newPatchFindbugsWarnings.xml 
  418.     $BASEDIR/build/test/findbugs/newPatchFindbugsWarnings.html
  419.   cp $BASEDIR/build/test/findbugs/newPatchFindbugsWarnings.html $PATCH_DIR/newPatchFindbugsWarnings.html
  420.   cp $BASEDIR/build/test/findbugs/newPatchFindbugsWarnings.xml $PATCH_DIR/newPatchFindbugsWarnings.xml
  421.   if [[ $findbugsWarnings != 0 ]] ; then
  422.     JIRA_COMMENT="$JIRA_COMMENT
  423.     -1 findbugs.  The patch appears to introduce $findbugsWarnings new Findbugs warnings."
  424.     return 1
  425.   fi
  426.   JIRA_COMMENT="$JIRA_COMMENT
  427.     +1 findbugs.  The patch does not introduce any new Findbugs warnings."
  428.   return 0
  429. }
  430. ###############################################################################
  431. ### Run the test-core target
  432. runCoreTests () {
  433.   echo ""
  434.   echo ""
  435.   echo "======================================================================"
  436.   echo "======================================================================"
  437.   echo "    Running core tests."
  438.   echo "======================================================================"
  439.   echo "======================================================================"
  440.   echo ""
  441.   echo ""
  442.   
  443.   ### Kill any rogue build processes from the last attempt
  444.   $PS -auxwww | $GREP HadoopPatchProcess | /usr/bin/nawk '{print $2}' | /usr/bin/xargs -t -I {} /usr/bin/kill -9 {} > /dev/null
  445.   echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= -Dtest.junit.output.format=xml -Dtest.output=yes -Dcompile.c++=yes -Dforrest.home=$FORREST_HOME -Djava5.home=$JAVA5_HOME create-c++-configure docs tar test-core"
  446.   $ANT_HOME/bin/ant -Dversion="${VERSION}" -DHadoopPatchProcess= -Dtest.junit.output.format=xml -Dtest.output=yes -Dcompile.c++=yes -Dforrest.home=$FORREST_HOME -Djava5.home=$JAVA5_HOME create-c++-configure docs tar test-core
  447.   if [[ $? != 0 ]] ; then
  448.     JIRA_COMMENT="$JIRA_COMMENT
  449.     -1 core tests.  The patch failed core unit tests."
  450.     return 1
  451.   fi
  452.   JIRA_COMMENT="$JIRA_COMMENT
  453.     +1 core tests.  The patch passed core unit tests."
  454.   return 0
  455. }
  456. ###############################################################################
  457. ### Tests parts of contrib specific to the eclipse files
  458. checkJarFilesDeclaredInEclipse () {
  459.   export DECLARED_JARS=$(sed -n 's@.*kind="lib".*path="(.*jar)".*@1@p' < .eclipse.templates/.classpath)
  460.   export PRESENT_JARS=$(find build/ivy/lib/Hadoop/common/ lib/ src/test/lib/ -name '*.jar' |sort)
  461.   # When run by Hudson, consider libs from ${SUPPORT_DIR} declared
  462.   if [[ ${HUDSON} == "true" ]]; then
  463.       DECLARED_JARS="${DECLARED_JARS} $(cd "${SUPPORT_DIR}"; find lib -name '*.jar')"
  464.   fi
  465.   DECLARED_JARS=$(sed 'y/ /n/' <<< ${DECLARED_JARS} | sort)
  466.   export ECLIPSE_DECLARED_SRC=$(sed -n 's@.*kind="src".*path="(.*)".*@1@p' < .eclipse.templates/.classpath |sort)
  467.   if [ "${DECLARED_JARS}" != "${PRESENT_JARS}" ]; then
  468.     echo "
  469. FAILED. Some jars are not declared in the Eclipse project.
  470.   Declared jars: ${DECLARED_JARS}
  471.   Present jars:  ${PRESENT_JARS}"
  472.     return 1
  473.   fi
  474.   for dir in $ECLIPSE_DECLARED_SRC; do
  475.     [ '!' -d $dir ] && echo "
  476. FAILED: $dir is referenced in the Eclipse project although it doesn't exists anymore." && return 1
  477.   done
  478.   return 0
  479. }
  480. checkEclipse () {
  481.   echo ""
  482.   echo ""
  483.   echo "======================================================================"
  484.   echo "======================================================================"
  485.   echo "    Running Eclipse classpath verification."
  486.   echo "======================================================================"
  487.   echo "======================================================================"
  488.   echo ""
  489.   echo ""
  490.   checkJarFilesDeclaredInEclipse
  491.   if [[ $? != 0 ]] ; then
  492.     JIRA_COMMENT="$JIRA_COMMENT
  493.     -1 Eclipse classpath. The patch causes the Eclipse classpath to differ from the contents of the lib directories."
  494.     return 1
  495.   fi
  496.   JIRA_COMMENT="$JIRA_COMMENT
  497.     +1 Eclipse classpath. The patch retains Eclipse classpath integrity."
  498.   return 0
  499. }
  500. ###############################################################################
  501. ### Run the test-contrib target
  502. runContribTests () {
  503.   echo ""
  504.   echo ""
  505.   echo "======================================================================"
  506.   echo "======================================================================"
  507.   echo "    Running contrib tests."
  508.   echo "======================================================================"
  509.   echo "======================================================================"
  510.   echo ""
  511.   echo ""
  512.   ### Kill any rogue build processes from the last attempt
  513.   $PS -auxwww | $GREP HadoopPatchProcess | /usr/bin/nawk '{print $2}' | /usr/bin/xargs -t -I {} /usr/bin/kill -9 {} > /dev/null
  514.   echo "$ANT_HOME/bin/ant -Dversion="${VERSION}" $ECLIPSE_PROPERTY $PYTHON_PROPERTY -DHadoopPatchProcess= -Dtest.junit.output.format=xml -Dtest.output=yes test-contrib"
  515.   $ANT_HOME/bin/ant -Dversion="${VERSION}" $ECLIPSE_PROPERTY $PYTHON_PROPERTY -DHadoopPatchProcess= -Dtest.junit.output.format=xml -Dtest.output=yes test-contrib
  516.   if [[ $? != 0 ]] ; then
  517.     JIRA_COMMENT="$JIRA_COMMENT
  518.     -1 contrib tests.  The patch failed contrib unit tests."
  519.     return 1
  520.   fi
  521.   JIRA_COMMENT="$JIRA_COMMENT
  522.     +1 contrib tests.  The patch passed contrib unit tests."
  523.   return 0
  524. }
  525. ###############################################################################
  526. ### Submit a comment to the defect's Jira
  527. submitJiraComment () {
  528.   local result=$1
  529.   ### Do not output the value of JIRA_COMMENT_FOOTER when run by a developer
  530.   if [[  $HUDSON == "false" ]] ; then
  531.     JIRA_COMMENT_FOOTER=""
  532.   fi
  533.   if [[ $result == 0 ]] ; then
  534.     comment="+1 overall.  $JIRA_COMMENT
  535. $JIRA_COMMENT_FOOTER"
  536.   else
  537.     comment="-1 overall.  $JIRA_COMMENT
  538. $JIRA_COMMENT_FOOTER"
  539.   fi
  540.   ### Output the test result to the console
  541.   echo "
  542. $comment"  
  543.   if [[ $HUDSON == "true" ]] ; then
  544.     echo ""
  545.     echo ""
  546.     echo "======================================================================"
  547.     echo "======================================================================"
  548.     echo "    Adding comment to Jira."
  549.     echo "======================================================================"
  550.     echo "======================================================================"
  551.     echo ""
  552.     echo ""
  553.     ### Update Jira with a comment
  554.     export USER=hudson
  555.     $JIRACLI -s issues.apache.org/jira login hadoopqa $JIRA_PASSWD
  556.     $JIRACLI -s issues.apache.org/jira comment $defect "$comment"
  557.     $JIRACLI -s issues.apache.org/jira logout
  558.   fi
  559. }
  560. ###############################################################################
  561. ### Cleanup files
  562. cleanupAndExit () {
  563.   local result=$1
  564.   if [[ $HUDSON == "true" ]] ; then
  565.     if [ -e "$PATCH_DIR" ] ; then
  566.       mv $PATCH_DIR $BASEDIR
  567.     fi
  568.   fi
  569.   echo ""
  570.   echo ""
  571.   echo "======================================================================"
  572.   echo "======================================================================"
  573.   echo "    Finished build."
  574.   echo "======================================================================"
  575.   echo "======================================================================"
  576.   echo ""
  577.   echo ""
  578.   exit $result
  579. }
  580. ###############################################################################
  581. ###############################################################################
  582. ###############################################################################
  583. JIRA_COMMENT=""
  584. JIRA_COMMENT_FOOTER="Console output: http://hudson.zones.apache.org/hudson/job/$JOB_NAME/$BUILD_NUMBER/console
  585. This message is automatically generated."
  586. ### Check if arguments to the script have been specified properly or not
  587. parseArgs $@
  588. cd $BASEDIR
  589. checkout
  590. RESULT=$?
  591. if [[ $HUDSON == "true" ]] ; then
  592.   if [[ $RESULT != 0 ]] ; then
  593.     ### Resubmit build.
  594.     $WGET -q -O $PATCH_DIR/build $TRIGGER_BUILD_URL
  595.     exit 100
  596.   fi
  597. fi
  598. setup
  599. checkAuthor
  600. RESULT=$?
  601. checkTests
  602. (( RESULT = RESULT + $? ))
  603. applyPatch
  604. if [[ $? != 0 ]] ; then
  605.   submitJiraComment 1
  606.   cleanupAndExit 1
  607. fi
  608. checkJavadocWarnings
  609. (( RESULT = RESULT + $? ))
  610. checkJavacWarnings
  611. (( RESULT = RESULT + $? ))
  612. checkStyle
  613. (( RESULT = RESULT + $? ))
  614. checkFindbugsWarnings
  615. (( RESULT = RESULT + $? ))
  616. checkEclipse
  617. (( RESULT = RESULT + $? ))
  618. ### Do not call these when run by a developer 
  619. if [[ $HUDSON == "true" ]] ; then
  620.   ### DISABLE RELEASE AUDIT UNTIL HADOOP-4074 IS FIXED
  621.   ### checkReleaseAuditWarnings
  622.   ### (( RESULT = RESULT + $? ))
  623.   runCoreTests
  624.   (( RESULT = RESULT + $? ))
  625.   runContribTests
  626.   (( RESULT = RESULT + $? ))
  627. fi
  628. JIRA_COMMENT_FOOTER="Test results: http://hudson.zones.apache.org/hudson/job/$JOB_NAME/$BUILD_NUMBER/testReport/
  629. $JIRA_COMMENT_FOOTER"
  630. submitJiraComment $RESULT
  631. cleanupAndExit $RESULT