summaryrefslogtreecommitdiffstats
path: root/update-bugs.sh
blob: cc20d0bba980ad9a9ba180b7bffcef2f660b1524 (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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/bash -
# update-bugs.sh
# Copyright (C) 2009-2012 Red Hat Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

# In 'make dist' this is used to update the top level 'BUGS' file with
# the current bug list from Red Hat Bugzilla (bugzilla.redhat.com).

# First of all fetch the bugs from the database.  This might fail,
# eg. if there is no net access or no 'bugzilla' program, but if that
# happens just exit and leave the BUGS file alone.

bugzilla query -c libguestfs \
  --outputformat='%{bug_id} %{bug_status} %{short_desc}' |
  perl -e '
    sub bugclass {
      local $_ = shift;
      return 1 if /NEW/;
      return 2 if /ASSIGNED/;
      return 3 if /ON_DEV/;
      return 4 if /POST/;
      return 5 if /MODIFIED/;
      return 6 if /ON_QA/;
      return 7 if /VERIFIED/;
      return 8 if /RELEASE_PENDING/;
      return 9 #if /CLOSED/;
    }
    sub compare {
      $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1]
    }
    while (<>) {
      /^(\d+) (\w+) (.*)/; push @bugs, [bugclass($2), $1, $2, $3];
    }
    foreach (sort compare @bugs) {
      print $_->[1], " ", $_->[2], " ", $_->[3], "\n";
    }
' \
> .bugs.tmp || exit 0

# Any errors from now on are fatal.
set -e

# Print prologue.
echo 'NOTE: This file is automatically generated from "update-bugs.sh".'
echo -n 'Last updated: ' ; date +'%Y-%m-%d'
echo '
This contains a local list of the bugs that are open against
libguestfs.  Bugs are tracked in the Red Hat Bugzilla database
at https://bugzilla.redhat.com/ and to report a new bug you
should follow this link:

https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools

When reporting a new bug, please check:

 - That the bug has not been reported already.
 - That you are testing a recent version.
 - Describe the bug accurately, and give a way to reproduce it.
 - Include the version of libguestfs, distro version and any other
   relevant information.
 - Attach the complete output of "libguestfs-test-tool".
'

lastclass=X
count=0
while read bugno status summary; do
    # Ignore CLOSED bugs in this list.
    if [ "$status" = "CLOSED" ]; then continue; fi

    # Treat ASSIGNED the same as NEW.
    # Treat MODIFIED, POST and ON_QA as the same.
    case "$status" in
        ASSIGNED) bugclass=NEW ;;
        POST|ON_QA) bugclass=MODIFIED ;;
        *) bugclass=$status ;;
    esac

    # perl sort returns the bugs sorted by status, NEW, ASSIGNED,
    # MODIFIED, ..., CLOSED.  Therefore start a new section when the
    # status field changes.
    if [ "$bugclass" != "$lastclass" ]; then
        if [ $count -ge 1 ]; then
            echo "($count bugs)"
            echo
        fi
        count=0
        echo '--------------------------------------------------'
        case "$bugclass" in
            NEW)
                echo 'Bugs in NEW or ASSIGNED state are open and waiting for someone to fix.' ;;
            NEEDINFO)
                echo 'Bugs in NEEDINFO state require additional information.' ;;
            MODIFIED)
                echo 'Bugs in MODIFIED, POST or ON_QA state are fixed.'
                echo 'You can help by testing the fixes.'
                ;;
            *)
                echo "These bugs are in the $status state." ;;
        esac
        echo
    fi
    ((count++)) ||:
    lastclass=$bugclass

    # Display the bug.
    echo "$bugno $status https://bugzilla.redhat.com/show_bug.cgi?id=$bugno"
    echo "  $summary"
    echo
done < .bugs.tmp

if [ $count -ge 1 ]; then
    echo "($count bugs)"
    echo
fi
echo "End of BUGS file."

# Clean up temporary file.
rm .bugs.tmp