#! /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://bugs.parabolagnulinux.org/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://bugs.parabolagnulinux.org/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://bugs.parabolagnulinux.org/bugs/${bug_number}" 2> /dev/null | csplit -f "${tdir}/xx" - '%%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://bugs.parabolagnulinux.org/bugs/${bug_number} (${bug_title% - Parabola\'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://bugs.parabolagnulinux.org/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://bugs.parabolagnulinux.org/bugs/${bug_number} (${bug_title% - Parabola\'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