diff options
Diffstat (limited to 'issue_tracker_change_detector')
-rwxr-xr-x | issue_tracker_change_detector | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/issue_tracker_change_detector b/issue_tracker_change_detector new file mode 100755 index 0000000..699f8cc --- /dev/null +++ b/issue_tracker_change_detector @@ -0,0 +1,94 @@ +#! /bin/bash + +while true +do + source common_codez + + log_file=bug_sums + + temp_file=$( mktemp ) + + temp_changes=$( mktemp ) + + changes="/tmp/un-provoked-message-store" + + for url in $( curl --compressed "https://issues.hyperbola.info/bugs/issue?@pagesize=99999" 2> /dev/null | grep -E 'href="issue[[:digit:]]+' | cut -d '"' -f 2 ) + do + tfile="$( mktemp )" + + try_count=1 + + # Get the URL and make sure it's not empty. + until curl --compressed "https://issues.hyperbola.info/bugs/${url}" > "${tfile}" 2> /dev/null && (( $( wc -l "${tfile}" 2> /dev/null | cut -d ' ' -f 1 ) )) + do + # The time we sleep doubles each time up to a maximum of 512 + # seconds, before restarting the entire script. + sleep "${try_count}" + + if (( try_count < 512 )) + then + try_count=$(( try_count * 2 )) + else + continue 2 + fi + done + + echo "${url} $( md5sum < ${tfile} | cut -d ' ' -f 1 )" >> "${temp_file}" + + rm "${tfile}" + done + + # Check that the log file is not empty as a sanity check. TODO record WHEN + # it last checked the bug tracker for changes so we can also check if it was + # too long ago. + if (( $( wc -l "${log_file}" 2> /dev/null | cut -d ' ' -f 1 ) )) + then + cat "${temp_file}" | + while read -r line + do + bug_number="${line%% *}" + # If this bug is not in the log file then it must be new. + if { ! grep "${bug_number}" "${log_file}" > /dev/null ; } + then + tdir="$( mktemp -d )" + curl --compressed "https://issues.hyperbola.info/bugs/${bug_number}" 2> /dev/null | csplit -f "${tdir}/xx" - '%<title>%1' + bug_title=$( head -1 ${tdir}/xx* | replace_wierd_html_chars ) + cat ${tdir}/xx* | csplit -f "${tdir}/gg" - '%<th class="required">Priority</th>%1' + priority=$( head -1 ${tdir}/gg* ) + priority=${priority#*>} + priority=${priority%<*} + rm -r "${tdir}" + echo "${bug_number} created: https://issues.hyperbola.info/bugs/${bug_number} (${bug_title% - Hyperbola\'s issue tracker} [${priority}])" >> "${temp_changes}" + # It is in the log file so now we check if the entire line is there, + # because if it's not then the md5sum must have changed. + elif { ! grep "${line}" "${log_file}" > /dev/null ; } + then + tdir="$( mktemp -d )" + curl --compressed "https://issues.hyperbola.info/bugs/${bug_number}" 2> /dev/null | csplit -f "${tdir}/xx" - '%<title>%1' + bug_title=$( head -1 ${tdir}/xx* | replace_wierd_html_chars ) + cat ${tdir}/xx* | csplit -f "${tdir}/gg" - '%<th class="required">Priority</th>%1' + priority=$( head -1 ${tdir}/gg* ) + priority=${priority#*>} + priority=${priority%<*} + rm -r "${tdir}" + echo "${bug_number} changed: https://issues.hyperbola.info/bugs/${bug_number} (${bug_title% - Hyperbola\'s issue tracker} [${priority}])" >> "${temp_changes}" + fi + done + fi + + if (( $( wc -l "${temp_changes}" 2> /dev/null | cut -d ' ' -f 1 ) > 12 )) + then + echo "More than 12 changes have been detected on the bug tracker. Ignoring." >> "${changes}" + else + while read line + do + echo "${line}" >> "${changes}" + done < "${temp_changes}" + fi + + mv "${temp_file}" "${log_file}" + + rm -f "${temp_changes}" + + sleep 5m +done |