summaryrefslogtreecommitdiff
path: root/bug_tracker_change_detector
blob: e4de7ba606a56bd18f3fc2402dd880b531e7a887 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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://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" - '%<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://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