summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Palfrader <peter@palfrader.org>2007-05-23 21:51:43 +0000
committerweasel <weasel@bc3d92e2-beff-0310-a7cd-cc87d7ac0ede>2007-05-23 21:51:43 +0000
commitca86b413a155e2ca38d6fc4ae683c2c249ca3749 (patch)
tree24d486ec9356905fdcd1b31934cd81c9542f4aad
parent813075115bf01b5c102bc9e511636e6fea8e20b9 (diff)
Add parse-trac
git-svn-id: svn+ssh://asteria.noreply.org/svn/weaselutils/trunk@273 bc3d92e2-beff-0310-a7cd-cc87d7ac0ede
-rwxr-xr-xparse-trac105
-rwxr-xr-xparse-wiki5
2 files changed, 105 insertions, 5 deletions
diff --git a/parse-trac b/parse-trac
new file mode 100755
index 0000000..0815e6e
--- /dev/null
+++ b/parse-trac
@@ -0,0 +1,105 @@
+#!/usr/bin/perl -wT
+
+use strict;
+use English;
+use MIME::Base64;
+
+
+my $HOME = '/home/commit/';
+my $MAX_LINES = 4;
+my $ENVELOPE_FROM = 'nobody@commit.noreply.org';
+my $HEADER_FROM = 'nobody@commit.noreply.org';
+my $BOT_ADDRESS = 'commit@commit.noreply.org';
+my $SENDMAIL = '/usr/sbin/sendmail';
+
+$ENV{'PATH'} = '/bin:/usr/bin';
+delete @ENV{'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
+
+die ("Usage: $PROGRAM_NAME <project> <mailfile>\n") unless (scalar @ARGV == 2);
+my $project = $ARGV[0];
+
+umask 077;
+
+$project =~ m/^([a-zA-Z-]+(\.[a-zA-Z-]+)*)+$/;
+$project = $1;
+die ("Project is not a nice name.\n") unless defined $project;
+
+
+open (MAIL, $ARGV[1]) || die ("Cannot open $ARGV[1]: $!\n");
+my @mail = <MAIL>;
+close(MAIL);
+my $line;
+
+my @headers;
+my $lastline = undef;
+while (defined($line = shift @mail)) {
+ my $chomped = $line;
+ chomp $chomped;
+ if ($chomped =~ m/^\s+/) {
+ $lastline .= ' '.$line;
+ } elsif ($chomped =~ m/^$/) {
+ push @headers, $lastline if defined $lastline;
+ push @headers, $line;
+ push @headers, @mail;
+ last
+ } else {
+ push @headers, $lastline if defined $lastline;
+ $lastline = $line;
+ }
+}
+
+my $is_a_reply;
+my $tracproject;
+my $ticketid;
+my $url;
+
+while (defined($line = shift @headers)) {
+ if ($line =~ m/^Subject:/i) {
+ $is_a_reply = ($line =~ m/^Subject:\s*Re:/i);
+ } elsif ($line =~ m/^X-Trac-Project:\s*(.*)/i) {
+ $tracproject = $1;
+ } elsif ($line =~ m/^X-Trac-Ticket-URL:\s*(.*)/i) {
+ $url = $1;
+ $url =~ s/^https:/http:/;
+ } elsif ($line =~ m/^X-Trac-Ticket-ID:\s*(.*)/i) {
+ $ticketid = $1;
+ } elsif ($line =~ m/^$/) {
+ last;
+ }
+};
+my $first_line = shift @mail;
+chomp $first_line;
+shift @mail;
+
+my $reporter;
+while (defined($line = shift @mail)) {
+ if ($line =~ /Reporter:\s*(.*?)\s*\|/i and not defined $reporter) {
+ $reporter = $1;
+ };
+ last if $line =~ /^-----------------/
+}
+
+die ("$PROGRAM_NAME - $project: No reporter found.\n") unless defined $reporter;
+die ("$PROGRAM_NAME - $project: No tracproject found.\n") unless defined $tracproject;
+die ("$PROGRAM_NAME - $project: No url found.\n") unless defined $url;
+die ("$PROGRAM_NAME - $project: No ticketid found.\n") unless defined $ticketid;
+die ("$PROGRAM_NAME - $project: No first_line found.\n") unless defined $first_line;
+
+my $body = join '', @mail;
+
+my $notice = (defined $is_a_reply) ?
+ "[$tracproject] #$ticketid was updated" :
+ "[$tracproject] #$ticketid filed by $reporter";
+$notice .= ": $first_line - $url";
+
+open(MAIL, "|cat") or
+#open(MAIL, "|$SENDMAIL -t -oi -f $ENVELOPE_FROM") or
+ die ("Cannot exec sendmail: $!\n");
+print MAIL "From: $HEADER_FROM\n";
+print MAIL "To: $BOT_ADDRESS\n";
+print MAIL "Subject: Announce $project\n";
+print MAIL "Precedence: junk\n";
+print MAIL "\n";
+print MAIL "$notice\n";
+print MAIL "$body\n";
+close(MAIL);
diff --git a/parse-wiki b/parse-wiki
index 822857b..c2ddac9 100755
--- a/parse-wiki
+++ b/parse-wiki
@@ -20,11 +20,6 @@ my $project = $ARGV[0];
umask 077;
-my $TMPDIR = "$HOME/cvs-tmp/";
--d $TMPDIR or
- mkdir $TMPDIR or
- die ("Cannot mkdir $TMPDIR: $0\n");
-
$project =~ m/^([a-zA-Z-]+(\.[a-zA-Z-]+)*)+$/;
$project = $1;
die ("Project is not a nice name.\n") unless defined $project;