xref: /Lucene/dev-tools/test-patch/lucene-solr-yetus-personality.sh (revision 51a6bec48d0bf6d9b972c69ba87a12ac44f485e4)
112372530SSteve Rowe#!/usr/bin/env bash
212372530SSteve Rowe# Licensed to the Apache Software Foundation (ASF) under one or more
312372530SSteve Rowe# contributor license agreements.  See the NOTICE file distributed with
412372530SSteve Rowe# this work for additional information regarding copyright ownership.
512372530SSteve Rowe# The ASF licenses this file to You under the Apache License, Version 2.0
612372530SSteve Rowe# (the "License"); you may not use this file except in compliance with
712372530SSteve Rowe# the License.  You may obtain a copy of the License at
812372530SSteve Rowe#
912372530SSteve Rowe#     http://www.apache.org/licenses/LICENSE-2.0
1012372530SSteve Rowe#
1112372530SSteve Rowe# Unless required by applicable law or agreed to in writing, software
1212372530SSteve Rowe# distributed under the License is distributed on an "AS IS" BASIS,
1312372530SSteve Rowe# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1412372530SSteve Rowe# See the License for the specific language governing permissions and
1512372530SSteve Rowe# limitations under the License.
1612372530SSteve Rowe
1712372530SSteve Rowe# This is a Yetus precommit "personality" (aka customized configuration) for Lucene/Solr.
1812372530SSteve Rowe#
1912372530SSteve Rowe# See the Yetus precommit documentation at https://yetus.apache.org/documentation/0.7.0/
2012372530SSteve Rowe# and especially https://yetus.apache.org/documentation/0.7.0/precommit-advanced/.
2112372530SSteve Rowe# See also the Yetus source code for other projects' personality examples at
2212372530SSteve Rowe# https://git-wip-us.apache.org/repos/asf?p=yetus.git;f=precommit/personality;a=tree;hb=HEAD
2312372530SSteve Rowe#
2412372530SSteve Rowe# To add a new validation method (aka "plugin"):
2512372530SSteve Rowe#   1) Add its name to the PLUGIN_LIST below
2612372530SSteve Rowe#   2) Invoke "add_test_type" with it below
2712372530SSteve Rowe#   3) Add a "<plugin>_filefilter" function to decide whether the plugin needs to be run based on changed files
2812372530SSteve Rowe#   4) Add a "<plugin>_rebuild" function to call out to ant to perform the validation method.
2912372530SSteve Rowe# See examples of the above-described function types ^^ below.
3012372530SSteve Rowe
31ac9559d7SSteve Rowe# Both compile+javac plugins are required, as well as unit+junit: in both cases, neither work individually
32ac9559d7SSteve RowePLUGIN_LIST="ant,jira,compile,javac,unit,junit,test4tests"
33cc1ad49eSSteve RowePLUGIN_LIST+=",testoutput,checkluceneversion,ratsources,checkforbiddenapis,checklicenses"
34cc1ad49eSSteve RowePLUGIN_LIST+=",validatesourcepatterns,validaterefguide"
3512372530SSteve Rowepersonality_plugins "${PLUGIN_LIST}"
3612372530SSteve Rowe
3712372530SSteve Roweadd_test_type "checkluceneversion"
3812372530SSteve Roweadd_test_type "ratsources"
3912372530SSteve Roweadd_test_type "checkforbiddenapis"
4012372530SSteve Roweadd_test_type "checklicenses"
4112372530SSteve Roweadd_test_type "validatesourcepatterns"
4212372530SSteve Roweadd_test_type "validaterefguide"
4312372530SSteve Rowe
4412372530SSteve Roweadd_test_format "testoutput"
4512372530SSteve Rowe
4612372530SSteve Rowe## @description  Globals specific to this personality
4712372530SSteve Rowe## @audience     private
4812372530SSteve Rowe## @stability    evolving
4912372530SSteve Rowefunction personality_globals
5012372530SSteve Rowe{
5112372530SSteve Rowe  #shellcheck disable=SC2034
5212372530SSteve Rowe  PATCH_BRANCH_DEFAULT=master
5312372530SSteve Rowe  #shellcheck disable=SC2034
5412372530SSteve Rowe  JIRA_ISSUE_RE='^(LUCENE|SOLR)-[0-9]+$'
5512372530SSteve Rowe  #shellcheck disable=SC2034
5612372530SSteve Rowe  JIRA_STATUS_RE='Patch Available'
5712372530SSteve Rowe  #shellcheck disable=SC2034
5812372530SSteve Rowe  GITHUB_REPO="apache/lucene-solr"
5912372530SSteve Rowe  #shellcheck disable=SC2034
6012372530SSteve Rowe  BUILDTOOL=ant
6112372530SSteve Rowe}
6212372530SSteve Rowe
6312372530SSteve Rowe## @description  Queue up modules for this personality
6412372530SSteve Rowe## @audience     private
6512372530SSteve Rowe## @stability    evolving
6612372530SSteve Rowe## @param        repostatus
6712372530SSteve Rowe## @param        testtype
6812372530SSteve Rowefunction personality_modules
6912372530SSteve Rowe{
7012372530SSteve Rowe  local repostatus=$1
7112372530SSteve Rowe  local testtype=$2
7212372530SSteve Rowe
7312372530SSteve Rowe  local module
7412372530SSteve Rowe  local extra
7512372530SSteve Rowe
7612372530SSteve Rowe  local moduleType="submodules"
7712372530SSteve Rowe
7812372530SSteve Rowe  yetus_debug "Personality (lucene-solr): ${repostatus} ${testtype}"
7912372530SSteve Rowe
8012372530SSteve Rowe  clear_personality_queue
8112372530SSteve Rowe
8212372530SSteve Rowe  case ${testtype} in
8312372530SSteve Rowe    clean|distclean|validatesourcepatterns)
8412372530SSteve Rowe      moduleType="top"
8512372530SSteve Rowe      ;;
8612372530SSteve Rowe    checkluceneversion)
8712372530SSteve Rowe      moduleType="solr"
8812372530SSteve Rowe      ;;
8912372530SSteve Rowe    ratsources)
9012372530SSteve Rowe      moduleType="submodules"
9112372530SSteve Rowe      ;;
9212372530SSteve Rowe    checkforbiddenapis)
9312372530SSteve Rowe      moduleType="both"
9412372530SSteve Rowe      ;;
9512372530SSteve Rowe    checklicenses)
9612372530SSteve Rowe      moduleType="mains"
9712372530SSteve Rowe      ;;
9812372530SSteve Rowe    validaterefguide)
9912372530SSteve Rowe      moduleType="solr-ref-guide"
10012372530SSteve Rowe      ;;
10112372530SSteve Rowe    compile)
10212372530SSteve Rowe      moduleType="submodules"
10312372530SSteve Rowe      extra="compile-test"
10412372530SSteve Rowe      ;;
10512372530SSteve Rowe    junit|unit)
10612372530SSteve Rowe      moduleType="submodules"
10712372530SSteve Rowe      extra="test"
10812372530SSteve Rowe      ;;
10912372530SSteve Rowe    *)
11012372530SSteve Rowe      ;;
11112372530SSteve Rowe  esac
11212372530SSteve Rowe
11312372530SSteve Rowe  case ${moduleType} in
11412372530SSteve Rowe    submodules)
11512372530SSteve Rowe      for module in "${CHANGED_MODULES[@]}"; do
116298063eeSSteve Rowe        if [[ ! "${module}" =~ ^lucene/(licenses|site) ]]; then # blacklist lucene/ dirs that aren't modules
117298063eeSSteve Rowe          if [[ "${module}" =~ ^(lucene/(analysis/[^/]+|[^/]+)) ]]; then
118298063eeSSteve Rowe            local lucene_module=${BASH_REMATCH[0]}
119298063eeSSteve Rowe            personality_enqueue_module "${lucene_module}" "${extra}"
120298063eeSSteve Rowe          elif [[ "${module}" =~ ^solr/(core|solrj|test-framework|solr-ref-guide|contrib/[^.]+) ]]; then # whitelist solr/ modules
121298063eeSSteve Rowe            local solr_module=${BASH_REMATCH[0]}
122298063eeSSteve Rowe            # In solr-ref-guide module, do not execute "compile" or "unit" plugins
123298063eeSSteve Rowe            if [[ ! "${solr_module}" == solr/solr-ref-guide || ! ${testtype} =~ ^(compile|unit)$ ]]; then
124298063eeSSteve Rowe              personality_enqueue_module "${solr_module}" "${extra}"
125298063eeSSteve Rowe            fi
12612372530SSteve Rowe          fi
12712372530SSteve Rowe        fi
12812372530SSteve Rowe      done
12912372530SSteve Rowe      ;;
13012372530SSteve Rowe    lucene|solr)
131298063eeSSteve Rowe      personality_enqueue_module "${moduleType}" "${extra}"
13212372530SSteve Rowe      ;;
13312372530SSteve Rowe    top)
134298063eeSSteve Rowe      personality_enqueue_module . "${extra}"
13512372530SSteve Rowe      ;;
13612372530SSteve Rowe    mains)
137298063eeSSteve Rowe      personality_enqueue_module "lucene" "${extra}"
138298063eeSSteve Rowe      personality_enqueue_module "solr" "${extra}"
13912372530SSteve Rowe      ;;
14012372530SSteve Rowe    both) # solr, lucene, or both
14112372530SSteve Rowe      # personality_enqueue_module KEEPS duplicates, so de-dupe first
14212372530SSteve Rowe      local doSolr=0,doLucene=0
14312372530SSteve Rowe      for module in "${CHANGED_MODULES[@]}"; do
144298063eeSSteve Rowe        if [[ "${module}" =~ ^solr/ ]]; then doSolr=1; fi
145298063eeSSteve Rowe        if [[ "${module}" =~ ^lucene/ ]]; then doLucene=1; fi
14612372530SSteve Rowe      done
147298063eeSSteve Rowe      if [[ ${doLucene} == 1 ]]; then
148298063eeSSteve Rowe        if [[ ${doSolr} == 1 ]]; then
149298063eeSSteve Rowe          personality_enqueue_module . "${extra}"
15012372530SSteve Rowe        else
151298063eeSSteve Rowe          personality_enqueue_module "lucene" "${extra}"
15212372530SSteve Rowe        fi
153298063eeSSteve Rowe      elif [[ ${doSolr} == 1 ]]; then
154298063eeSSteve Rowe        personality_enqueue_module "solr" "${extra}"
15512372530SSteve Rowe      fi
15612372530SSteve Rowe      ;;
15712372530SSteve Rowe    solr-ref-guide)
15812372530SSteve Rowe      for module in "${CHANGED_MODULES[@]}"; do
159298063eeSSteve Rowe        if [[ "${module}" =~ ^solr/solr-ref-guide ]]; then
160298063eeSSteve Rowe          personality_enqueue_module "solr/solr-ref-guide" "${extra}"
16112372530SSteve Rowe        fi
16212372530SSteve Rowe      done
16312372530SSteve Rowe      ;;
16412372530SSteve Rowe    *)
16512372530SSteve Rowe      ;;
16612372530SSteve Rowe  esac
16712372530SSteve Rowe}
16812372530SSteve Rowe
16912372530SSteve Rowe## @description  Add tests based upon personality needs
17012372530SSteve Rowe## @audience     private
17112372530SSteve Rowe## @stability    evolving
17212372530SSteve Rowe## @param        filename
17312372530SSteve Rowefunction personality_file_tests
17412372530SSteve Rowe{
17512372530SSteve Rowe  declare filename=$1
17612372530SSteve Rowe
17712372530SSteve Rowe  yetus_debug "Using Lucene/Solr-specific personality_file_tests"
17812372530SSteve Rowe
179298063eeSSteve Rowe  if [[ ! ${filename} =~ solr-ref-guide ]]; then
18012372530SSteve Rowe    if [[ ${filename} =~ build\.xml$ || ${filename} =~ /src/(java|resources|test|test-files|tools) ]]; then
18112372530SSteve Rowe      yetus_debug "tests/unit: ${filename}"
18212372530SSteve Rowe      add_test compile
18312372530SSteve Rowe      add_test javac
18412372530SSteve Rowe      add_test unit
18512372530SSteve Rowe    fi
186298063eeSSteve Rowe  fi
18712372530SSteve Rowe}
18812372530SSteve Rowe
18912372530SSteve Rowe## @description  hook to reroute junit folder to search test results based on the module
19012372530SSteve Rowe## @audience     private
19112372530SSteve Rowe## @stability    evolving
19212372530SSteve Rowe## @param        module
19312372530SSteve Rowe## @param        buildlogfile
19412372530SSteve Rowefunction testoutput_process_tests
19512372530SSteve Rowe{
19612372530SSteve Rowe  # shellcheck disable=SC2034
19712372530SSteve Rowe  declare module=$1
19812372530SSteve Rowe  declare buildlogfile=$2
19912372530SSteve Rowe  if [[ "${module}" =~ ^lucene/analysis/ ]]; then
20012372530SSteve Rowe    JUNIT_TEST_OUTPUT_DIR="../../build/${module#*/}"
201*51a6bec4SSteve Rowe  elif [[ "${module}" =~ ^lucene/ ]]; then
202*51a6bec4SSteve Rowe    JUNIT_TEST_OUTPUT_DIR="../build/${module#*/}"
20312372530SSteve Rowe  elif [[ "${module}" =~ ^solr/contrib/extraction ]]; then
20412372530SSteve Rowe    JUNIT_TEST_OUTPUT_DIR="../../build/contrib/solr-cell"
20512372530SSteve Rowe  elif [[ "${module}" =~ ^solr/contrib/(.*) ]]; then
20612372530SSteve Rowe    JUNIT_TEST_OUTPUT_DIR="../../build/contrib/solr-${BASH_REMATCH[1]}"
207*51a6bec4SSteve Rowe  elif [[ "${module}" =~ ^solr/(.*) ]]; then
208*51a6bec4SSteve Rowe    JUNIT_TEST_OUTPUT_DIR="../build/solr-${BASH_REMATCH[1]}"
20912372530SSteve Rowe  fi
21012372530SSteve Rowe  yetus_debug "Rerouting build dir for junit to ${JUNIT_TEST_OUTPUT_DIR}"
21112372530SSteve Rowe}
21212372530SSteve Rowe
21312372530SSteve Rowe## @description  checkluceneversion file filter
21412372530SSteve Rowe## @audience     private
21512372530SSteve Rowe## @stability    evolving
21612372530SSteve Rowe## @param        filename
21712372530SSteve Rowefunction checkluceneversion_filefilter
21812372530SSteve Rowe{
21912372530SSteve Rowe  local filename=$1
22012372530SSteve Rowe  if [[ ${filename} =~ ^solr/(example|server/solr/configsets) ]]; then
22112372530SSteve Rowe    yetus_debug "tests/checkluceneversion: ${filename}"
22212372530SSteve Rowe    add_test checkluceneversion
22312372530SSteve Rowe  fi
22412372530SSteve Rowe}
22512372530SSteve Rowe
22612372530SSteve Rowe## @description  checkluceneversion test
22712372530SSteve Rowe## @audience     private
22812372530SSteve Rowe## @stability    evolving
22912372530SSteve Rowe## @param        repostatus
23012372530SSteve Rowefunction checkluceneversion_rebuild
23112372530SSteve Rowe{
23212372530SSteve Rowe  local repostatus=$1
23312372530SSteve Rowe  lucene_ant_command ${repostatus} "checkluceneversion" "check-example-lucene-match-version" "Check configsets' lucene version"
23412372530SSteve Rowe}
23512372530SSteve Rowe
23612372530SSteve Rowe## @description  ratsources file filter
23712372530SSteve Rowe## @audience     private
23812372530SSteve Rowe## @stability    evolving
23912372530SSteve Rowe## @param        filename
24012372530SSteve Rowefunction ratsources_filefilter
24112372530SSteve Rowe{
24212372530SSteve Rowe  local filename=$1
24312372530SSteve Rowe  if [[ ${filename} =~ /src/|\.xml$ ]] ; then
24412372530SSteve Rowe    yetus_debug "tests/ratsources: ${filename}"
24512372530SSteve Rowe    add_test ratsources
24612372530SSteve Rowe  fi
24712372530SSteve Rowe}
24812372530SSteve Rowe
24912372530SSteve Rowe## @description  ratsources test
25012372530SSteve Rowe## @audience     private
25112372530SSteve Rowe## @stability    evolving
25212372530SSteve Rowe## @param        repostatus
25312372530SSteve Rowefunction ratsources_rebuild
25412372530SSteve Rowe{
25512372530SSteve Rowe  local repostatus=$1
25612372530SSteve Rowe  lucene_ant_command ${repostatus} "ratsources" "rat-sources" "Release audit (RAT)"
25712372530SSteve Rowe}
25812372530SSteve Rowe
25912372530SSteve Rowe## @description  checkforbiddenapis file filter
26012372530SSteve Rowe## @audience     private
26112372530SSteve Rowe## @stability    evolving
26212372530SSteve Rowe## @param        filename
26312372530SSteve Rowefunction checkforbiddenapis_filefilter
26412372530SSteve Rowe{
26512372530SSteve Rowe  local filename=$1
26612372530SSteve Rowe  if [[ ${filename} =~ \.java$ ]] ; then
26712372530SSteve Rowe    yetus_debug "tests/checkforbiddenapis: ${filename}"
26812372530SSteve Rowe    add_test checkforbiddenapis
26912372530SSteve Rowe  fi
27012372530SSteve Rowe}
27112372530SSteve Rowe
27212372530SSteve Rowe## @description  checkforbiddenapis test
27312372530SSteve Rowe## @audience     private
27412372530SSteve Rowe## @stability    evolving
27512372530SSteve Rowe## @param        repostatus
27612372530SSteve Rowefunction checkforbiddenapis_rebuild
27712372530SSteve Rowe{
27812372530SSteve Rowe  local repostatus=$1
27912372530SSteve Rowe  lucene_ant_command ${repostatus} "checkforbiddenapis" "check-forbidden-apis" "Check forbidden APIs"
28012372530SSteve Rowe}
28112372530SSteve Rowe
28212372530SSteve Rowe## @description  checklicenses file filter
28312372530SSteve Rowe## @audience     private
28412372530SSteve Rowe## @stability    evolving
28512372530SSteve Rowe## @param        filename
28612372530SSteve Rowefunction checklicenses_filefilter
28712372530SSteve Rowe{
28812372530SSteve Rowe  local filename=$1
28912372530SSteve Rowe  if [[ ${filename} =~ (lucene|solr)/licenses/|lucene/ivy-versions.properties$ ]]; then
29012372530SSteve Rowe    yetus_debug "tests/checklicenses: ${filename}"
29112372530SSteve Rowe    add_test checklicenses
29212372530SSteve Rowe  fi
29312372530SSteve Rowe}
29412372530SSteve Rowe
29512372530SSteve Rowe## @description  checklicenses test
29612372530SSteve Rowe## @audience     private
29712372530SSteve Rowe## @stability    evolving
29812372530SSteve Rowe## @param        repostatus
29912372530SSteve Rowefunction checklicenses_rebuild
30012372530SSteve Rowe{
30112372530SSteve Rowe  local repostatus=$1
30212372530SSteve Rowe  lucene_ant_command ${repostatus} "checklicenses" "check-licenses" "Check licenses"
30312372530SSteve Rowe}
30412372530SSteve Rowe
30512372530SSteve Rowe## @description  validaterefguide file filter
30612372530SSteve Rowe## @audience     private
30712372530SSteve Rowe## @stability    evolving
30812372530SSteve Rowe## @param        filename
30912372530SSteve Rowefunction validaterefguide_filefilter
31012372530SSteve Rowe{
31112372530SSteve Rowe  local filename=$1
31212372530SSteve Rowe  if [[ ${filename} =~ solr/solr-ref-guide ]]; then
31312372530SSteve Rowe    yetus_debug "tests/validaterefguide: ${filename}"
31412372530SSteve Rowe    add_test validaterefguide
31512372530SSteve Rowe  fi
31612372530SSteve Rowe}
31712372530SSteve Rowe
31812372530SSteve Rowe## @description  validaterefguide test
31912372530SSteve Rowe## @audience     private
32012372530SSteve Rowe## @stability    evolving
32112372530SSteve Rowe## @param        repostatus
32212372530SSteve Rowefunction validaterefguide_rebuild
32312372530SSteve Rowe{
32412372530SSteve Rowe  local repostatus=$1
32512372530SSteve Rowe  lucene_ant_command ${repostatus} "validaterefguide" "bare-bones-html-validation" "Validate ref guide"
32612372530SSteve Rowe}
32712372530SSteve Rowe
32812372530SSteve Rowe## @description  validatesourcepatterns file filter
32912372530SSteve Rowe## @audience     private
33012372530SSteve Rowe## @stability    evolving
33112372530SSteve Rowe## @param        filename
33212372530SSteve Rowefunction validatesourcepatterns_filefilter
33312372530SSteve Rowe{
33412372530SSteve Rowe  local filename=$1
33512372530SSteve Rowe  if [[ ${filename} =~ \.(java|jflex|py|pl|g4|jj|html|js|css|xml|xsl|vm|sh|cmd|bat|policy|properties|mdtext|groovy|template|adoc|json)$ ]]; then
33612372530SSteve Rowe    yetus_debug "tests/validatesourcepatterns: ${filename}"
33712372530SSteve Rowe    add_test validatesourcepatterns
33812372530SSteve Rowe  fi
33912372530SSteve Rowe}
34012372530SSteve Rowe
34112372530SSteve Rowe## @description  validatesourcepatterns test
34212372530SSteve Rowe## @audience     private
34312372530SSteve Rowe## @stability    evolving
34412372530SSteve Rowe## @param        repostatus
34512372530SSteve Rowefunction validatesourcepatterns_rebuild
34612372530SSteve Rowe{
34712372530SSteve Rowe  local repostatus=$1
34812372530SSteve Rowe  lucene_ant_command ${repostatus} "validatesourcepatterns" "validate-source-patterns" "Validate source patterns"
34912372530SSteve Rowe}
35012372530SSteve Rowe
35112372530SSteve Rowefunction lucene_ant_command
35212372530SSteve Rowe{
35312372530SSteve Rowe  declare repostatus=$1
35412372530SSteve Rowe  declare testname=$2
35512372530SSteve Rowe  declare antcommand=$3
35612372530SSteve Rowe  declare title=$4
35712372530SSteve Rowe
35812372530SSteve Rowe  declare result=0
35912372530SSteve Rowe  declare i=0
36012372530SSteve Rowe  declare module
36112372530SSteve Rowe  declare fn
36212372530SSteve Rowe  declare result
36312372530SSteve Rowe
36412372530SSteve Rowe  if [[ "${repostatus}" = branch ]]; then
36512372530SSteve Rowe    return 0
36612372530SSteve Rowe  fi
36712372530SSteve Rowe
36812372530SSteve Rowe  if ! verify_needed_test ${testname}; then
36912372530SSteve Rowe    echo "${BUILDMODEMSG} does not need ${testname} testing."
37012372530SSteve Rowe    return 0
37112372530SSteve Rowe  fi
37212372530SSteve Rowe
37312372530SSteve Rowe  big_console_header "${title}"
374298063eeSSteve Rowe  personality_modules ${repostatus} ${testname}
37512372530SSteve Rowe  until [[ ${i} -eq ${#MODULE[@]} ]]; do
37612372530SSteve Rowe    if [[ ${MODULE_STATUS[${i}]} == -1 ]]; then
37712372530SSteve Rowe      ((result=result+1))
37812372530SSteve Rowe      ((i=i+1))
37912372530SSteve Rowe      continue
38012372530SSteve Rowe    fi
38112372530SSteve Rowe    ANT_ARGS=${antcommand}
38212372530SSteve Rowe
38312372530SSteve Rowe    start_clock
384298063eeSSteve Rowe    module=${MODULE[${i}]}
38512372530SSteve Rowe    fn=$(module_file_fragment "${module}")
38612372530SSteve Rowe    logfilename="${repostatus}-${antcommand}-${fn}.txt";
38712372530SSteve Rowe    logfile="${PATCH_DIR}/${logfilename}"
38812372530SSteve Rowe    buildtool_cwd "${i}"
38912372530SSteve Rowe    echo_and_redirect "${logfile}" $(ant_executor)
39012372530SSteve Rowe
39112372530SSteve Rowe    if [[ $? == 0 ]] ; then
39212372530SSteve Rowe      module_status ${i} +1 "${logfilename}" "${title}" "${antcommand} passed"
39312372530SSteve Rowe    else
39412372530SSteve Rowe      module_status ${i} -1 "${logfilename}" "${title}" "${antcommand} failed"
39512372530SSteve Rowe      ((result=result+1))
39612372530SSteve Rowe    fi
39712372530SSteve Rowe    ((i=i+1))
39812372530SSteve Rowe    savestop=$(stop_clock)
39912372530SSteve Rowe    MODULE_STATUS_TIMER[${i}]=${savestop}
40012372530SSteve Rowe  done
40112372530SSteve Rowe  ANT_ARGS=""
40212372530SSteve Rowe  if [[ ${result} -gt 0 ]]; then
40312372530SSteve Rowe    modules_messages ${repostatus} "${title}" false
40412372530SSteve Rowe    return 1
40512372530SSteve Rowe  fi
40612372530SSteve Rowe  modules_messages ${repostatus} "${title}" true
40712372530SSteve Rowe  return 0
40812372530SSteve Rowe}
409