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