diff --git a/scripts/five-bugs-a-day.pl b/scripts/five-bugs-a-day.pl new file mode 100755 index 0000000000..7fe614ad09 --- /dev/null +++ b/scripts/five-bugs-a-day.pl @@ -0,0 +1,175 @@ +#!/bin/perl -w +# +# ---------------------------------------------------------------------------- +# +# five-bugs-a-day.pl +# +# Little script that outputs a list of N random open bugs from bugzilla +# for a certain bugzilla product +# +# ---------------------------------------------------------------------------- +# +# Copyright (C) 2011-2012 Tim-Philipp Muller +# +# This script is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public +# License as published by the Free Software Foundation; either +# version 2 of the License, or (at your option) any later version. +# +# This library 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 +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with this library; if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# ---------------------------------------------------------------------------- +# +# You can use it to send yourself an e-mail with a few bugs to check up on +# every day, just put it into your crontab on a computer of your choice +# (with proper e-mail forwarding configured in some way): +# +# $ crontab -e +# +# add: +# +# MAILTO=you@nowhere.org +# # send ten random buglinks every day at 16.30 +# 30 16### /usr/bin/perl /path/to/five-bugs-a-day.pl +# +# +# Yes, it's PERL, sorry. +# +# Yes, I know the default is 10 bugs. +# +# ---------------------------------------------------------------------------- +# +# Known bugs: +# - there may be an issue with apostrophes or quotes in bug summaries, +# descriptions sometimes get cut off +# +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# subroutines +# ---------------------------------------------------------------------------- + +sub shuffle +{ + my $array = shift; + my $i = @$array; + while ( --$i ) + { + my $j = int rand( $i+1 ); + print "j = $j, i = $i \n"; + @$array[$i,$j] = @$array[$j,$i]; + } + + return @$array; +} + +# ---------------------------------------------------------------------------- +# main +# ---------------------------------------------------------------------------- + +my $NUM_BUGS = 10; + +my $PRODUCT = "GStreamer"; + +# ----- command line options ----- + +if (@ARGV) { + $NUM_BUGS = shift @ARGV; +} + +if (@ARGV) { + $PRODUCT = shift @ARGV; +} + + +my $QUERY_URL = "https://bugzilla.gnome.org/buglist.cgi?product=$PRODUCT&" . + 'bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&' . + 'bug_status=REOPENED&' . + 'query_format=advanced&ctype=csv'; + +my $COL_ID; +my $COL_DESC; + +my %BUGS; + +# for testing/debugging: +# unless (@lines = `cat bugs.csv`) { +unless (@lines = `wget --no-check-certificate --quiet -O - '$QUERY_URL'`) { + die 'Could not download bug list'; +} + +# ----- parse column headers ----- + +my $headers; + +# get first line which contains the field names +$headers = shift @lines; + +# get rid of newline at end +chop $headers; + +my @fields = split (/,/, $headers); +my $num_fields = scalar(@fields); + +for (my $c = 0; $c < $num_fields; $c++) { + #print "$c $fields[$c] \n"; + if ($fields[$c] =~ m/bug_id/) { + $COL_ID = $c; + } elsif ($fields[$c] =~ m/short_desc/) { + $COL_DESC = $c; + } +} + +die "Could not find bug_id column in CVS file" if not defined ($COL_ID); +die "Could not find short_desc column in CVS file" if not defined ($COL_DESC); + +#print "bugid is column $COL_ID\n"; +#print "desc is column $COL_DESC\n"; + +foreach (@lines) { + if (m/,/) { + chop; + + # We specify num_fields as limit here, because the short_desc field + # might contain commas as well, and we don't want it to get cut off. + # This is a hack for the fact that we don't handle quoted fields + # (12345,"UNCONFIRMED","foo, bar: errors out") properly. As long as the + # short_desc field is the last one, that should be ok. (FIXME) + my @vals = split (/,/, $_, $num_fields); + my $id = $vals[$COL_ID]; + my $desc = $vals[$COL_DESC]; + + $desc =~ s/^"(.*)"$/$1/; + $BUGS{$id} = $desc; + } +} + +my @all_bugs = keys %BUGS; +my @bugs = shuffle (\@all_bugs); + +# only want first NUM_BUGS bugs +$#bugs = $NUM_BUGS; + +print "\n"; +print "$NUM_BUGS random bugs:\n"; +print "\n"; + +for my $bug_id ( @bugs ) { + print "$BUGS{$bug_id}\n"; + print "https://bugzilla.gnome.org/show_bug.cgi?id=$bug_id\n"; + print "\n"; +} + +print "\n"; +print "More bugs at:\n"; +print " - http://gstreamer.freedesktop.org/bugs/\n"; +print " - https://bugzilla.gnome.org/browse.cgi?product=GStreamer\n"; +print "\n";