Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Fetching contributors…
Cannot retrieve contributors at this time
119 lines (101 sloc) 3.55 KB
use strict;
use DBI;
# ===== Config:
my $dbfile = "trac.db";
my $milestone = "7.4.1";
my $test = 0;
# ===== Code:
my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile","","", {});
my %emailof;
my %ticketsfor;
sub getUserAddress {
my $sth = $dbh->prepare("SELECT sid, value FROM session_attribute WHERE name = 'email'");
while (my $result = $sth->fetchrow_hashref("NAME_lc")) {
my $username = $result->{sid};
my $email = $result->{value};
if (defined($emailof{$username})) {
die "Two e-mail addresses found for $username";
if ($email =~ /@/) {
$emailof{$username} = $email;
else {
# warn "The e-mail address $email for $username contains no @";
sub doTickets {
my $sth = $dbh->prepare("SELECT id, summary, reporter, cc FROM ticket WHERE milestone = ? AND status = 'new'");
while (my $result = $sth->fetchrow_hashref("NAME_lc")) {
my $ticket = $result->{id};
my $title = $result->{summary};
my $reporter = $result->{reporter};
my $cc = $result->{cc};
my %addresses;
my $address_added;
for my $who ($reporter, split /[ ,]+/, $cc) {
$address_added = 0;
if ($who =~ /@/) {
$addresses{$who} = 1;
$address_added = 1;
if (defined($emailof{$who})) {
$addresses{$emailof{$who}} = 1;
$address_added = 1;
if ($who ne "nobody" && $address_added eq 0) {
# warn "No address found for $who";
for my $address (keys(%addresses)) {
$ticketsfor{$address}{$ticket}{"title"} = $title;
sub doEmails {
for my $email (sort (keys %ticketsfor)) {
if ($test ne 0) {
open FH, ">&STDOUT";
else {
open(FH, '|-', 'mail', '-s', 'GHC bugs', '-a', 'From:', $email) or die "Running mail failed: $!";
print FH <<'EOF';
You are receiving this mail because you are the reporter, or on the CC
list, for one or more GHC tickets that are automatically having their
priority reduced due to our post-release ticket handling policy:
The list of tickets for which you are the reporter or on the CC list is
given below. If any of these are causing problems for you, please let us
know on and we'll look at raising the
Better still, if you are able to make any progress on any of the tickets
yourself (whether that be actually fixing the bug, or just making it
easier for someone else to - for example, by making a small,
self-contained test-case), then that would be a great help. We at GHC HQ
have limited resources, so if anything is waiting for us to make
progress then it can be waiting a long time!
for my $ticket (sort {$a <=> $b} (keys %{$ticketsfor{$email}})) {
my $title = $ticketsfor{$email}{$ticket}{"title"};
print FH "\n";
print FH "#$ticket $title:\n";
print FH "$ticket\n";
print FH <<'EOF';
The GHC Team
close FH or die "Close failed: $!";
Jump to Line
Something went wrong with that request. Please try again.