In a recent post, I said:
That second patch uses the same string you saw above in the previous patch. Yes, it would be better to have added that string to just one place. I welcome patches for that change.
Today I will show you that code. With help from Matthias Andree on IRC, I managed to figure this out.
Deleted code
This is what was deleted. Some of this is added code, but for the most part, things have been deleted.
===================================================================
--- process_mail.pl (revision 4583)
+++ process_mail.pl (working copy)
@@ -9,6 +9,7 @@
#
use strict;
+use branches;
use XML::Writer;
use constants;
use utilities;
@@ -26,8 +27,6 @@
my $Message_Subject = FreshPorts::ProcessMail::myGetMessage_Subject($message);
-
-
# the message id uniquely identifies the email, and thus, the commit in question
# the message id should be in one of two forms (given that we are processing stuff from just two lists):
# 201108100855.p7A8tkQt033487@svn.freebsd.org (SVN commit)
@@ -54,29 +53,15 @@
# print 'List-Id: ' . $ListId . "\n";
# print 'Subject: ' . $Message_Subject . "\n";
- my $found = 0;
- if ($MessageId =~ /\@svn.freebsd.org/i || $MessageId =~ /\@svn.chruetertee.ch/i) {
- if ($ListId =~ /SVN commit messages for the entire src tree/i ||
- $ListId =~ /SVN commit messages for the entire doc trees/i ||
- $ListId =~ /SVN commit messages for the ports tree for head/i ||
- $ListId =~ /SVN commit messages for all the branches of the ports tree/i) {
+ my $found = 0;
+ my $ListProperties = FreshPorts::Branches::ListProperties($ListId);
+ if (defined($ListProperties))
+ {
$found = 1;
-# print "we should invoke the SVN scripts here\n";
- eval "use process_svn_mail";
+ my $process = $ListProperties->{'process'};
+# require "./$process.pm";
+ eval "use $process";
}
- }
-
- if ($MessageId =~ /\@repoman.freebsd.org/i) {
- if ($ListId =~ /CVS commit messages for the ports tree/i ||
- $ListId =~ /CVS commit messages for the doc and www trees/i ||
- $ListId =~ /\*\*OBSOLETE\*\* CVS commit messages for the entire tree/i ||
- $ListId =~ /\*\*OBSOLETE\*\* CVS commit messages for the src tree/i ||
- $ListId =~ /CVS commit messages for the projects tree/i) {
- $found = 1;
-# print "we should invoke the CVS scripts here\n";
- eval "use process_cvs_mail";
- }
- }
if (!$found) {
FreshPorts::Utilities::ReportErrorEmailNoPrint('err', "This List-Id/Message-Id combination is not known to this script. List-Id='" .
Index: process_svn_mail.pm
===================================================================
--- process_svn_mail.pm (revision 4583)
+++ process_svn_mail.pm (working copy)
@@ -477,26 +477,17 @@
#
my ($message) = @_;
-
+
my $myRepoPrefix = '';
my $myListId = FreshPorts::ProcessMail::myGetList_Id($message);
- my %KnownRepos = (
- "SVN commit messages for the entire src tree" => $FreshPorts::Config::Repo_SRC,
- "SVN commit messages for the entire doc trees" => $FreshPorts::Config::Repo_DOC,
- "SVN commit messages for the ports tree for head" => $FreshPorts::Config::Repo_PORTS,
- "SVN commit messages for all the branches of the ports tree" => $FreshPorts::Config::Repo_PORTS
- );
-
- while (my ($ListId, $repo) = each %KnownRepos)
+ my $ListProperties = FreshPorts::Branches::ListProperties($myListId);
+
+ if (defined($ListProperties))
{
- if ($myListId =~ /$ListId/i)
- {
- $myRepoPrefix = $repo;
- last;
+ $myRepoPrefix = $ListProperties->{'repo'};
}
- }
-
+
return $myRepoPrefix;
}
Some notes on the above:
- Line 8 – includes the new module, which I will show later.
- Lines 25-30 & 42-54 – deleted the old code, much of which formed the basis for the new module
- lines 71-78 & 83-86 – delete more code
The new code is among that not highlighted. It’s pretty small.
New branches module
The new module is straight forward, and mostly data.
#!/usr/bin/perl
#
# Copyright (c) 2014 DVL Software
#
package FreshPorts::Branches;
require config;
# these are the branches we process
%FreshPorts::Branches::Branches = (
'HEAD',
'RELENG_9_1_0'
);
# these are the mailing lists associated with those branches
%FreshPorts::Branches::MailingLists = (
'SVN commit messages for the entire src tree' => {
'process' => 'process_svn_mail',
'repo' => $FreshPorts::Config::Repo_SRC,
},
'SVN commit messages for the entire doc trees' => {
'process' => 'process_svn_mail',
'repo' => $FreshPorts::Config::Repo_DOC,
},
'SVN commit messages for the ports tree for head' => {
'process' => 'process_svn_mail',
'repo' => $FreshPorts::Config::Repo_PORTS,
},
'SVN commit messages for all the branches of the ports tree' => {
'process' => 'process_svn_mail',
'repo' => $FreshPorts::Config::Repo_PORTS,
},
'CVS commit messages for the ports tree' => {
'process' => 'process_cvs_mail',
'repo' => '',
},
'CVS commit messages for the doc and www trees' => {
'process' => 'process_cvs_mail',
'repo' => '',
},
'\*\*OBSOLETE\*\* CVS commit messages for the entire tree' => {
'process' => 'process_cvs_mail',
'repo' => '',
},
'\*\*OBSOLETE\*\* CVS commit messages for the src tree' => {
'process' => 'process_cvs_mail',
'repo' => '',
},
'CVS commit messages for the projects tree' => {
'process' => 'process_cvs_mail',
'repo' => '',
},
);
#
# given a list id, grab the properties for it
#
sub ListProperties($)
{
my $ListId = shift;
my $hash;
# strip off the leading header.
$ListId =~ s/List-Id:\s+//;
$hash = $FreshPorts::Branches::MailingLists{$ListId};
return $hash;
}
1;
Lines 16-54 are derived from the deleted code and rearranged into one hash.
The new function, ListProperties() forms the basis of the new code added above.
The %FreshPorts::Branches::Branches variable is yet to be used in any code, but I can see it being useful very soon.
Thanks
My thanks to Matthias Andree and to Matthew Seaman for helping me with my poor Perl skills.











