mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-16 13:26:36 +00:00
scripts: add five-bugs-a-day script
Cron fodder.
This commit is contained in:
parent
564eee8cd6
commit
fe61283334
1 changed files with 175 additions and 0 deletions
175
scripts/five-bugs-a-day.pl
Executable file
175
scripts/five-bugs-a-day.pl
Executable file
|
@ -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 <tim centricular net>
|
||||
#
|
||||
# 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";
|
Loading…
Reference in a new issue