This is an automated email from the ASF dual-hosted git repository.

aw pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/yetus.git


The following commit(s) were added to refs/heads/main by this push:
     new 6ab19e7  YETUS-995. vote table should have access to the log filename 
(#127)
6ab19e7 is described below

commit 6ab19e71eaf3234863424c6f684b34c1d3dcc0ce
Author: Allen Wittenauer <[email protected]>
AuthorDate: Tue Sep 22 12:13:25 2020 -0700

    YETUS-995. vote table should have access to the log filename (#127)
---
 .../src/main/shell/core.d/builtin-bugsystem.sh     |  38 +++++--
 precommit/src/main/shell/core.d/docker.sh          |  12 +--
 precommit/src/main/shell/core.d/reaper.sh          |   2 +-
 precommit/src/main/shell/docker-cleanup.sh         |   2 +-
 precommit/src/main/shell/personality/flink.sh      |  14 +--
 precommit/src/main/shell/personality/hadoop.sh     |   6 +-
 precommit/src/main/shell/personality/hbase.sh      |  17 +--
 precommit/src/main/shell/smart-apply-patch.sh      |   2 +-
 precommit/src/main/shell/test-patch.d/ant.sh       |   2 +-
 .../src/main/shell/test-patch.d/asflicense.sh      |  11 +-
 precommit/src/main/shell/test-patch.d/author.sh    |   8 +-
 precommit/src/main/shell/test-patch.d/autoconf.sh  |  28 +++--
 .../src/main/shell/test-patch.d/briefreport.sh     |  72 ++++++-------
 precommit/src/main/shell/test-patch.d/buf.sh       |  29 ++---
 precommit/src/main/shell/test-patch.d/checkmake.sh |   9 +-
 precommit/src/main/shell/test-patch.d/cmake.sh     |   2 +-
 precommit/src/main/shell/test-patch.d/dupname.sh   |  10 +-
 precommit/src/main/shell/test-patch.d/github.sh    | 113 +++++++++++---------
 precommit/src/main/shell/test-patch.d/gitlab.sh    | 117 ++++++++++++---------
 precommit/src/main/shell/test-patch.d/golangci.sh  |   9 +-
 precommit/src/main/shell/test-patch.d/gradle.sh    |   2 +-
 precommit/src/main/shell/test-patch.d/hadolint.sh  |   9 +-
 precommit/src/main/shell/test-patch.d/htmlout.sh   |  38 ++++---
 precommit/src/main/shell/test-patch.d/java.sh      |   2 +-
 precommit/src/main/shell/test-patch.d/jira.sh      |  41 +++++---
 precommit/src/main/shell/test-patch.d/jshint.sh    |   9 +-
 precommit/src/main/shell/test-patch.d/junit.sh     |  39 +++----
 precommit/src/main/shell/test-patch.d/make.sh      |   2 +-
 .../src/main/shell/test-patch.d/markdownlint.sh    |   9 +-
 precommit/src/main/shell/test-patch.d/maven.sh     |  12 +--
 precommit/src/main/shell/test-patch.d/pathlen.sh   |   4 +-
 .../src/main/shell/test-patch.d/perlcritic.sh      |   9 +-
 precommit/src/main/shell/test-patch.d/pylint.sh    |  14 ++-
 precommit/src/main/shell/test-patch.d/revive.sh    |   9 +-
 precommit/src/main/shell/test-patch.d/rubocop.sh   |   9 +-
 .../src/main/shell/test-patch.d/shellcheck.sh      |   9 +-
 precommit/src/main/shell/test-patch.d/shelldocs.sh |   9 +-
 precommit/src/main/shell/test-patch.d/spotbugs.sh  |   6 +-
 .../src/main/shell/test-patch.d/test4tests.sh      |   4 +-
 precommit/src/main/shell/test-patch.d/unitveto.sh  |   2 +-
 .../src/main/shell/test-patch.d/whitespace.sh      |  16 +--
 precommit/src/main/shell/test-patch.d/xml.sh       |   7 +-
 precommit/src/main/shell/test-patch.d/yamllint.sh  |   9 +-
 precommit/src/main/shell/test-patch.sh             |  78 ++++++++++----
 44 files changed, 476 insertions(+), 375 deletions(-)

diff --git a/precommit/src/main/shell/core.d/builtin-bugsystem.sh 
b/precommit/src/main/shell/core.d/builtin-bugsystem.sh
index 0caad61..4ffd4ae 100755
--- a/precommit/src/main/shell/core.d/builtin-bugsystem.sh
+++ b/precommit/src/main/shell/core.d/builtin-bugsystem.sh
@@ -46,6 +46,7 @@ function console_finalreport
   declare spcfx=${PATCH_DIR}/spcl.txt
   declare calctime
   declare url
+  declare logfile
 
   if [[ -n "${CONSOLE_REPORT_FILE}" ]]; then
     exec 6>&1
@@ -103,7 +104,7 @@ function console_finalreport
 
   seccoladj=$((seccoladj + 2 ))
   i=0
-  until [[ $i -eq ${#TP_HEADER[@]} ]]; do
+  until [[ $i -ge ${#TP_HEADER[@]} ]]; do
     printf '%s\n' "${TP_HEADER[${i}]}"
     ((i=i+1))
   done
@@ -111,17 +112,17 @@ function console_finalreport
   printf '| %s | %*s |  %s   | %s\n' "Vote" ${seccoladj} Subsystem Runtime 
"Comment"
   echo 
"============================================================================"
   i=0
-  until [[ $i -eq ${#TP_VOTE_TABLE[@]} ]]; do
+  until [[ $i -ge ${#TP_VOTE_TABLE[@]} ]]; do
     ourstring=$(echo "${TP_VOTE_TABLE[${i}]}" | tr -s ' ')
     vote=$(echo "${ourstring}" | cut -f2 -d\|)
     subs=$(echo "${ourstring}"  | cut -f3 -d\|)
     ela=$(echo "${ourstring}" | cut -f4 -d\|)
     calctime=$(clock_display "${ela}")
-    comment=$(echo "${ourstring}"  | cut -f5 -d\|)
+    comment=$(echo "${ourstring}"  | cut -f6 -d\|)
 
     echo "${comment}" | fold -s -w $((78-seccoladj-22)) > "${commentfile1}"
     normaltop=$(head -1 "${commentfile1}")
-    ${SED} -e '1d' "${commentfile1}"  > "${commentfile2}"
+    "${SED}" -e '1d' "${commentfile1}"  > "${commentfile2}"
 
     if [[ "${vote}" = "H" ]]; then
       echo 
"+---------------------------------------------------------------------------"
@@ -143,7 +144,7 @@ function console_finalreport
     seccoladj=$(findlargest 1 "${TP_TEST_TABLE[@]}")
     printf '\n\n%*s | Tests\n' "${seccoladj}" "Reason"
     i=0
-    until [[ $i -eq ${#TP_TEST_TABLE[@]} ]]; do
+    until [[ $i -ge ${#TP_TEST_TABLE[@]} ]]; do
       ourstring=$(echo "${TP_TEST_TABLE[${i}]}" | tr -s ' ')
       vote=$(echo "${ourstring}" | cut -f2 -d\|)
       subs=$(echo "${ourstring}"  | cut -f3 -d\|)
@@ -164,13 +165,34 @@ function console_finalreport
     url=${PATCH_DIR}
   fi
 
-  until [[ $i -eq ${#TP_FOOTER_TABLE[@]} ]]; do
-    comment=$(echo "${TP_FOOTER_TABLE[${i}]}" |
-              "${SED}" -e "s,@@BASE@@,${url},g")
+  i=0
+  until [[ $i -ge ${#TP_VOTE_TABLE[@]} ]]; do
+    ourstring=$(echo "${TP_VOTE_TABLE[${i}]}" | tr -s ' ')
+    vote=$(echo "${ourstring}" | cut -f2 -d\|)
+    subs=$(echo "${ourstring}"  | cut -f3 -d\|)
+    logfile=$(echo "${ourstring}" | cut -f5 -d\| | tr -d ' ')
+
+    if [[ "${vote}" == H ]] || [[ -z "${logfile}" ]]; then
+       ((i=i+1))
+       continue
+    fi
+
+    comment=$(echo "${logfile}" | "${SED}" -e "s,@@BASE@@,${url},g")
+
+    printf '| %s | %s |\n' "${subs}" "${comment}"
+
+    ((i=i+1))
+  done
+
+  i=0
+  until [[ $i -ge ${#TP_FOOTER_TABLE[@]} ]]; do
+    comment=$(echo "${TP_FOOTER_TABLE[${i}]}" | "${SED}" -e 
"s,@@BASE@@,${url},g")
     printf '%s\n' "${comment}"
     ((i=i+1))
   done
 
+
+
   if [[ -n "${CONSOLE_REPORT_FILE}" ]]; then
     exec 1>&6 6>&-
     cat "${CONSOLE_REPORT_FILE}"
diff --git a/precommit/src/main/shell/core.d/docker.sh 
b/precommit/src/main/shell/core.d/docker.sh
index 3d324e8..4dbf656 100755
--- a/precommit/src/main/shell/core.d/docker.sh
+++ b/precommit/src/main/shell/core.d/docker.sh
@@ -198,7 +198,7 @@ function docker_initialize
   IFS='.' read -r -a DOCKER_VERSION <<< "${dockvers}"
   if [[ "${DOCKER_VERSION[0]}" -lt 1 ]] || \
      [[ "${DOCKER_VERSION[0]}" -lt 2 && "${DOCKER_VERSION[1]}" -lt 27 ]]; then
-    add_vote_table -1 docker "Docker command '${DOCKERCMD}' is too old 
(${dockvers} <  API v 1.27.0)."
+    add_vote_table_v2 -1 docker "" "Docker command '${DOCKERCMD}' is too old 
(${dockvers} <  API v 1.27.0)."
     bugsystem_finalreport 1
     cleanup_and_exit 1
   fi
@@ -214,7 +214,7 @@ function docker_initialize
   elif "${STAT}" -f '%g' "${DOCKER_SOCKET}" >/dev/null 2>&1; then
     DOCKER_SOCKET_GID=$("${STAT}" -f '%g' "${DOCKER_SOCKET}")
   elif [[ ${DOCKER_IN_DOCKER} == true ]]; then
-    add_vote_table -1 docker "Docker-in-Docker mode (--dockerind) requires a 
working stat command."
+    add_vote_table_v2 -1 docker "" "Docker-in-Docker mode (--dockerind) 
requires a working stat command."
     bugsystem_finalreport 1
     cleanup_and_exit 1
   fi
@@ -235,7 +235,7 @@ function docker_fileverify
         DOCKERFILE=$(yetus_abs "${DOCKERFILE}")
       else
         yetus_error "ERROR: Dockerfile '${DOCKERFILE}' not found."
-        add_vote_table -1 docker "Dockerfile '${DOCKERFILE}' not found."
+        add_vote_table_v2 -1 docker "" "Dockerfile '${DOCKERFILE}' not found."
         bugsystem_finalreport 1
         cleanup_and_exit 1
       fi
@@ -648,7 +648,7 @@ function docker_run_image
 
     if ! dockercmd pull "${dockplat[@]}" "${DOCKER_TAG}"; then
       yetus_error "ERROR: Docker failed to pull ${DOCKER_TAG}."
-      add_vote_table -1 docker "Docker failed to pull ${DOCKER_TAG}."
+      add_vote_table_v2 -1 docker "" "Docker failed to pull ${DOCKER_TAG}."
       bugsystem_finalreport 1
       cleanup_and_exit 1
     fi
@@ -732,7 +732,7 @@ function docker_run_image
           "${dockerdir}"; then
       popd >/dev/null || return 1
       yetus_error "ERROR: Docker failed to build ${baseimagename}."
-      add_vote_table -1 docker "Docker failed to build ${baseimagename}."
+      add_vote_table_v2 -1 docker "" "Docker failed to build ${baseimagename}."
       bugsystem_finalreport 1
       cleanup_and_exit 1
     fi
@@ -783,7 +783,7 @@ function docker_run_image
 
   if [[ ${retval} != 0 ]]; then
     yetus_error "ERROR: Docker failed to build run-specific ${patchimagename}."
-    add_vote_table -1 docker "Docker failed to build run-specific 
${patchimagename}}."
+    add_vote_table_v2 -1 docker "" "Docker failed to build run-specific 
${patchimagename}}."
     bugsystem_finalreport 1
     cleanup_and_exit 1
   fi
diff --git a/precommit/src/main/shell/core.d/reaper.sh 
b/precommit/src/main/shell/core.d/reaper.sh
index f4b5ace..c2ac462 100755
--- a/precommit/src/main/shell/core.d/reaper.sh
+++ b/precommit/src/main/shell/core.d/reaper.sh
@@ -250,6 +250,6 @@ function reaper_total_count
   fi
 
   if [[ ${REAPER_TOTAL_COUNT} -gt 0 ]]; then
-    add_vote_table -0 reaper "Unreaped process count: ${REAPER_TOTAL_COUNT}"
+    add_vote_table_v2 -0 reaper "" "Unreaped process count: 
${REAPER_TOTAL_COUNT}"
   fi
 }
diff --git a/precommit/src/main/shell/docker-cleanup.sh 
b/precommit/src/main/shell/docker-cleanup.sh
index 968c2e0..09b5096 100755
--- a/precommit/src/main/shell/docker-cleanup.sh
+++ b/precommit/src/main/shell/docker-cleanup.sh
@@ -38,7 +38,7 @@ USER_PARAMS=("$@")
 QATESTMODE=false
 
 # dummy functions
-function add_vote_table
+function add_vote_table_v2
 {
   true
 }
diff --git a/precommit/src/main/shell/personality/flink.sh 
b/precommit/src/main/shell/personality/flink.sh
index 7694226..279d491 100755
--- a/precommit/src/main/shell/personality/flink.sh
+++ b/precommit/src/main/shell/personality/flink.sh
@@ -78,7 +78,9 @@ function flinklib_rebuild
   pushd "${BASEDIR}" >/dev/null || return 1
   if ! echo_and_redirect "${PATCH_DIR}/${repostatus}-flinklib-root.txt" \
      "${MAVEN}" "${MAVEN_ARGS[@]}" package -DskipTests 
-Dmaven.javadoc.skip=true -Ptest-patch; then
-     add_vote_table -1 flinklib "Unable to determine flink libs in 
${PATCH_BRANCH}."
+     add_vote_table_v2 -1 flinklib \
+      "@@BASE@@/${repostatus}-flinklib-root.txt" \
+      "Unable to determine flink libs in ${PATCH_BRANCH}."
   fi
 
   if [[ ${repostatus} = branch ]]; then
@@ -91,23 +93,23 @@ function flinklib_rebuild
 
   if [[ "${BUILDMODE}" = full ]]; then
     if [[ ${FLINK_POST_LIB_FILES} -gt 0 ]]; then
-      add_vote_table -1 flinklib "Lib folder dependencies are currently 
${FLINK_POST_LIB_FILES}"
+      add_vote_table_v2 -1 flinklib "" "Lib folder dependencies are currently 
${FLINK_POST_LIB_FILES}"
       return 1
     else
-      add_vote_table +1 flinklib "No lib folder dependencies!"
+      add_vote_table_v2 +1 flinklib "" "No lib folder dependencies!"
       return 0
     fi
   fi
 
   if [[ "${FLINK_POST_LIB_FILES}" -gt "${FLINK_PRE_LIB_FILES}" ]]; then
-    add_vote_table -1 flinklib "Patch increases lib folder dependencies from " 
\
+    add_vote_table_v2 -1 flinklib "" "Patch increases lib folder dependencies 
from " \
       "${FLINK_PRE_LIB_FILES} to ${FLINK_POST_LIB_FILES}"
     return 1
   elif [[ "${FLINK_POST_LIB_FILES}" -eq "${FLINK_PRE_LIB_FILES}" ]]; then
-    add_vote_table 0 flinklib "Patch did not change lib dependencies" \
+    add_vote_table_v2 0 flinklib "" "Patch did not change lib dependencies" \
       " (still ${FLINK_PRE_LIB_FILES})"
   else
-    add_vote_table +1 flinklib "Patch decreases lib folder dependencies by " \
+    add_vote_table_v2 +1 flinklib "" "Patch decreases lib folder dependencies 
by " \
       "$((FLINK_PRE_LIB_FILES-FLINK_POST_LIB_FILES))."
   fi
   return 0
diff --git a/precommit/src/main/shell/personality/hadoop.sh 
b/precommit/src/main/shell/personality/hadoop.sh
index 95e24ea..e256106 100755
--- a/precommit/src/main/shell/personality/hadoop.sh
+++ b/precommit/src/main/shell/personality/hadoop.sh
@@ -580,10 +580,12 @@ function shadedclient_rebuild
 
   count=$("${GREP}" -c '\[ERROR\]' "${logfile}")
   if [[ ${count} -gt 0 ]]; then
-    add_vote_table -1 shadedclient "${repostatus} has errors when building and 
testing our client artifacts."
+    add_vote_table_v2 -1 shadedclient \
+      "@@BASE@@/${repostatus}-shadedclient.txt" \
+      "${repostatus} has errors when building and testing our client 
artifacts."
     return 1
   fi
 
-  add_vote_table +1 shadedclient "${repostatus} has no errors when building 
and testing our client artifacts."
+  add_vote_table_v2 +1 shadedclient "" "${repostatus} has no errors when 
building and testing our client artifacts."
   return 0
 }
diff --git a/precommit/src/main/shell/personality/hbase.sh 
b/precommit/src/main/shell/personality/hbase.sh
index 64bc258..6eebfb3 100755
--- a/precommit/src/main/shell/personality/hbase.sh
+++ b/precommit/src/main/shell/personality/hbase.sh
@@ -148,7 +148,10 @@ function hadoopcheck_rebuild
         -Dhadoop-two.version="${hadoopver}"
     count=$(${GREP} -c ERROR "${logfile}")
     if [[ ${count} -gt 0 ]]; then
-      add_vote_table -1 hadoopcheck "${BUILDMODEMSG} causes ${count} errors 
with Hadoop v${hadoopver}."
+      add_vote_table_v2 -1 \
+        hadoopcheck \
+        "@@BASE@@/patch-javac-${hadoopver}.txt" \
+        "${BUILDMODEMSG} causes ${count} errors with Hadoop v${hadoopver}."
       ((result=result+1))
     fi
   done
@@ -157,7 +160,7 @@ function hadoopcheck_rebuild
     return 1
   fi
 
-  add_vote_table +1 hadoopcheck "${BUILDMODEMSG} does not cause any errors 
with Hadoop ${HBASE_HADOOP_VERSIONS}."
+  add_vote_table_v2 +1 hadoopcheck "" "${BUILDMODEMSG} does not cause any 
errors with Hadoop ${HBASE_HADOOP_VERSIONS}."
   return 0
 }
 
@@ -277,13 +280,13 @@ function hbaseanti_patchfile
 
   warnings=$("${GREP}" 'new TreeMap<byte.*()' "${patchfile}")
   if [[ ${warnings} -gt 0 ]]; then
-    add_vote_table -1 hbaseanti "" "The patch appears to have anti-pattern 
where BYTES_COMPARATOR was omitted: ${warnings}."
+    add_vote_table_v2 -1 hbaseanti "" "The patch appears to have anti-pattern 
where BYTES_COMPARATOR was omitted: ${warnings}."
     ((result=result+1))
   fi
 
   warnings=$("${GREP}" 'import org.apache.hadoop.classification' 
"${patchfile}")
   if [[ ${warnings} -gt 0 ]]; then
-    add_vote_table -1 hbaseanti "" "The patch appears use Hadoop 
classification instead of HBase: ${warnings}."
+    add_vote_table_v2 -1 hbaseanti "" "The patch appears use Hadoop 
classification instead of HBase: ${warnings}."
     ((result=result+1))
   fi
 
@@ -291,7 +294,7 @@ function hbaseanti_patchfile
     return 1
   fi
 
-  add_vote_table +1 hbaseanti "" "Patch does not have any anti-patterns."
+  add_vote_table_v2 +1 hbaseanti "" "Patch does not have any anti-patterns."
   return 0
 }
 
@@ -355,14 +358,14 @@ function mvnsite_filefilter
 #      done
 #    fi
 #    if [ "${zombie_count}" -ne 0 ]; then
-#      add_vote_table -1 zombies "There are ${zombie_count} zombie test(s)"
+#      add_vote_table_v2 -1 zombies "There are ${zombie_count} zombie test(s)"
 #      populate_test_table "zombie unit tests" "${zombies}"
 #    else
 #      yetus_info "Zombie check complete. All test runs exited normally."
 #      stop_clock
 #    fi
 #  else
-#    add_vote_table -0 zombies "There is no BUILD_ID env variable; can't check 
for zombies."
+#    add_vote_table_v2 -0 zombies "There is no BUILD_ID env variable; can't 
check for zombies."
 #  fi
 #
 #}
diff --git a/precommit/src/main/shell/smart-apply-patch.sh 
b/precommit/src/main/shell/smart-apply-patch.sh
index 2567ee5..a918c16 100755
--- a/precommit/src/main/shell/smart-apply-patch.sh
+++ b/precommit/src/main/shell/smart-apply-patch.sh
@@ -34,7 +34,7 @@ STARTINGDIR=$(pwd)
 ## @stability    stable
 ## @audience     private
 ## @replaceable  no
-function add_vote_table
+function add_vote_table_v2
 {
   true
 }
diff --git a/precommit/src/main/shell/test-patch.d/ant.sh 
b/precommit/src/main/shell/test-patch.d/ant.sh
index bb1ebc3..23b598e 100755
--- a/precommit/src/main/shell/test-patch.d/ant.sh
+++ b/precommit/src/main/shell/test-patch.d/ant.sh
@@ -69,7 +69,7 @@ function ant_precheck
   declare ant_version
 
   if ! verify_command ant "${ANT}"; then
-    add_vote_table -1 ant "ERROR: ant is not available."
+    add_vote_table_v2 -1 ant "" "ERROR: ant is not available."
     return 1
   fi
   # finally let folks know what version they'll be dealing with.
diff --git a/precommit/src/main/shell/test-patch.d/asflicense.sh 
b/precommit/src/main/shell/test-patch.d/asflicense.sh
index eb3621c..b0db533 100755
--- a/precommit/src/main/shell/test-patch.d/asflicense.sh
+++ b/precommit/src/main/shell/test-patch.d/asflicense.sh
@@ -114,7 +114,7 @@ function asflicense_tests
   # RAT fails the build if there are license problems.
   # so let's take advantage of that a bit.
   if [[ ${retval} == 0 && ${btfails} = true ]]; then
-    add_vote_table 1 asflicense "${BUILDMODEMSG} does not generate ASF License 
warnings."
+    add_vote_table_v2 1 asflicense "" "${BUILDMODEMSG} does not generate ASF 
License warnings."
     return 0
   fi
 
@@ -132,7 +132,7 @@ function asflicense_tests
       modules_messages patch asflicense true
       return 1
     else
-      add_vote_table 0 asflicense "ASF License check generated no output?"
+      add_vote_table_v2 0 asflicense "" "ASF License check generated no 
output?"
       return 0
     fi
   fi
@@ -143,7 +143,9 @@ function asflicense_tests
   echo "There appear to be ${numpatch} ASF License warnings after applying the 
patch."
   if [[ -n ${numpatch}
      && ${numpatch} -gt 0 ]] ; then
-    add_vote_table -1 asflicense "${BUILDMODEMSG} generated ${numpatch} ASF 
License warnings."
+    add_vote_table_v2 -1 asflicense \
+      "@@BASE@@/patch-asflicense-problems.txt" \
+      "${BUILDMODEMSG} generated ${numpatch} ASF License warnings."
 
     echo "Lines that start with ????? in the ASF License "\
         "report indicate files that do not have an Apache license header:" \
@@ -152,10 +154,9 @@ function asflicense_tests
     ${GREP} '\!?????' "${PATCH_DIR}/patch-asflicense.txt" \
     >>  "${PATCH_DIR}/patch-asflicense-problems.txt"
 
-    add_footer_table asflicense "@@BASE@@/patch-asflicense-problems.txt"
     return 1
   fi
-  add_vote_table 1 asflicense "${BUILDMODEMSG} does not generate ASF License 
warnings."
+  add_vote_table_v2 1 asflicense "" "${BUILDMODEMSG} does not generate ASF 
License warnings."
   return 0
 }
 
diff --git a/precommit/src/main/shell/test-patch.d/author.sh 
b/precommit/src/main/shell/test-patch.d/author.sh
index dd05fa6..fb01fb8 100755
--- a/precommit/src/main/shell/test-patch.d/author.sh
+++ b/precommit/src/main/shell/test-patch.d/author.sh
@@ -65,13 +65,13 @@ function author_generic
   authortags=$(wc -l "${PATCH_DIR}/author-tags.txt" | "${AWK}" '{print $1}')
   echo "There appear to be ${authortags} @author tags in the ${msg}."
   if [[ ${authortags} != 0 ]] ; then
-    add_vote_table -1 @author \
+    add_vote_table_v2 -1 @author \
+      "@@BASE@@/author-tags.txt" \
       "${BUILDMODEMSG} appears to contain ${authortags} @author tags which 
the" \
       " community has agreed to not allow in code contributions."
-    add_footer_table @author "@@BASE@@/author-tags.txt"
     return 1
   fi
-  add_vote_table +1 @author "${BUILDMODEMSG} does not contain any @author 
tags."
+  add_vote_table_v2 +1 @author "" "${BUILDMODEMSG} does not contain any 
@author tags."
   return 0
 }
 
@@ -100,7 +100,7 @@ function author_patchfile
   for i in "${CHANGED_FILES[@]}"; do
     if [[ ${i} =~ ${appname} ]]; then
       echo "Skipping @author checks as ${appname} has been patched."
-      add_vote_table 0 @author "Skipping @author checks as ${appname} has been 
patched."
+      add_vote_table_v2 0 @author "" "Skipping @author checks as ${appname} 
has been patched."
       return 0
     fi
   done
diff --git a/precommit/src/main/shell/test-patch.d/autoconf.sh 
b/precommit/src/main/shell/test-patch.d/autoconf.sh
index 6e73696..5813892 100755
--- a/precommit/src/main/shell/test-patch.d/autoconf.sh
+++ b/precommit/src/main/shell/test-patch.d/autoconf.sh
@@ -63,7 +63,7 @@ function autoconf_precheck
 {
   declare autoconf_version
   if ! verify_command autoconf autoreconf; then
-    add_vote_table -1 autoconf "autoreconf was not available."
+    add_vote_table_v2 -1 autoconf "" "autoreconf was not available."
     return 1
   fi
 
@@ -126,18 +126,21 @@ function autoconf_precompile
   if [[ ${result} != 0 ]]; then
     if [[ "${repostatus}" = branch ]]; then
       # shellcheck disable=SC2153
-      add_vote_table -1 autoreconf "${PATCH_BRANCH} unable to autoreconf"
+      add_vote_table_v2 -1 autoreconf \
+        "@@BASE@@/${repostatus}-autoconf-autoreconf" \
+        "${PATCH_BRANCH} unable to autoreconf"
     else
-      add_vote_table -1 autoreconf "${BUILDMODEMSG} is unable to autoreconf"
+      add_vote_table_v2 -1 autoreconf \
+        "@@BASE@@/${repostatus}-autoconf-autoreconf" \
+        "${BUILDMODEMSG} is unable to autoreconf"
     fi
-    add_footer_table "autoreconf" "@@BASE@@/${repostatus}-autoconf-autoreconf"
     return 1
   else
     if [[ "${repostatus}" = branch ]]; then
       # shellcheck disable=SC2153
-      add_vote_table +1 autoreconf "${PATCH_BRANCH} autoreconf successful"
+      add_vote_table_v2 +1 autoreconf "" "${PATCH_BRANCH} autoreconf 
successful"
     else
-      add_vote_table +1 autoreconf "${BUILDMODEMSG} can autoreconf"
+      add_vote_table_v2 +1 autoreconf "" "${BUILDMODEMSG} can autoreconf"
     fi
   fi
 
@@ -156,18 +159,21 @@ function autoconf_precompile
   if [[ ${result} != 0 ]]; then
     if [[ "${repostatus}" = branch ]]; then
       # shellcheck disable=SC2153
-      add_vote_table -1 configure "${PATCH_BRANCH} unable to configure"
+      add_vote_table_v2 -1 configure \
+        "@@BASE@@/${repostatus}-autoconf-configure" \
+        "${PATCH_BRANCH} unable to configure"
     else
-      add_vote_table -1 configure "${BUILDMODEMSG} is unable to configure"
+      add_vote_table_v2 -1 configure \
+        "@@BASE@@/${repostatus}-autoconf-configure" \
+        "${BUILDMODEMSG} is unable to configure"
     fi
-    add_footer_table "configure" "@@BASE@@/${repostatus}-autoconf-configure"
     return 1
   else
     if [[ "${repostatus}" = branch ]]; then
       # shellcheck disable=SC2153
-      add_vote_table +1 configure "${PATCH_BRANCH} configure successful"
+      add_vote_table_v2 +1 configure "" "${PATCH_BRANCH} configure successful"
     else
-      add_vote_table +1 configure "${BUILDMODEMSG} can configure"
+      add_vote_table_v2 +1 configure "" "${BUILDMODEMSG} can configure"
     fi
   fi
   return 0
diff --git a/precommit/src/main/shell/test-patch.d/briefreport.sh 
b/precommit/src/main/shell/test-patch.d/briefreport.sh
index 8280432..b61e3b1 100755
--- a/precommit/src/main/shell/test-patch.d/briefreport.sh
+++ b/precommit/src/main/shell/test-patch.d/briefreport.sh
@@ -98,8 +98,8 @@ function briefreport_finalreport
   declare -a filtered
   declare hours
   declare newtime
-  declare havelogs=false
   declare fn
+  declare logfile
 
   if [[ -z "${BRIEFOUT_REPORTFILE}" ]]; then
     return
@@ -114,11 +114,12 @@ function briefreport_finalreport
   fi
 
   i=0
-  until [[ $i -eq ${#TP_VOTE_TABLE[@]} ]]; do
+  until [[ $i -ge ${#TP_VOTE_TABLE[@]} ]]; do
     ourstring=$(echo "${TP_VOTE_TABLE[${i}]}" | tr -s ' ')
     vote=$(echo "${ourstring}" | cut -f2 -d\|)
     subs=$(echo "${ourstring}"  | cut -f3 -d\|)
     ela=$(echo "${ourstring}" | cut -f4 -d\|)
+    logfile=$(echo "${ourstring}" | cut -f5 -d\| | tr -d ' ')
 
     if [[ "${vote}" = "H" ]]; then
        ((i=i+1))
@@ -223,47 +224,38 @@ function briefreport_finalreport
   url=$(get_artifact_url)
 
   i=0
-  until [[ $i -eq ${#TP_FOOTER_TABLE[@]} ]]; do
-    if [[ "${TP_FOOTER_TABLE[${i}]}" =~ \@\@BASE\@\@ ]] \
-       && [[ ! "${TP_FOOTER_TABLE[${i}]}" =~ Dockerfile ]]; then
-      havelogs=true
-      break
+  until [[ $i -ge ${#TP_VOTE_TABLE[@]} ]]; do
+    ourstring=$(echo "${TP_VOTE_TABLE[${i}]}" | tr -s ' ')
+    subs=$(echo "${ourstring}"  | cut -f3 -d\|)
+    logfile=$(echo "${ourstring}" | cut -f5 -d\| | tr -d ' ')
+
+    if [[ -z "${logfile}" ]]; then
+       ((i=i+1))
+       continue
     fi
-    ((i=i+1))
-  done
 
-  if [[ "${havelogs}" == true ]]; then
-    vote=""
-    until [[ $i -eq ${#TP_FOOTER_TABLE[@]} ]]; do
-      if [[ "${TP_FOOTER_TABLE[${i}]}" =~ \@\@BASE\@\@ ]]; then
-        ourstring=$(echo "${TP_TEST_TABLE[${i}]}" | tr -s ' ')
-        subs=$(echo "${TP_FOOTER_TABLE[${i}]}" | cut -f2 -d\|)
-        comment=$(echo "${TP_FOOTER_TABLE[${i}]}" |
-                    cut -f3 -d\| |
-                    "${SED}" -e "s,@@BASE@@,${PATCH_DIR},g")
-        fn="${comment// }"
-        if [[ -f ${fn} ]]; then
-          # shellcheck disable=SC2016
-          size=$(du -sh "${fn}" | "${AWK}" '{print $1}')
-        fi
-        if [[ -n "${url}" ]]; then
-          comment=$(echo "${TP_FOOTER_TABLE[${i}]}" |
-                    cut -f3 -d\| |
-                    "${SED}" -e "s,@@BASE@@,${url},g")
-        fi
-        {
-          if [[ "${subs}" != "${vote}" ]]; then
-            echo ""
-            printf '   %s:\n' "${subs// }"
-            echo ""
-            vote=${subs}
-          fi
-          printf '      %s [%s]\n' "${comment}" "${size}"
-        } >> "${BRIEFOUT_REPORTFILE}"
+    logentry=$(echo "${logfile}" | "${SED}" -e "s,@@BASE@@,${PATCH_DIR},g")
+    fn="${logentry// }"
+
+    if [[ -f ${fn} ]]; then
+      # shellcheck disable=SC2016
+      size=$(du -sh "${fn}" | "${AWK}" '{print $1}')
+    fi
+    if [[ -n "${url}" ]]; then
+      comment=$(echo "${logfile}" |"${SED}" -e "s,@@BASE@@,${url},g")
+    fi
+    {
+      if [[ "${subs}" != "${vote}" ]]; then
+        echo ""
+        printf '   %s:\n' "${subs// }"
+        echo ""
+        vote=${subs}
       fi
-      ((i=i+1))
-    done
-  fi
+      printf '      %s [%s]\n' "${comment}" "${size}"
+    } >> "${BRIEFOUT_REPORTFILE}"
+
+    ((i=i+1))
+  done
 
   {
    echo ""
diff --git a/precommit/src/main/shell/test-patch.d/buf.sh 
b/precommit/src/main/shell/test-patch.d/buf.sh
index ab05dfe..87e748c 100755
--- a/precommit/src/main/shell/test-patch.d/buf.sh
+++ b/precommit/src/main/shell/test-patch.d/buf.sh
@@ -74,7 +74,7 @@ function buf_precheck
   fi
 
   if ! verify_command "buf" "${BUF}"; then
-    add_vote_table 0 buf "buf was not available."
+    add_vote_table_v2 0 buf "" "buf was not available."
     delete_test buflint
     delete_test bufcompat
   fi
@@ -149,8 +149,7 @@ function bufcompat_executor
   popd >/dev/null || return 1
 
   if [[ -f ${PATCH_DIR}/${bufStderr} ]] && [[ -s "${bufStderr}" ]]; then
-    add_vote_table -1 bufcompat "Error running buf. Please check buf stderr 
files."
-    add_footer_table bufcompat "@@BASE@@/${bufStderr}"
+    add_vote_table_v2 -1 bufcompat "@@BASE@@/${bufStderr}" "Error running buf. 
Please check buf stderr files."
     return 1
   fi
   rm "${PATCH_DIR}/${bufStderr}" 2>/dev/null
@@ -191,8 +190,9 @@ function bufcompat_postapply
   if [[ -s "${PATCH_DIR}/${repostatus}-bufcompat-result.txt" ]]; then
     # shellcheck disable=SC2016
     incompatcount=$(wc -l "${PATCH_DIR}/${repostatus}-bufcompat-result.txt" | 
"${AWK}" '{print $1}')
-    add_vote_table -1 bufcompat "${incompatcount} Incompatible protobuf 
changes"
-    add_footer_table bufcompat "@@BASE@@/${repostatus}-bufcompat-result.txt"
+    add_vote_table_v2 -1 bufcompat \
+      "@@BASE@@/${repostatus}-bufcompat-result.txt" \
+      "${incompatcount} Incompatible protobuf changes"
     return 1
   fi
   return 0
@@ -269,8 +269,9 @@ function buflint_executor
   popd >/dev/null || return 1
 
   if [[ -f ${PATCH_DIR}/${bufStderr} ]] && [[ -s "${bufStderr}" ]]; then
-    add_vote_table -1 buflint "Error running buf. Please check buf stderr 
files."
-    add_footer_table buflint "@@BASE@@/${bufStderr}"
+    add_vote_table_v2 -1 buflint \
+      "@@BASE@@/${bufStderr}" \
+      "Error running buf. Please check buf stderr files."
     return 1
   fi
   rm "${PATCH_DIR}/${bufStderr}" 2>/dev/null
@@ -307,8 +308,9 @@ function buflint_postapply
   fi
 
   if [[ -s "${PATCH_DIR}/${repostatus}-buflint-result.txt" ]]; then
-    add_vote_table -1 buflint "Incompatible protobuf changes"
-    add_footer_table buflint "@@BASE@@/${repostatus}-buflint-result.txt"
+    add_vote_table_v2 -1 buflint \
+      "@@BASE@@/${repostatus}-buflint-result.txt" \
+      "Incompatible protobuf changes"
   fi
 
   # shellcheck disable=SC2016
@@ -335,15 +337,16 @@ function buflint_postapply
   statstring=$(generic_calcdiff_status "${numPrepatch}" "${numPostpatch}" 
"${diffPostpatch}" )
 
   if [[ ${diffPostpatch} -gt 0 ]] ; then
-    add_vote_table -1 buflint "${BUILDMODEMSG} ${statstring}"
-    add_footer_table buflint "@@BASE@@/diff-patch-buflint.txt"
+    add_vote_table_v2 -1 buflint \
+      "@@BASE@@/diff-patch-buflint.txt" \
+      "${BUILDMODEMSG} ${statstring}"
     return 1
   elif [[ ${fixedpatch} -gt 0 ]]; then
-    add_vote_table +1 buflint "${BUILDMODEMSG} ${statstring}"
+    add_vote_table_v2 +1 buflint "" "${BUILDMODEMSG} ${statstring}"
     return 0
   fi
 
-  add_vote_table +1 buflint "There were no new buf lint issues."
+  add_vote_table_v2 +1 buflint "" "There were no new buf lint issues."
   return 0
 }
 
diff --git a/precommit/src/main/shell/test-patch.d/checkmake.sh 
b/precommit/src/main/shell/test-patch.d/checkmake.sh
index da570d0..3d3d795 100755
--- a/precommit/src/main/shell/test-patch.d/checkmake.sh
+++ b/precommit/src/main/shell/test-patch.d/checkmake.sh
@@ -56,7 +56,7 @@ function checkmake_filefilter
 function checkmake_precheck
 {
   if ! verify_command checkmake "${CHECKMAKE}"; then
-    add_vote_table 0 checkmake "checkmake was not available."
+    add_vote_table_v2 0 checkmake "" "checkmake was not available."
     delete_test checkmake
   fi
 }
@@ -162,15 +162,14 @@ function checkmake_postapply
   statstring=$(generic_calcdiff_status "${numPrepatch}" "${numPostpatch}" 
"${diffPostpatch}" )
 
   if [[ ${diffPostpatch} -gt 0 ]] ; then
-    add_vote_table -1 checkmake "${BUILDMODEMSG} ${statstring}"
-    add_footer_table checkmake "@@BASE@@/diff-patch-checkmake.txt"
+    add_vote_table_v2 -1 checkmake "@@BASE@@/diff-patch-checkmake.txt" 
"${BUILDMODEMSG} ${statstring}"
     return 1
   elif [[ ${fixedpatch} -gt 0 ]]; then
-    add_vote_table +1 checkmake "${BUILDMODEMSG} ${statstring}"
+    add_vote_table_v2 +1 checkmake "" "${BUILDMODEMSG} ${statstring}"
     return 0
   fi
 
-  add_vote_table +1 checkmake "There were no new checkmake issues."
+  add_vote_table_v2 +1 checkmake "" "There were no new checkmake issues."
   return 0
 }
 
diff --git a/precommit/src/main/shell/test-patch.d/cmake.sh 
b/precommit/src/main/shell/test-patch.d/cmake.sh
index 5b5343d..b1a7871 100755
--- a/precommit/src/main/shell/test-patch.d/cmake.sh
+++ b/precommit/src/main/shell/test-patch.d/cmake.sh
@@ -77,7 +77,7 @@ function cmake_precheck
 {
   declare cmake_version
   if ! verify_command cmake "${CMAKE}"; then
-    add_vote_table -1 cmake "cmake was not available."
+    add_vote_table_v2 -1 cmake "" "cmake was not available."
     return 1
   fi
   # finally let folks know what version they'll be dealing with.
diff --git a/precommit/src/main/shell/test-patch.d/dupname.sh 
b/precommit/src/main/shell/test-patch.d/dupname.sh
index 26b3a3f..373ad48 100755
--- a/precommit/src/main/shell/test-patch.d/dupname.sh
+++ b/precommit/src/main/shell/test-patch.d/dupname.sh
@@ -111,18 +111,18 @@ function dupname_precheck
 
   if [[ ${count} -gt 0 ]]; then
     if [[ "${BUILDMODE}" != full ]]; then
-      add_vote_table -1 dupname "The patch has ${count}" \
+      add_vote_table_v2 -1 dupname "@@BASE@@/dupnames.txt" \
+        "The patch has ${count}" \
         " duplicated filenames that differ only in case."
-      add_footer_table dupname "@@BASE@@/dupnames.txt"
       yetus_error "ERROR: Won't apply the patch; may break the workspace."
       return 1
     else
-      add_vote_table -1 dupname "Source has ${count}" \
+      add_vote_table_v2 -1 dupname "@@BASE@@/dupnames.txt" \
+      "Source has ${count}" \
         " duplicated filenames that differ only in case."
-      add_footer_table dupname "@@BASE@@/dupnames.txt"
     fi
   else
-    add_vote_table +1 dupname "No case conflicting files found."
+    add_vote_table_v2 +1 dupname "" "No case conflicting files found."
   fi
 
   return 0
diff --git a/precommit/src/main/shell/test-patch.d/github.sh 
b/precommit/src/main/shell/test-patch.d/github.sh
index 1621feb..95c0ef3 100755
--- a/precommit/src/main/shell/test-patch.d/github.sh
+++ b/precommit/src/main/shell/test-patch.d/github.sh
@@ -606,14 +606,22 @@ function github_finalreport
   declare commentfile=${PATCH_DIR}/gitcommentfile.$$
   declare comment
   declare url
+  declare ela
+  declare subs
+  declare logfile
+  declare calctime
+  declare vote
+  declare emoji
 
   rm "${commentfile}" 2>/dev/null
 
   if [[ ${ROBOT} = "false"
-    || -z ${GITHUB_ISSUE} ]] ; then
+     || -z ${GITHUB_ISSUE} ]] ; then
     return 0
   fi
 
+  url=$(get_artifact_url)
+
   big_console_header "Adding comment to Github"
 
   if [[ ${result} == 0 ]]; then
@@ -624,64 +632,77 @@ function github_finalreport
   printf '\n\n\n\n' >>  "${commentfile}"
 
   i=0
-  until [[ ${i} -eq ${#TP_HEADER[@]} ]]; do
+  until [[ ${i} -ge ${#TP_HEADER[@]} ]]; do
     printf '%s\n\n' "${TP_HEADER[${i}]}" >> "${commentfile}"
     ((i=i+1))
   done
 
   {
     printf '\n\n'
-    echo "| Vote | Subsystem | Runtime | Comment |"
-    echo "|:----:|----------:|--------:|:--------|"
+    echo "| Vote | Subsystem | Runtime |  Logfile | Comment |"
+    echo "|:----:|----------:|--------:|:--------:|:-------:|"
   } >> "${commentfile}"
 
   i=0
-  until [[ ${i} -eq ${#TP_VOTE_TABLE[@]} ]]; do
+  until [[ ${i} -ge ${#TP_VOTE_TABLE[@]} ]]; do
     ourstring=$(echo "${TP_VOTE_TABLE[${i}]}" | tr -s ' ')
     vote=$(echo "${ourstring}" | cut -f2 -d\| | tr -d ' ')
     subs=$(echo "${ourstring}"  | cut -f3 -d\|)
     ela=$(echo "${ourstring}" | cut -f4 -d\|)
     calctime=$(clock_display "${ela}")
-    comment=$(echo "${ourstring}"  | cut -f5 -d\|)
-
+    logfile=$(echo "${ourstring}" | cut -f5 -d\| | tr -d ' ')
+    comment=$(echo "${ourstring}"  | cut -f6 -d\|)
 
     if [[ "${vote}" = "H" ]]; then
-      echo "||| _${comment}_ |" >> "${commentfile}"
+      echo "|||| _${comment}_ |" >> "${commentfile}"
+      ((i=i+1))
+      continue
+    fi
+
+    if [[ ${GITHUB_USE_EMOJI_VOTE} == true ]]; then
+      emoji=""
+      case ${vote} in
+        1|"+1")
+          emoji="+1 :green_heart:"
+        ;;
+        -1)
+          emoji="-1 :x:"
+        ;;
+        0)
+          emoji="+0 :ok:"
+        ;;
+        -0)
+          emoji="-0 :warning:"
+        ;;
+        H)
+          # this never gets called (see above) but this is here so others know 
the color is taken
+          emoji=""
+        ;;
+        *)
+          # usually this should not happen but let's keep the old vote result 
if it happens
+          emoji=${vote}
+        ;;
+      esac
+    else
+      emoji="${vote}"
+    fi
+
+    if [[ -n "${logfile}" ]]; then
+      t1=${logfile/@@BASE@@/}
+      t2=$(echo "${logfile}" | "${SED}" -e "s,@@BASE@@,${url},g")
+      t2="[${t1}](${t2})"
     else
-      if [[ ${GITHUB_USE_EMOJI_VOTE} == true ]]; then
-        emoji=""
-        case ${vote} in
-          1|"+1")
-            emoji="+1 :green_heart:"
-          ;;
-          -1)
-            emoji="-1 :x:"
-          ;;
-          0)
-            emoji="+0 :ok:"
-          ;;
-          -0)
-            emoji="-0 :warning:"
-          ;;
-          H)
-            # this never gets called (see above) but this is here so others 
know the color is taken
-            emoji=""
-          ;;
-          *)
-            # usually this should not happen but let's keep the old vote 
result if it happens
-            emoji=${vote}
-          ;;
-        esac
-        printf '| %s | %s | %s | %s |\n' \
-        "${emoji}" \
-        "${subs}" \
-        "${calctime}" \
-        "${comment}" \
-        >> "${commentfile}"
-      else
-        echo "${TP_VOTE_TABLE[${i}]}" >> "${commentfile}"
-      fi
+      t2=""
     fi
+
+    printf '| %s | %s | %s | %s | %s |\n' \
+      "${emoji}" \
+      "${subs}" \
+      "${calctime}" \
+      "${t2}" \
+      "${comment}" \
+      >> "${commentfile}"
+
     ((i=i+1))
   done
 
@@ -692,7 +713,7 @@ function github_finalreport
       echo "|-------:|:------|"
     } >> "${commentfile}"
     i=0
-    until [[ ${i} -eq ${#TP_TEST_TABLE[@]} ]]; do
+    until [[ ${i} -ge ${#TP_TEST_TABLE[@]} ]]; do
       echo "${TP_TEST_TABLE[${i}]}" >> "${commentfile}"
       ((i=i+1))
     done
@@ -704,13 +725,9 @@ function github_finalreport
     echo "|----------:|:-------------|"
   } >> "${commentfile}"
 
-
-  url=$(get_artifact_url)
-
   i=0
-  until [[ $i -eq ${#TP_FOOTER_TABLE[@]} ]]; do
-    comment=$(echo "${TP_FOOTER_TABLE[${i}]}" |
-              "${SED}" -e "s,@@BASE@@,${url},g")
+  until [[ $i -ge ${#TP_FOOTER_TABLE[@]} ]]; do
+    comment=$(echo "${TP_FOOTER_TABLE[${i}]}" | "${SED}" -e 
"s,@@BASE@@,${url},g")
     printf '%s\n' "${comment}" >> "${commentfile}"
     ((i=i+1))
   done
diff --git a/precommit/src/main/shell/test-patch.d/gitlab.sh 
b/precommit/src/main/shell/test-patch.d/gitlab.sh
index 3f582dd..a845c27 100755
--- a/precommit/src/main/shell/test-patch.d/gitlab.sh
+++ b/precommit/src/main/shell/test-patch.d/gitlab.sh
@@ -412,17 +412,25 @@ function gitlab_finalreport
   declare commentfile=${PATCH_DIR}/gitcommentfile.$$
   declare comment
   declare url
+  declare ela
+  declare subs
+  declare logfile
+  declare calctime
+  declare vote
+  declare emoji
 
   if [[ "${GITLAB_WRITE_ENABLED}" == "false" ]]; then
     return 0
   fi
 
+  url=$(get_artifact_url)
+
   rm "${commentfile}" 2>/dev/null
 
-  #if [[ ${ROBOT} = "false"
-  #  || -z ${GITLAB_ISSUE} ]] ; then
-  #  return 0
-  #fi
+  if [[ ${ROBOT} = "false"
+    || -z ${GITLAB_ISSUE} ]] ; then
+    return 0
+  fi
 
   big_console_header "Adding comment to Gitlab"
 
@@ -435,63 +443,77 @@ function gitlab_finalreport
   printf '\n\n\n\n' >>  "${commentfile}"
 
   i=0
-  until [[ ${i} -eq ${#TP_HEADER[@]} ]]; do
+  until [[ ${i} -ge ${#TP_HEADER[@]} ]]; do
     printf "%s\\n\\n" "${TP_HEADER[${i}]}" >> "${commentfile}"
     ((i=i+1))
   done
 
   {
     printf '\n\n'
-    echo "| Vote | Subsystem | Runtime | Comment |"
-    echo "|:----:|----------:|--------:|:--------|"
+    echo "| Vote | Subsystem | Runtime | Logfile | Comment |"
+    echo "|:----:|----------:|--------:|:-------:|:-------:|"
   } >> "${commentfile}"
 
   i=0
-  until [[ ${i} -eq ${#TP_VOTE_TABLE[@]} ]]; do
+  until [[ ${i} -ge ${#TP_VOTE_TABLE[@]} ]]; do
     ourstring=$(echo "${TP_VOTE_TABLE[${i}]}" | tr -s ' ')
     vote=$(echo "${ourstring}" | cut -f2 -d\| | tr -d ' ')
     subs=$(echo "${ourstring}"  | cut -f3 -d\|)
     ela=$(echo "${ourstring}" | cut -f4 -d\|)
     calctime=$(clock_display "${ela}")
-    comment=$(echo "${ourstring}"  | cut -f5 -d\|)
+    logfile=$(echo "${ourstring}" | cut -f5 -d\| | tr -d ' ')
+    comment=$(echo "${ourstring}"  | cut -f6 -d\|)
 
     if [[ "${vote}" = "H" ]]; then
-      echo "||| _${comment}_ |" >> "${commentfile}"
+      echo "|||| _${comment}_ |" >> "${commentfile}"
+      ((i=i+1))
+      continue
+    fi
+
+    if [[ ${GITLAB_USE_EMOJI_VOTE} == true ]]; then
+      emoji=""
+      case ${vote} in
+        1|"+1")
+          emoji="+1 :green_heart:"
+        ;;
+        -1)
+          emoji="-1 :x:"
+        ;;
+        0)
+          emoji="+0 :ok:"
+        ;;
+        -0)
+          emoji="-0 :warning:"
+        ;;
+        H)
+          # this never gets called (see above) but this is here so others know 
the color is taken
+          emoji=""
+        ;;
+        *)
+          # usually this should not happen but let's keep the old vote result 
if it happens
+          emoji=${vote}
+        ;;
+      esac
     else
-      if [[ ${GITLAB_USE_EMOJI_VOTE} == true ]]; then
-        emoji=""
-        case ${vote} in
-          1|"+1")
-            emoji="+1 :green_heart:"
-          ;;
-          -1)
-            emoji="-1 :x:"
-          ;;
-          0)
-            emoji="+0 :ok:"
-          ;;
-          -0)
-            emoji="-0 :warning:"
-          ;;
-          H)
-            # this never gets called (see above) but this is here so others 
know the color is taken
-            emoji=""
-          ;;
-          *)
-            # usually this should not happen but let's keep the old vote 
result if it happens
-            emoji=${vote}
-          ;;
-        esac
-        printf '| %s | %s | %s | %s |\n' \
-        "${emoji}" \
-        "${subs}" \
-        "${calctime}" \
-        "${comment}" \
-        >> "${commentfile}"
-      else
-        echo "${TP_VOTE_TABLE[${i}]}" >> "${commentfile}"
-      fi
+      emoji="${vote}"
     fi
+
+    if [[ -n "${logfile}" ]]; then
+      t1=${logfile/@@BASE@@/}
+      t2=$(echo "${logfile}" | "${SED}" -e "s,@@BASE@@,${url},g")
+      t2="[${t1}](${t2})"
+    else
+      t2=""
+    fi
+
+    printf '| %s | %s | %s | %s | %s |\n' \
+      "${emoji}" \
+      "${subs}" \
+      "${calctime}" \
+      "${t2}" \
+      "${comment}" \
+      >> "${commentfile}"
+
     ((i=i+1))
   done
 
@@ -502,7 +524,7 @@ function gitlab_finalreport
       echo "|-------:|:------|"
     } >> "${commentfile}"
     i=0
-    until [[ ${i} -eq ${#TP_TEST_TABLE[@]} ]]; do
+    until [[ ${i} -ge ${#TP_TEST_TABLE[@]} ]]; do
       echo "${TP_TEST_TABLE[${i}]}" >> "${commentfile}"
       ((i=i+1))
     done
@@ -515,12 +537,9 @@ function gitlab_finalreport
   } >> "${commentfile}"
 
 
-  url=$(get_artifact_url)
-
   i=0
-  until [[ $i -eq ${#TP_FOOTER_TABLE[@]} ]]; do
-    comment=$(echo "${TP_FOOTER_TABLE[${i}]}" |
-              "${SED}" -e "s,@@BASE@@,${url},g")
+  until [[ $i -ge ${#TP_FOOTER_TABLE[@]} ]]; do
+    comment=$(echo "${TP_FOOTER_TABLE[${i}]}" | "${SED}" -e 
"s,@@BASE@@,${url},g")
     printf '%s\n' "${comment}" >> "${commentfile}"
     ((i=i+1))
   done
diff --git a/precommit/src/main/shell/test-patch.d/golangci.sh 
b/precommit/src/main/shell/test-patch.d/golangci.sh
index 671cab4..5b988a9 100755
--- a/precommit/src/main/shell/test-patch.d/golangci.sh
+++ b/precommit/src/main/shell/test-patch.d/golangci.sh
@@ -65,7 +65,7 @@ function golangcilint_filefilter
 function golangcilint_precheck
 {
   if [[ -z "${GOLANGCI_LINT}" ]]; then
-    add_vote_table 0 golangcilint "golangci-lint was not found."
+    add_vote_table_v2 0 golangcilint "" "golangci-lint was not found."
     delete_test golangcilint
   fi
 }
@@ -179,15 +179,14 @@ function golangcilint_postapply
   statstring=$(generic_calcdiff_status "${numPrepatch}" "${numPostpatch}" 
"${diffPostpatch}" )
 
   if [[ ${diffPostpatch} -gt 0 ]] ; then
-    add_vote_table -1 golangcilint "${BUILDMODEMSG} ${statstring}"
-    add_footer_table golangcilint "@@BASE@@/diff-patch-golangcilint.txt"
+    add_vote_table_v2 -1 golangcilint "@@BASE@@/diff-patch-golangcilint.txt" 
"${BUILDMODEMSG} ${statstring}"
     return 1
   elif [[ ${fixedpatch} -gt 0 ]]; then
-    add_vote_table +1 golangcilint "${BUILDMODEMSG} ${statstring}"
+    add_vote_table_v2 +1 golangcilint "" "${BUILDMODEMSG} ${statstring}"
     return 0
   fi
 
-  add_vote_table +1 golangcilint "There were no new golangcilint issues."
+  add_vote_table_v2 +1 golangcilint "" "There were no new golangcilint issues."
   return 0
 }
 
diff --git a/precommit/src/main/shell/test-patch.d/gradle.sh 
b/precommit/src/main/shell/test-patch.d/gradle.sh
index 81f9966..dd3c3a6 100755
--- a/precommit/src/main/shell/test-patch.d/gradle.sh
+++ b/precommit/src/main/shell/test-patch.d/gradle.sh
@@ -37,7 +37,7 @@ function gradle_precheck
 
   pushd "${BASEDIR}" >/dev/null || return 1
   if ! verify_command gradle "${GRADLEW}"; then
-      add_vote_table -1 gradle "ERROR: gradlew is not available."
+      add_vote_table_v2 -1 gradle "" "ERROR: gradlew is not available."
       popd >/dev/null || return 1
       return 1
   fi
diff --git a/precommit/src/main/shell/test-patch.d/hadolint.sh 
b/precommit/src/main/shell/test-patch.d/hadolint.sh
index 89e53d7..1ea4170 100755
--- a/precommit/src/main/shell/test-patch.d/hadolint.sh
+++ b/precommit/src/main/shell/test-patch.d/hadolint.sh
@@ -40,7 +40,7 @@ function hadolint_precheck
   declare langs
 
   if ! verify_command "hadolint" "${HADOLINT}"; then
-    add_vote_table 0 hadolint "hadolint was not available."
+    add_vote_table_v2 0 hadolint "" "hadolint was not available."
     delete_test hadolint
   fi
 
@@ -181,16 +181,15 @@ function hadolint_postapply
   statstring=$(generic_calcdiff_status "${numPrepatch}" "${numPostpatch}" 
"${diffPostpatch}" )
 
   if [[ ${diffPostpatch} -gt 0 ]] ; then
-    add_vote_table -1 hadolint "${BUILDMODEMSG} ${statstring}"
-    add_footer_table hadolint "@@BASE@@/diff-patch-hadolint.txt"
+    add_vote_table_v2 -1 hadolint "@@BASE@@/diff-patch-hadolint.txt" 
"${BUILDMODEMSG} ${statstring}"
     bugsystem_linecomments_queue "hadolint" 
"${PATCH_DIR}/diff-patch-hadolint.txt"
     return 1
   elif [[ ${fixedpatch} -gt 0 ]]; then
-    add_vote_table +1 hadolint "${BUILDMODEMSG} ${statstring}"
+    add_vote_table_v2 +1 hadolint "" "${BUILDMODEMSG} ${statstring}"
     return 0
   fi
 
-  add_vote_table +1 hadolint "There were no new hadolint issues."
+  add_vote_table_v2 +1 hadolint "" "There were no new hadolint issues."
   return 0
 }
 
diff --git a/precommit/src/main/shell/test-patch.d/htmlout.sh 
b/precommit/src/main/shell/test-patch.d/htmlout.sh
index 9290836..7555ccf 100755
--- a/precommit/src/main/shell/test-patch.d/htmlout.sh
+++ b/precommit/src/main/shell/test-patch.d/htmlout.sh
@@ -85,6 +85,10 @@ function htmlout_finalreport
   declare color
   declare comment
   declare calctime
+  declare url
+  declare logfile
+
+  url=$(get_artifact_url)
 
   rm "${commentfile}" 2>/dev/null
 
@@ -107,7 +111,7 @@ function htmlout_finalreport
   } >  "${commentfile}"
 
   i=0
-  until [[ $i -eq ${#TP_HEADER[@]} ]]; do
+  until [[ $i -ge ${#TP_HEADER[@]} ]]; do
     ourstring=$(echo "${TP_HEADER[${i}]}" | tr -s ' ')
     comment=$(echo "${ourstring}"  | cut -f2 -d\|)
     printf '<tr><td>%s</td></tr>\n' "${comment}"
@@ -120,18 +124,20 @@ function htmlout_finalreport
     echo "<th>Vote</th>"
     echo "<th>Subsystem</th>"
     echo "<th>Runtime</th>"
+    echo "<th>Log</th>"
     echo "<th>Comment</th>"
     echo "</tr>"
   } >> "${commentfile}"
 
   i=0
-  until [[ $i -eq ${#TP_VOTE_TABLE[@]} ]]; do
+  until [[ $i -ge ${#TP_VOTE_TABLE[@]} ]]; do
     ourstring=$(echo "${TP_VOTE_TABLE[${i}]}" | tr -s ' ')
     vote=$(echo "${ourstring}" | cut -f2 -d\| | tr -d ' ')
     subs=$(echo "${ourstring}"  | cut -f3 -d\|)
     ela=$(echo "${ourstring}" | cut -f4 -d\|)
     calctime=$(clock_display "${ela}")
-    comment=$(echo "${ourstring}"  | cut -f5 -d\|)
+    logfile=$(echo "${ourstring}" | cut -f5 -d\| | tr -d ' ')
+    comment=$(echo "${ourstring}"  | cut -f6 -d\|)
 
     if [[ "${vote}" = "H" ]]; then
       {
@@ -139,6 +145,7 @@ function htmlout_finalreport
         printf '\t\t<td></td>'
         printf "<td></td>"
         printf "<td></td>"
+        printf '<td></td>'
         printf '<td><font color=\"%s\">%s</font></td>\n' "brown" "${comment}"
         echo "</tr>"
       } >> "${commentfile}"
@@ -147,8 +154,7 @@ function htmlout_finalreport
     fi
 
     # summary line
-    if [[ -z ${vote}
-      && -n ${ela} ]]; then
+    if [[ -z ${vote} && -n ${ela} ]]; then
       color="black"
     elif [[ -z ${vote} ]]; then
       # keep same color
@@ -175,12 +181,19 @@ function htmlout_finalreport
     fi
 
     {
-      echo "<tr>"
-      printf '\t\t<td><font color=\"%s\">%s</font></td>' "${color}" "${vote}"
-      printf "<td><font color=\"%s\">%s</font></td>" "${color}" "${subs}"
-      printf "<td><font color=\"%s\">%s</font></td>" "${color}" "${calctime}"
+      printf "<tr>\n"
+      printf '\t\t<td><font color=\"%s\">%s</font></td>\n' "${color}" "${vote}"
+      printf "\t\t<td><font color=\"%s\">%s</font></td>\n" "${color}" "${subs}"
+      printf "\t\t<td><font color=\"%s\">%s</font></td>\n" "${color}" 
"${calctime}"
+      if [[ -n "${logfile}" ]]; then
+        t1=${logfile/@@BASE@@/}
+        t2="<a href=\"${url}${t1}\">${t1}</a>"
+        printf '<td><font color=\"%s\">%s</></font></td>\n' "${color}" "${t2}"
+      else
+        printf '<td></td>\n'
+      fi
       printf '<td><font color=\"%s\">%s</font></td>\n' "${color}" "${comment}"
-      echo "</tr>"
+      printf "</tr>\n"
     } >> "${commentfile}"
     ((i=i+1))
   done
@@ -199,7 +212,7 @@ function htmlout_finalreport
     } >> "${commentfile}"
 
     i=0
-    until [[ $i -eq ${#TP_TEST_TABLE[@]} ]]; do
+    until [[ $i -ge ${#TP_TEST_TABLE[@]} ]]; do
       ourstring=$(echo "${TP_TEST_TABLE[${i}]}" | tr -s ' ')
       subs=$(echo "${ourstring}"  | cut -f2 -d\|)
       comment=$(echo "${ourstring}"  | cut -f3 -d\|)
@@ -226,9 +239,8 @@ function htmlout_finalreport
     echo "</tr>"
   } >> "${commentfile}"
 
-  url=$(get_artifact_url)
   i=0
-  until [[ $i -eq ${#TP_FOOTER_TABLE[@]} ]]; do
+  until [[ $i -ge ${#TP_FOOTER_TABLE[@]} ]]; do
 
     # turn off file globbing. break apart the string by spaces.
     # if our string begins with @@BASE@@, then create a substring
diff --git a/precommit/src/main/shell/test-patch.d/java.sh 
b/precommit/src/main/shell/test-patch.d/java.sh
index a7d37e2..c2dddf0 100755
--- a/precommit/src/main/shell/test-patch.d/java.sh
+++ b/precommit/src/main/shell/test-patch.d/java.sh
@@ -111,7 +111,7 @@ function javac_precheck
 
   if [[ -z ${JAVA_HOME:-} ]]; then
     yetus_error "ERROR: JAVA_HOME is not defined."
-    add_vote_table -1 pre-patch "JAVA_HOME is not defined."
+    add_vote_table_v2 -1 pre-patch "" "JAVA_HOME is not defined."
     return 1
   fi
 
diff --git a/precommit/src/main/shell/test-patch.d/jira.sh 
b/precommit/src/main/shell/test-patch.d/jira.sh
index bc5104c..acbd0b7 100755
--- a/precommit/src/main/shell/test-patch.d/jira.sh
+++ b/precommit/src/main/shell/test-patch.d/jira.sh
@@ -247,7 +247,7 @@ function jira_locate_patch
   if [[ ! ${PATCHURL} =~ \.patch$ ]]; then
     if guess_patch_file "${patchout}"; then
       yetus_debug "The patch ${PATCHURL} was not named properly, but it looks 
like a patch file. Proceeding, but issue/branch matching might go awry."
-      add_vote_table 0 patch "The patch file was not named according to 
${PROJECT_NAME}'s naming conventions. Please see ${PATCH_NAMING_RULE} for 
instructions."
+      add_vote_table_v2 0 patch "" "The patch file was not named according to 
${PROJECT_NAME}'s naming conventions. Please see ${PATCH_NAMING_RULE} for 
instructions."
     else
       # this definitely isn't a patch so just bail out.
       return 1
@@ -418,6 +418,9 @@ function jira_finalreport
   declare comment
   declare calctime
   declare url
+  declare logfile
+
+  url=$(get_artifact_url)
 
   rm "${commentfile}" 2>/dev/null
 
@@ -426,9 +429,9 @@ function jira_finalreport
     return 0
   fi
 
-  if [[ -z "${JIRA_ISSUE}" ]]; then
-    return 0
-  fi
+  #if [[ -z "${JIRA_ISSUE}" ]]; then
+  #  return 0
+  #fi
 
   big_console_header "Adding comment to JIRA"
 
@@ -441,26 +444,27 @@ function jira_finalreport
   echo "\\\\" >>  "${commentfile}"
 
   i=0
-  until [[ $i -eq ${#TP_HEADER[@]} ]]; do
+  until [[ $i -ge ${#TP_HEADER[@]} ]]; do
     printf '%s\n' "${TP_HEADER[${i}]}" >> "${commentfile}"
     ((i=i+1))
   done
 
   echo "\\\\" >>  "${commentfile}"
 
-  echo "|| Vote || Subsystem || Runtime || Comment ||" >> "${commentfile}"
+  echo "|| Vote || Subsystem || Runtime ||  Logfile || Comment ||" >> 
"${commentfile}"
 
   i=0
-  until [[ $i -eq ${#TP_VOTE_TABLE[@]} ]]; do
+  until [[ $i -ge ${#TP_VOTE_TABLE[@]} ]]; do
     ourstring=$(echo "${TP_VOTE_TABLE[${i}]}" | tr -s ' ')
     vote=$(echo "${ourstring}" | cut -f2 -d\| | tr -d ' ')
     subs=$(echo "${ourstring}"  | cut -f3 -d\|)
     ela=$(echo "${ourstring}" | cut -f4 -d\|)
     calctime=$(clock_display "${ela}")
-    comment=$(echo "${ourstring}"  | cut -f5 -d\|)
+    logfile=$(echo "${ourstring}" | cut -f5 -d\| | tr -d ' ')
+    comment=$(echo "${ourstring}"  | cut -f6 -d\|)
 
     if [[ "${vote}" = "H" ]]; then
-      echo "|| || || || {color:brown}${comment}{color} ||" >> "${commentfile}"
+      echo "|| || || || {color:brown}${comment}{color} || ||" >> 
"${commentfile}"
       ((i=i+1))
       continue
     fi
@@ -496,10 +500,17 @@ function jira_finalreport
         ;;
       esac
     fi
-    printf '| {color:%s}%s{color} | {color:%s}%s{color} | {color:%s}%s{color} 
| {color:%s}%s{color} |\n' \
+    if [[ -n "${logfile}" ]]; then
+      logfile=$(echo "${logfile}" |
+              "${SED}" -e "s,@@BASE@@,${url},g")
+    else
+      logfile=""
+    fi
+    printf '| {color:%s}%s{color} | {color:%s}%s{color} | {color:%s}%s{color} 
| {color:%s}%s{color} | {color:%s}%s{color} |\n' \
       "${color}" "${vote}" \
       "${color}" "${subs}" \
       "${color}" "${calctime}" \
+      "${color}" "${logfile}" \
       "${color}" "${comment}" \
       >> "${commentfile}"
     ((i=i+1))
@@ -510,7 +521,7 @@ function jira_finalreport
 
     echo "|| Reason || Tests ||" >>  "${commentfile}"
     i=0
-    until [[ $i -eq ${#TP_TEST_TABLE[@]} ]]; do
+    until [[ $i -ge ${#TP_TEST_TABLE[@]} ]]; do
       printf '%s\n' "${TP_TEST_TABLE[${i}]}" >> "${commentfile}"
       ((i=i+1))
     done
@@ -518,18 +529,18 @@ function jira_finalreport
 
   { echo "\\\\" ; echo "\\\\"; } >>  "${commentfile}"
 
-  url=$(get_artifact_url)
 
   echo "|| Subsystem || Report/Notes ||" >> "${commentfile}"
   i=0
-  until [[ $i -eq ${#TP_FOOTER_TABLE[@]} ]]; do
-    comment=$(echo "${TP_FOOTER_TABLE[${i}]}" |
-              "${SED}" -e "s,@@BASE@@,${url},g")
+  until [[ $i -ge ${#TP_FOOTER_TABLE[@]} ]]; do
+    comment=$(echo "${TP_FOOTER_TABLE[${i}]}" | "${SED}" -e 
"s,@@BASE@@,${url},g")
     printf '%s\n' "${comment}" >> "${commentfile}"
     ((i=i+1))
   done
 
   printf '\n\nThis message was automatically generated.\n\n' >> 
"${commentfile}"
 
+  cp "${commentfile}" "${commentfile}-jira.txt"
+
   jira_write_comment "${commentfile}"
 }
diff --git a/precommit/src/main/shell/test-patch.d/jshint.sh 
b/precommit/src/main/shell/test-patch.d/jshint.sh
index 8578b09..a993eed 100755
--- a/precommit/src/main/shell/test-patch.d/jshint.sh
+++ b/precommit/src/main/shell/test-patch.d/jshint.sh
@@ -59,7 +59,7 @@ function jshint_filefilter
 function jshint_precheck
 {
   if ! verify_command "jshint" "${JSHINT}"; then
-    add_vote_table 0 jshint "jshint was not available."
+    add_vote_table_v2 0 jshint "" "jshint was not available."
     delete_test jshint
   fi
 
@@ -187,16 +187,15 @@ function jshint_postapply
   statstring=$(generic_calcdiff_status "${numPrepatch}" "${numPostpatch}" 
"${diffPostpatch}" )
 
   if [[ ${diffPostpatch} -gt 0 ]] ; then
-    add_vote_table -1 jshint "${BUILDMODEMSG} ${statstring}"
-    add_footer_table jshint "@@BASE@@/diff-patch-jshint.txt"
+    add_vote_table_v2 -1 jshint "@@BASE@@/diff-patch-jshint.txt" 
"${BUILDMODEMSG} ${statstring}"
     bugsystem_linecomments_queue "jshint" "${PATCH_DIR}/diff-patch-jshint.txt"
     return 1
   elif [[ ${fixedpatch} -gt 0 ]]; then
-    add_vote_table +1 jshint "${BUILDMODEMSG} ${statstring}"
+    add_vote_table_v2 +1 jshint "" "${BUILDMODEMSG} ${statstring}"
     return 0
   fi
 
-  add_vote_table +1 jshint "There were no new jshint issues."
+  add_vote_table_v2 +1 jshint "" "There were no new jshint issues."
   return 0
 }
 
diff --git a/precommit/src/main/shell/test-patch.d/junit.sh 
b/precommit/src/main/shell/test-patch.d/junit.sh
index 48b3b96..cde5c03 100755
--- a/precommit/src/main/shell/test-patch.d/junit.sh
+++ b/precommit/src/main/shell/test-patch.d/junit.sh
@@ -143,8 +143,10 @@ function junit_finalreport
   declare vote
   declare subs
   declare ela
-  declare footsub
   declare footcomment
+  declare logfile
+  declare comment
+  declare url
 
   if [[ -z "${JUNIT_REPORT_XML}" ]]; then
     return
@@ -160,12 +162,13 @@ cat << EOF > "${JUNIT_REPORT_XML}"
 EOF
 
   i=0
-  until [[ $i -eq ${#TP_VOTE_TABLE[@]} ]]; do
+  until [[ $i -ge ${#TP_VOTE_TABLE[@]} ]]; do
     ourstring=$(echo "${TP_VOTE_TABLE[${i}]}" | tr -s ' ')
     vote=$(echo "${ourstring}" | cut -f2 -d\|)
     subs=$(echo "${ourstring}"  | cut -f3 -d\|)
     ela=$(echo "${ourstring}" | cut -f4 -d\|)
-    msg=$(echo "${ourstring}" | cut -f5 -d\|)
+    logfile=$(echo "${ourstring}" | cut -f5 -d\| | tr -d ' ')
+    comment=$(echo "${ourstring}"  | cut -f6 -d\|)
 
     subs=${subs// }
 
@@ -195,27 +198,17 @@ EOF
         "${failures}" \
         "${ela}"
       if [[ "${failures}" == 1 ]]; then
-        msg=$(escape_html "${msg}")
-        printf "<failure message=\"%s\">" "${msg}"
-        j=0
-        until [[ $j -eq ${#TP_FOOTER_TABLE[@]} ]]; do
-          if [[ "${TP_FOOTER_TABLE[${j}]}" =~ \@\@BASE\@\@ ]]; then
-            footsub=$(echo "${TP_FOOTER_TABLE[${j}]}" | cut -f2 -d\|)
-            footcomment=$(echo "${TP_FOOTER_TABLE[${j}]}" |
-                        cut -f3 -d\| |
-                        "${SED}" -e "s,@@BASE@@,${PATCH_DIR},g")
-            if [[ -n "${url}" ]]; then
-              footcomment=$(echo "${TP_FOOTER_TABLE[${j}]}" |
-                        cut -f3 -d\| |
-                        "${SED}" -e "s,@@BASE@@,${url},g")
-            fi
-            if [[ "${footsub// }" == "${subs}" ]]; then
-              footcomment=$(escape_html "${footcomment}")
-              echo "${footcomment}"
-            fi
+        comment=$(escape_html "${comment}")
+        printf "<failure message=\"%s\">" "${comment}"
+
+        if [[ -n "${logfile}" ]]; then
+          if [[ -n "${url}" ]]; then
+            footcomment=$(echo "${logfile}" | "${SED}" -e 
"s,@@BASE@@,${url},g")
+          else
+            footcomment=$(echo "${logfile}" | "${SED}" -e 
"s,@@BASE@@,${PATCH_DIR},g")
           fi
-          ((j=j+1))
-        done
+          escape_html "${footcomment}"
+        fi
         echo "</failure>"
       fi
       echo "</testcase>"
diff --git a/precommit/src/main/shell/test-patch.d/make.sh 
b/precommit/src/main/shell/test-patch.d/make.sh
index 86ba512..d514f0e 100755
--- a/precommit/src/main/shell/test-patch.d/make.sh
+++ b/precommit/src/main/shell/test-patch.d/make.sh
@@ -38,7 +38,7 @@ function make_precheck
 {
   declare make_version
   if ! verify_command make "${MAKE}"; then
-    add_vote_table -1 make "make was not available."
+    add_vote_table_v2 -1 make "" "make was not available."
     return 1
   fi
   # finally let folks know what version they'll be dealing with.
diff --git a/precommit/src/main/shell/test-patch.d/markdownlint.sh 
b/precommit/src/main/shell/test-patch.d/markdownlint.sh
index a94ac09..8812e27 100755
--- a/precommit/src/main/shell/test-patch.d/markdownlint.sh
+++ b/precommit/src/main/shell/test-patch.d/markdownlint.sh
@@ -38,7 +38,7 @@ function markdownlint_filefilter
 function markdownlint_precheck
 {
   if ! verify_command "markdownlint" "${MARKDOWNLINT}"; then
-    add_vote_table 0 markdownlint "markdownlint was not available."
+    add_vote_table_v2 0 markdownlint "" "markdownlint was not available."
     delete_test markdownlint
   fi
 }
@@ -143,16 +143,15 @@ function markdownlint_postapply
   statstring=$(generic_calcdiff_status "${numPrepatch}" "${numPostpatch}" 
"${diffPostpatch}" )
 
   if [[ ${diffPostpatch} -gt 0 ]] ; then
-    add_vote_table -1 markdownlint "${BUILDMODEMSG} ${statstring}"
-    add_footer_table markdownlint "@@BASE@@/diff-patch-markdownlint.txt"
+    add_vote_table_v2 -1 markdownlint "@@BASE@@/diff-patch-markdownlint.txt" 
"${BUILDMODEMSG} ${statstring}"
     bugsystem_linecomments_queue "markdownlint" 
"${PATCH_DIR}/diff-patch-markdownlint.txt"
     return 1
   elif [[ ${fixedpatch} -gt 0 ]]; then
-    add_vote_table +1 markdownlint "${BUILDMODEMSG} ${statstring}"
+    add_vote_table_v2 +1 markdownlint "" "${BUILDMODEMSG} ${statstring}"
     return 0
   fi
 
-  add_vote_table +1 markdownlint "There were no new markdownlint issues."
+  add_vote_table_v2 +1 markdownlint "" "There were no new markdownlint issues."
   return 0
 }
 
diff --git a/precommit/src/main/shell/test-patch.d/maven.sh 
b/precommit/src/main/shell/test-patch.d/maven.sh
index 51ae26a..d98ebcb 100755
--- a/precommit/src/main/shell/test-patch.d/maven.sh
+++ b/precommit/src/main/shell/test-patch.d/maven.sh
@@ -216,7 +216,7 @@ function maven_precheck
   fi
 
   if ! verify_command maven "${MAVEN}"; then
-    add_vote_table -1 maven "ERROR: maven was not available."
+    add_vote_table_v2 -1 maven "" "ERROR: maven was not available."
     return 1
   fi
 
@@ -857,17 +857,15 @@ function maven_reorder_modules
 
   if [[ "${BUILDMODE}" = patch ]]; then
     if [[ ${ret} == 0 ]]; then
-      add_vote_table 0 mvndep "Maven dependency ordering for ${repostatus}"
+      add_vote_table_v2 0 mvndep "" "Maven dependency ordering for 
${repostatus}"
     else
-      add_vote_table -1 mvndep "Maven dependency ordering for ${repostatus}"
-      add_footer_table mvndep "${MAVEN_DEP_LOG}"
+      add_vote_table_v2 -1 mvndep "@@BASE@@/${MAVEN_DEP_LOG}" "Maven 
dependency ordering for ${repostatus}"
     fi
   else
     if [[ ${ret} == 0 ]]; then
-      add_vote_table 0 mvndep "Maven dependency ordering"
+      add_vote_table_v2 0 mvndep "" "Maven dependency ordering"
     else
-      add_vote_table -1 mvndep "Maven dependency ordering"
-      add_footer_table mvndep "${MAVEN_DEP_LOG}"
+      add_vote_table_v2 -1 mvndep "@@BASE@@/${MAVEN_DEP_LOG}" "Maven 
dependency ordering"
     fi
   fi
 
diff --git a/precommit/src/main/shell/test-patch.d/pathlen.sh 
b/precommit/src/main/shell/test-patch.d/pathlen.sh
index f056003..50b0abb 100755
--- a/precommit/src/main/shell/test-patch.d/pathlen.sh
+++ b/precommit/src/main/shell/test-patch.d/pathlen.sh
@@ -78,9 +78,9 @@ function pathlen_generic
   # shellcheck disable=SC2016
   echo "${counter} files in the ${msg} with paths longer that ${PATHLEN_SIZE}."
   if [[ ${counter} -gt 0 ]] ; then
-    add_vote_table -1 pathlen \
+    add_vote_table_v2 -1 pathlen \
+      "@@BASE@@/pathlen.txt" \
       "${BUILDMODEMSG} appears to contain ${counter} files with names longer 
than ${PATHLEN_SIZE}"
-    add_footer_table pathlen "@@BASE@@/pathlen.txt"
     return 1
   fi
   return 0
diff --git a/precommit/src/main/shell/test-patch.d/perlcritic.sh 
b/precommit/src/main/shell/test-patch.d/perlcritic.sh
index 8290378..8ed9966 100755
--- a/precommit/src/main/shell/test-patch.d/perlcritic.sh
+++ b/precommit/src/main/shell/test-patch.d/perlcritic.sh
@@ -53,7 +53,7 @@ function perlcritic_filefilter
 function perlcritic_precheck
 {
   if ! verify_command "Perl::Critic" "${PERLCRITIC}"; then
-    add_vote_table 0 perlcritic "Perl::Critic was not available."
+    add_vote_table_v2 0 perlcritic "" "Perl::Critic was not available."
     delete_test perlcritic
   fi
 }
@@ -150,15 +150,14 @@ function perlcritic_postapply
   statstring=$(generic_calcdiff_status "${numPrepatch}" "${numPostpatch}" 
"${diffPostpatch}" )
 
   if [[ ${diffPostpatch} -gt 0 ]]; then
-    add_vote_table -1 perlcritic "${BUILDMODEMSG} ${statstring}"
-    add_footer_table perlcritic "@@BASE@@/diff-patch-perlcritic.txt"
+    add_vote_table_v2 -1 perlcritic "@@BASE@@/diff-patch-perlcritic.txt" 
"${BUILDMODEMSG} ${statstring}"
     return 1
   elif [[ ${fixedpatch} -gt 0 ]]; then
-    add_vote_table +1 perlcritic "${BUILDMODEMSG} ${statstring}"
+    add_vote_table_v2 +1 perlcritic "" "${BUILDMODEMSG} ${statstring}"
     return 0
   fi
 
-  add_vote_table +1 perlcritic "There were no new perlcritic issues."
+  add_vote_table_v2 +1 perlcritic "" "There were no new perlcritic issues."
   return 0
 }
 
diff --git a/precommit/src/main/shell/test-patch.d/pylint.sh 
b/precommit/src/main/shell/test-patch.d/pylint.sh
index d0a83bf..4133ade 100755
--- a/precommit/src/main/shell/test-patch.d/pylint.sh
+++ b/precommit/src/main/shell/test-patch.d/pylint.sh
@@ -77,12 +77,12 @@ function pylint_filefilter
 function pylint_precheck
 {
   if ! verify_command "Pylint" "${PYLINT}"; then
-    add_vote_table 0 pylint "Pylint was not available."
+    add_vote_table_v2 0 pylint "" "Pylint was not available."
     delete_test pylint
   fi
 
   if [[ "${PYLINT_REQUIREMENTS}" == true ]] && ! verify_command pip 
"${PYLINT_PIP_CMD}"; then
-    add_vote_table 0 pylint "pip command not available. Will process without 
it."
+    add_vote_table_v2 0 pylint "" "pip command not available. Will process 
without it."
   fi
 }
 
@@ -159,8 +159,7 @@ function pylint_executor
   if [[ -f ${PATCH_DIR}/${pylintStderr} ]]; then
     count=$("${GREP}"  -Evc "^(No config file found|Using config file)" 
"${PATCH_DIR}/${pylintStderr}")
     if [[ ${count} -gt 0 ]]; then
-      add_vote_table -1 pylint "Error running pylint. Please check pylint 
stderr files."
-      add_footer_table pylint "@@BASE@@/${pylintStderr}"
+      add_vote_table_v2 -1 pylint "@@BASE@@/${pylintStderr}" "Error running 
pylint. Please check pylint stderr files."
       return 1
     fi
   fi
@@ -217,15 +216,14 @@ function pylint_postapply
   statstring=$(generic_calcdiff_status "${numPrepatch}" "${numPostpatch}" 
"${diffPostpatch}" )
 
   if [[ ${diffPostpatch} -gt 0 ]] ; then
-    add_vote_table -1 pylint "${BUILDMODEMSG} ${statstring}"
-    add_footer_table pylint "@@BASE@@/diff-patch-pylint.txt"
+    add_vote_table_v2 -1 pylint "@@BASE@@/diff-patch-pylint.txt" 
"${BUILDMODEMSG} ${statstring}"
     return 1
   elif [[ ${fixedpatch} -gt 0 ]]; then
-    add_vote_table +1 pylint "${BUILDMODEMSG} ${statstring}"
+    add_vote_table_v2 +1 pylint "" "${BUILDMODEMSG} ${statstring}"
     return 0
   fi
 
-  add_vote_table +1 pylint "There were no new pylint issues."
+  add_vote_table_v2 +1 pylint "" "There were no new pylint issues."
   return 0
 }
 
diff --git a/precommit/src/main/shell/test-patch.d/revive.sh 
b/precommit/src/main/shell/test-patch.d/revive.sh
index 71901e4..3f13805 100755
--- a/precommit/src/main/shell/test-patch.d/revive.sh
+++ b/precommit/src/main/shell/test-patch.d/revive.sh
@@ -58,7 +58,7 @@ function revive_filefilter
 function revive_precheck
 {
   if ! verify_command revive "${REVIVE}"; then
-    add_vote_table 0 revive "revive was not available."
+    add_vote_table_v2 0 revive "" "revive was not available."
     delete_test revive
   fi
 }
@@ -159,15 +159,14 @@ function revive_postapply
   statstring=$(generic_calcdiff_status "${numPrepatch}" "${numPostpatch}" 
"${diffPostpatch}" )
 
   if [[ ${diffPostpatch} -gt 0 ]] ; then
-    add_vote_table -1 revive "${BUILDMODEMSG} ${statstring}"
-    add_footer_table revive "@@BASE@@/diff-patch-revive.txt"
+    add_vote_table_v2 -1 revive "@@BASE@@/diff-patch-revive.txt" 
"${BUILDMODEMSG} ${statstring}"
     return 1
   elif [[ ${fixedpatch} -gt 0 ]]; then
-    add_vote_table +1 revive "${BUILDMODEMSG} ${statstring}"
+    add_vote_table_v2 +1 revive "" "${BUILDMODEMSG} ${statstring}"
     return 0
   fi
 
-  add_vote_table +1 revive "There were no new revive issues."
+  add_vote_table_v2 +1 revive "" "There were no new revive issues."
   return 0
 }
 
diff --git a/precommit/src/main/shell/test-patch.d/rubocop.sh 
b/precommit/src/main/shell/test-patch.d/rubocop.sh
index 143d038..e8bdb94 100755
--- a/precommit/src/main/shell/test-patch.d/rubocop.sh
+++ b/precommit/src/main/shell/test-patch.d/rubocop.sh
@@ -58,7 +58,7 @@ function rubocop_filefilter
 function rubocop_precheck
 {
   if ! verify_command rubocop "${RUBOCOP}"; then
-    add_vote_table 0 rubocop "rubocop was not available."
+    add_vote_table_v2 0 rubocop "" "rubocop was not available."
     delete_test rubocop
   fi
 }
@@ -164,15 +164,14 @@ function rubocop_postapply
   statstring=$(generic_calcdiff_status "${numPrepatch}" "${numPostpatch}" 
"${diffPostpatch}" )
 
   if [[ ${diffPostpatch} -gt 0 ]] ; then
-    add_vote_table -1 rubocop "${BUILDMODEMSG} ${statstring}"
-    add_footer_table rubocop "@@BASE@@/diff-patch-rubocop.txt"
+    add_vote_table_v2 -1 rubocop "@@BASE@@/diff-patch-rubocop.txt" 
"${BUILDMODEMSG} ${statstring}"
     return 1
   elif [[ ${fixedpatch} -gt 0 ]]; then
-    add_vote_table +1 rubocop "${BUILDMODEMSG} ${statstring}"
+    add_vote_table_v2 +1 rubocop "" "${BUILDMODEMSG} ${statstring}"
     return 0
   fi
 
-  add_vote_table +1 rubocop "There were no new rubocop issues."
+  add_vote_table_v2 +1 rubocop "" "There were no new rubocop issues."
   return 0
 }
 
diff --git a/precommit/src/main/shell/test-patch.d/shellcheck.sh 
b/precommit/src/main/shell/test-patch.d/shellcheck.sh
index 729494a..7e45f15 100755
--- a/precommit/src/main/shell/test-patch.d/shellcheck.sh
+++ b/precommit/src/main/shell/test-patch.d/shellcheck.sh
@@ -56,7 +56,7 @@ function shellcheck_precheck
   declare langs
 
   if ! verify_command "shellcheck" "${SHELLCHECK}"; then
-    add_vote_table 0 shellcheck "Shellcheck was not available."
+    add_vote_table_v2 0 shellcheck "" "Shellcheck was not available."
     delete_test shellcheck
   else
     # shellcheck disable=SC2016
@@ -248,16 +248,15 @@ function shellcheck_postapply
   statstring=$(generic_calcdiff_status "${numPrepatch}" "${numPostpatch}" 
"${diffPostpatch}" )
 
   if [[ ${diffPostpatch} -gt 0 ]] ; then
-    add_vote_table -1 shellcheck "${BUILDMODEMSG} ${statstring}"
-    add_footer_table shellcheck "@@BASE@@/diff-patch-shellcheck.txt"
+    add_vote_table_v2 -1 shellcheck "@@BASE@@/diff-patch-shellcheck.txt" 
"${BUILDMODEMSG} ${statstring}"
     bugsystem_linecomments_queue "shellcheck" 
"${PATCH_DIR}/diff-patch-shellcheck.txt"
     return 1
   elif [[ ${fixedpatch} -gt 0 ]]; then
-    add_vote_table +1 shellcheck "${BUILDMODEMSG} ${statstring}"
+    add_vote_table_v2 +1 shellcheck "" "${BUILDMODEMSG} ${statstring}"
     return 0
   fi
 
-  add_vote_table +1 shellcheck "There were no new shellcheck issues."
+  add_vote_table_v2 +1 shellcheck "" "There were no new shellcheck issues."
   return 0
 }
 
diff --git a/precommit/src/main/shell/test-patch.d/shelldocs.sh 
b/precommit/src/main/shell/test-patch.d/shelldocs.sh
index 082e85b..b3d79bd 100755
--- a/precommit/src/main/shell/test-patch.d/shelldocs.sh
+++ b/precommit/src/main/shell/test-patch.d/shelldocs.sh
@@ -74,7 +74,7 @@ function shelldocs_filefilter
 function shelldocs_precheck
 {
   if ! verify_command "shelldocs" "${SHELLDOCS}"; then
-    add_vote_table 0 shelldocs "Shelldocs was not available."
+    add_vote_table_v2 0 shelldocs "" "Shelldocs was not available."
     delete_test shelldocs
   fi
 }
@@ -177,16 +177,15 @@ function shelldocs_postapply
   statstring=$(generic_calcdiff_status "${numPrepatch}" "${numPostpatch}" 
"${diffPostpatch}" )
 
   if [[ ${diffPostpatch} -gt 0 ]] ; then
-    add_vote_table -1 shelldocs "${BUILDMODEMSG} ${statstring}"
-    add_footer_table shelldocs "@@BASE@@/diff-patch-shelldocs.txt"
+    add_vote_table_v2 -1 shelldocs "@@BASE@@/diff-patch-shelldocs.txt" 
"${BUILDMODEMSG} ${statstring}"
     bugsystem_linecomments_queue "shelldocs" 
"${PATCH_DIR}/diff-patch-shelldocs.txt"
     return 1
   elif [[ ${fixedpatch} -gt 0 ]]; then
-    add_vote_table +1 shelldocs "${BUILDMODEMSG} ${statstring}"
+    add_vote_table_v2 +1 shelldocs "" "${BUILDMODEMSG} ${statstring}"
     return 0
   fi
 
-  add_vote_table +1 shelldocs "There were no new shelldocs issues."
+  add_vote_table_v2 +1 shelldocs "" "There were no new shelldocs issues."
   return 0
 }
 
diff --git a/precommit/src/main/shell/test-patch.d/spotbugs.sh 
b/precommit/src/main/shell/test-patch.d/spotbugs.sh
index 5c4def1..b946a15 100755
--- a/precommit/src/main/shell/test-patch.d/spotbugs.sh
+++ b/precommit/src/main/shell/test-patch.d/spotbugs.sh
@@ -115,7 +115,7 @@ function spotbugs_precheck
     done
   fi
   if [[ ${status} == 1 ]]; then
-    add_vote_table 0 "${SPOTBUGS_MODE}" "${SPOTBUGS_MODE} executables are not 
available."
+    add_vote_table_v2 0 "${SPOTBUGS_MODE}" "" "${SPOTBUGS_MODE} executables 
are not available."
     delete_test "${SPOTBUGS_MODE}"
   fi
 }
@@ -152,7 +152,7 @@ function spotbugs_runner
   echo ""
 
   if [[ "${SPOTBUGS_TABLE_DUPE}" == true ]] && [[ "${name}" == branch ]]; then
-    add_vote_table 0 spotbugs "Both FindBugs and SpotBugs are enabled, using 
SpotBugs."
+    add_vote_table_v2 0 spotbugs "" "Both FindBugs and SpotBugs are enabled, 
using SpotBugs."
   fi
 
   #shellcheck disable=SC2153
@@ -283,7 +283,7 @@ function spotbugs_preapply
   fi
 
   if [[ "${SPOTBUGS_MODE}" == findbugs ]]; then
-    add_vote_table 0 spotbugs "Used deprecated FindBugs config; considering 
switching to SpotBugs."
+    add_vote_table_v2 0 spotbugs "" "Used deprecated FindBugs config; 
considering switching to SpotBugs."
   fi
 
   until [[ ${modindex} -eq ${#MODULE[@]} ]]; do
diff --git a/precommit/src/main/shell/test-patch.d/test4tests.sh 
b/precommit/src/main/shell/test-patch.d/test4tests.sh
index 6c3230c..fe1eb33 100755
--- a/precommit/src/main/shell/test-patch.d/test4tests.sh
+++ b/precommit/src/main/shell/test-patch.d/test4tests.sh
@@ -48,13 +48,13 @@ function test4tests_patchfile
 
   echo "There appear to be ${testReferences} test file(s) referenced in the 
patch."
   if [[ ${testReferences} == 0 ]] ; then
-    add_vote_table -1 "test4tests" \
+    add_vote_table_v2 -1 "test4tests" "" \
       "The patch doesn't appear to include any new or modified tests. " \
       "Please justify why no new tests are needed for this patch." \
       "Also please list what manual steps were performed to verify this patch."
     return 1
   fi
-  add_vote_table +1 "test4tests" \
+  add_vote_table_v2 +1 "" "test4tests" \
     "The patch appears to include ${testReferences} new or modified test 
files."
   return 0
 }
diff --git a/precommit/src/main/shell/test-patch.d/unitveto.sh 
b/precommit/src/main/shell/test-patch.d/unitveto.sh
index ab758a3..28acb56 100755
--- a/precommit/src/main/shell/test-patch.d/unitveto.sh
+++ b/precommit/src/main/shell/test-patch.d/unitveto.sh
@@ -60,6 +60,6 @@ function unitveto_patchfile
     return 0
   fi
 
-  add_vote_table -1 unitveto "Patch requires manual testing."
+  add_vote_table_v2 -1 unitveto "" "Patch requires manual testing."
   return 1
 }
diff --git a/precommit/src/main/shell/test-patch.d/whitespace.sh 
b/precommit/src/main/shell/test-patch.d/whitespace.sh
index 29963f9..636b71b 100755
--- a/precommit/src/main/shell/test-patch.d/whitespace.sh
+++ b/precommit/src/main/shell/test-patch.d/whitespace.sh
@@ -144,16 +144,18 @@ function whitespace_postcompile
 
   if [[ ${count} -gt 0 ]]; then
     if [[ "${BUILDMODE}" = full ]]; then
-      add_vote_table -1 whitespace "${BUILDMODEMSG} has ${count} line(s) that 
end in whitespace."
+      add_vote_table_v2 -1 whitespace \
+        "@@BASE@@/whitespace-eol.txt" \
+        "${BUILDMODEMSG} has ${count} line(s) that end in whitespace."
     else
-      add_vote_table -1 whitespace \
+      add_vote_table_v2 -1 whitespace \
+        "@@BASE@@/whitespace-eol.txt" \
         "${BUILDMODEMSG} has ${count} line(s) that end in whitespace. Use git 
apply --whitespace=fix <<patch_file>>. Refer https://git-scm.com/docs/git-apply";
     fi
 
     if [[ -n "${BUGLINECOMMENTS}" ]]; then
       whitespace_linecomment_reporter "${PATCH_DIR}/whitespace-eol.txt" "end 
of line"
     fi
-    add_footer_table whitespace "@@BASE@@/whitespace-eol.txt"
     ((result=result+1))
   fi
 
@@ -161,9 +163,9 @@ function whitespace_postcompile
   count=$(wc -l "${PATCH_DIR}/whitespace-tabs.txt" | ${AWK} '{print $1}')
 
   if [[ ${count} -gt 0 ]]; then
-    add_vote_table -1 whitespace "${BUILDMODEMSG} ${count}"\
-      " line(s) with tabs."
-    add_footer_table whitespace "@@BASE@@/whitespace-tabs.txt"
+    add_vote_table_v2 -1 whitespace \
+      "@@BASE@@/whitespace-tabs.txt" \
+      "${BUILDMODEMSG} ${count} line(s) with tabs."
     if [[ -n "${BUGLINECOMMENTS}" ]]; then
       whitespace_linecomment_reporter "${PATCH_DIR}/whitespace-tabs.txt" "tabs 
in line"
     fi
@@ -176,6 +178,6 @@ function whitespace_postcompile
     return 1
   fi
 
-  add_vote_table +1 whitespace "${BUILDMODEMSG} has no whitespace issues."
+  add_vote_table_v2 +1 whitespace "" "${BUILDMODEMSG} has no whitespace 
issues."
   return 0
 }
diff --git a/precommit/src/main/shell/test-patch.d/xml.sh 
b/precommit/src/main/shell/test-patch.d/xml.sh
index e8cd0ed..6297dc6 100755
--- a/precommit/src/main/shell/test-patch.d/xml.sh
+++ b/precommit/src/main/shell/test-patch.d/xml.sh
@@ -32,7 +32,7 @@ function xml_filefilter
 function xml_precheck
 {
   if ! verify_command "jrunscript" "${JAVA_HOME}/bin/jrunscript"; then
-    add_vote_table 0 xml "jrunscript was not available."
+    add_vote_table_v2 0 xml "" "jrunscript was not available."
     delete_test xml
   fi
 }
@@ -81,12 +81,11 @@ function xml_postcompile
   fi
 
   if [[ ${count} -gt 0 ]]; then
-    add_vote_table -1 xml "${BUILDMODEMSG} has ${count} ill-formed XML 
file(s)."
-    add_footer_table xml "@@BASE@@/xml.txt"
+    add_vote_table_v2 -1 xml "@@BASE@@/xml.txt" "${BUILDMODEMSG} has ${count} 
ill-formed XML file(s)."
     populate_test_table "XML" "Parsing Error(s):" "${XML_FILES[@]}"
     return 1
   fi
 
-  add_vote_table +1 xml "${BUILDMODEMSG} has no ill-formed XML file."
+  add_vote_table_v2 +1 xml "" "${BUILDMODEMSG} has no ill-formed XML file."
   return 0
 }
diff --git a/precommit/src/main/shell/test-patch.d/yamllint.sh 
b/precommit/src/main/shell/test-patch.d/yamllint.sh
index 06d6a10..505de07 100755
--- a/precommit/src/main/shell/test-patch.d/yamllint.sh
+++ b/precommit/src/main/shell/test-patch.d/yamllint.sh
@@ -39,7 +39,7 @@ function yamllint_filefilter
 function yamllint_precheck
 {
   if ! verify_command "yamllint" "${YAMLLINT}"; then
-    add_vote_table 0 yamllint "yamllint was not available."
+    add_vote_table_v2 0 yamllint "" "yamllint was not available."
     delete_test yamllint
   fi
 
@@ -144,16 +144,15 @@ function yamllint_postapply
   statstring=$(generic_calcdiff_status "${numPrepatch}" "${numPostpatch}" 
"${diffPostpatch}" )
 
   if [[ ${diffPostpatch} -gt 0 ]] ; then
-    add_vote_table -1 yamllint "${BUILDMODEMSG} ${statstring}"
-    add_footer_table yamllint "@@BASE@@/diff-patch-yamllint.txt"
+    add_vote_table_v2 -1 yamllint "@@BASE@@/diff-patch-yamllint.txt" 
"${BUILDMODEMSG} ${statstring}"
     bugsystem_linecomments_queue "yamllint" 
"${PATCH_DIR}/diff-patch-yamllint.txt"
     return 1
   elif [[ ${fixedpatch} -gt 0 ]]; then
-    add_vote_table +1 yamllint "${BUILDMODEMSG} ${statstring}"
+    add_vote_table_v2 +1 yamllint "" "${BUILDMODEMSG} ${statstring}"
     return 0
   fi
 
-  add_vote_table +1 yamllint "There were no new yamllint issues."
+  add_vote_table_v2 +1 yamllint "" "There were no new yamllint issues."
   return 0
 }
 
diff --git a/precommit/src/main/shell/test-patch.sh 
b/precommit/src/main/shell/test-patch.sh
index b0c1eca..038f7fc 100755
--- a/precommit/src/main/shell/test-patch.sh
+++ b/precommit/src/main/shell/test-patch.sh
@@ -200,22 +200,24 @@ function add_header_line
 ## @replaceable  no
 ## @param        +1/0/-1/H
 ## @param        subsystem
+## @param        logfile
 ## @param        string
-function add_vote_table
+function add_vote_table_v2
 {
   declare value=$1
   declare subsystem=$2
-  shift 2
+  declare logfile=$3
+  shift 3
 
   # apparently shellcheck doesn't know about declare -r
   #shellcheck disable=SC2155
   declare -r elapsed=$(stop_clock)
   declare filt
 
-  yetus_debug "add_vote_table ${value} ${subsystem} ${elapsed} ${*}"
+  yetus_debug "add_vote_table_v2 >${value}< >${subsystem}< >${logfile}< 
>${elapsed}< ${*}"
 
   if [[ "${value}" = H ]]; then
-    TP_VOTE_TABLE[${TP_VOTE_COUNTER}]="|${value}| | | ${subsystem} |"
+    TP_VOTE_TABLE[${TP_VOTE_COUNTER}]="|${value}| | | | ${subsystem} |"
     ((TP_VOTE_COUNTER=TP_VOTE_COUNTER+1))
     return
   fi
@@ -231,7 +233,7 @@ function add_vote_table
   done
 
   # shellcheck disable=SC2034
-  TP_VOTE_TABLE[${TP_VOTE_COUNTER}]="| ${value} | ${subsystem} | ${elapsed} | 
$* |"
+  TP_VOTE_TABLE[${TP_VOTE_COUNTER}]="| ${value} | ${subsystem} | ${elapsed} | 
${logfile} | $* |"
   ((TP_VOTE_COUNTER=TP_VOTE_COUNTER+1))
 
   if [[ "${value}" = -1 ]]; then
@@ -239,6 +241,18 @@ function add_vote_table
   fi
 }
 
+## @description  Deprecated. Use add_vote_table_v2 instead.
+## @audience     public
+## @stability    stable
+## @replaceable  no
+function add_vote_table
+{
+  declare param1=$1
+  declare param2=$2
+  shift 2
+  add_vote_table_v2 "${param1}" "${param2}" "" "$@"
+}
+
 ## @description  Report the JVM vendor and version of the given directory
 ## @stability    stable
 ## @audience     private
@@ -1017,11 +1031,11 @@ function parse_args
     else
       yetus_add_array_element EXEC_MODES Docker
     fi
-    add_vote_table 0 reexec "Docker mode activated."
+    add_vote_table_v2 0 reexec "" "Docker mode activated."
     start_clock
   elif [[ "${REEXECED}" = true ]]; then
     yetus_add_array_element EXEC_MODES Re-exec
-    add_vote_table 0 reexec "Precommit patch detected."
+    add_vote_table_v2 0 reexec "" "Precommit patch detected."
     start_clock
   fi
 
@@ -1464,7 +1478,7 @@ function apply_patch_file
 
   if [[ "${INPUT_APPLIED_FILE}" ==  "${INPUT_DIFF_FILE}" ]]; then
     BUGLINECOMMENTS=""
-    add_vote_table '-0' patch "Used diff version of patch file. Binary files 
and potentially other changes not applied. Please rebase and squash commits if 
necessary."
+    add_vote_table_v2 '-0' patch "" "Used diff version of patch file. Binary 
files and potentially other changes not applied. Please rebase and squash 
commits if necessary."
     big_console_header "Applying diff to ${PATCH_BRANCH}"
   else
     big_console_header "Applying patch to ${PATCH_BRANCH}"
@@ -1473,7 +1487,7 @@ function apply_patch_file
   if ! patchfile_apply_driver "${INPUT_APPLIED_FILE}"; then
     echo "PATCH APPLICATION FAILED"
     ((RESULT = RESULT + 1))
-    add_vote_table -1 patch "${PATCH_OR_ISSUE} does not apply to 
${PATCH_BRANCH}. Rebase required? Wrong Branch? See ${PATCH_NAMING_RULE} for 
help."
+    add_vote_table_v2 -1 patch "" "${PATCH_OR_ISSUE} does not apply to 
${PATCH_BRANCH}. Rebase required? Wrong Branch? See ${PATCH_NAMING_RULE} for 
help."
     bugsystem_finalreport 1
     cleanup_and_exit 1
   fi
@@ -1619,7 +1633,7 @@ function check_reexec
     if [[ ${RESETREPO} == false ]]; then
       ((RESULT = RESULT + 1))
       yetus_debug "can't destructively change the working directory. run with 
'--resetrepo' please. :("
-      add_vote_table -1 precommit "Couldn't test precommit changes because we 
aren't configured to destructively change the working directory."
+      add_vote_table_v2 -1 precommit "" "Couldn't test precommit changes 
because we aren't configured to destructively change the working directory."
     else
 
       apply_patch_file
@@ -1814,10 +1828,19 @@ function modules_messages
         echo "${MODULE_STATUS_MSG[${modindex}]}"
         echo ""
         offset_clock "${MODULE_STATUS_TIMER[${modindex}]}"
-        add_vote_table "${MODULE_STATUS[${modindex}]}" "${testtype}" 
"${MODULE_STATUS_MSG[${modindex}]}"
         if [[ ${MODULE_STATUS[${modindex}]} == -1
           && -n "${MODULE_STATUS_LOG[${modindex}]}" ]]; then
-          add_footer_table "${testtype}" 
"@@BASE@@/${MODULE_STATUS_LOG[${modindex}]}"
+          add_vote_table_v2 \
+            "${MODULE_STATUS[${modindex}]}" \
+            "${testtype}" \
+            "@@BASE@@/${MODULE_STATUS_LOG[${modindex}]}" \
+            "${MODULE_STATUS_MSG[${modindex}]}"
+        else
+          add_vote_table_v2 \
+            "${MODULE_STATUS[${modindex}]}" \
+            "${testtype}" \
+            "" \
+            "${MODULE_STATUS_MSG[${modindex}]}"
         fi
       fi
       ((modindex=modindex+1))
@@ -1826,7 +1849,7 @@ function modules_messages
     if [[ ${failure} == false ]]; then
       start_clock
       offset_clock "${goodtime}"
-      add_vote_table +1 "${testtype}" "${repo} passed${statusjdk}"
+      add_vote_table_v2 +1 "${testtype}" "" "${repo} passed${statusjdk}"
     fi
   else
     until [[ ${modindex} -eq ${#MODULE[@]} ]]; do
@@ -1835,10 +1858,19 @@ function modules_messages
       echo "${MODULE_STATUS_MSG[${modindex}]}"
       echo ""
       offset_clock "${MODULE_STATUS_TIMER[${modindex}]}"
-      add_vote_table "${MODULE_STATUS[${modindex}]}" "${testtype}" 
"${MODULE_STATUS_MSG[${modindex}]}"
       if [[ ${MODULE_STATUS[${modindex}]} == -1
         && -n "${MODULE_STATUS_LOG[${modindex}]}" ]]; then
-        add_footer_table "${testtype}" 
"@@BASE@@/${MODULE_STATUS_LOG[${modindex}]}"
+        add_vote_table_v2 \
+          "${MODULE_STATUS[${modindex}]}" \
+          "${testtype}" \
+          "@@BASE@@/${MODULE_STATUS_LOG[${modindex}]}" \
+          "${MODULE_STATUS_MSG[${modindex}]}"
+      else
+        add_vote_table_v2 \
+          "${MODULE_STATUS[${modindex}]}" \
+          "${testtype}" \
+          "" \
+          "${MODULE_STATUS_MSG[${modindex}]}"
       fi
       ((modindex=modindex+1))
     done
@@ -3096,7 +3128,7 @@ function patch_setup_work
   if ! dryrun_both_files; then
       ((RESULT = RESULT + 1))
       yetus_error "ERROR: ${PATCH_OR_ISSUE} does not apply to ${PATCH_BRANCH}."
-      add_vote_table -1 patch "${PATCH_OR_ISSUE} does not apply to 
${PATCH_BRANCH}. Rebase required? Wrong Branch? See ${PATCH_NAMING_RULE} for 
help."
+      add_vote_table_v2 -1 patch "" "${PATCH_OR_ISSUE} does not apply to 
${PATCH_BRANCH}. Rebase required? Wrong Branch? See ${PATCH_NAMING_RULE} for 
help."
       bugsystem_finalreport 1
       cleanup_and_exit 1
   fi
@@ -3190,9 +3222,9 @@ function initialize
   if [[ "${#PARAMETER_TRACKER}" -gt 0 ]]; then
     yetus_error "ERROR: Unprocessed flag(s): ${PARAMETER_TRACKER[*]}"
     if [[ "${IGNORE_UNKNOWN_OPTIONS}" == true ]]; then
-      add_vote_table "-0" yetus "Unprocessed flag(s): ${PARAMETER_TRACKER[*]}"
+      add_vote_table_v2 "-0" yetus "" "Unprocessed flag(s): 
${PARAMETER_TRACKER[*]}"
     else
-      add_vote_table -1 yetus "Unprocessed flag(s): ${PARAMETER_TRACKER[*]}"
+      add_vote_table_v2 -1 yetus "" "Unprocessed flag(s): 
${PARAMETER_TRACKER[*]}"
       bugsystem_finalreport 1
       cleanup_and_exit 1
     fi
@@ -3318,7 +3350,7 @@ else
   yetus_debug "Changed process/Java native thread limit to ${PROC_LIMIT}"
 fi
 
-add_vote_table H "Prechecks"
+add_vote_table_v2 H "Prechecks"
 
 prechecks
 
@@ -3326,7 +3358,7 @@ if [[ "${BUILDMODE}" = patch ]]; then
 
   patchfiletests
 
-  add_vote_table H "${PATCH_BRANCH} Compile Tests"
+  add_vote_table_v2 H "${PATCH_BRANCH} Compile Tests"
 
   compile_cycle branch
 
@@ -3338,17 +3370,17 @@ if [[ "${BUILDMODE}" = patch ]]; then
 
   compute_gitdiff
 
-  add_vote_table H "Patch Compile Tests"
+  add_vote_table_v2 H "Patch Compile Tests"
 
 else
 
-  add_vote_table H "Compile Tests"
+  add_vote_table_v2 H "Compile Tests"
 
 fi
 
 compile_cycle patch
 
-add_vote_table H "Other Tests"
+add_vote_table_v2 H "Other Tests"
 
 runtests
 

Reply via email to