From ca86b413a155e2ca38d6fc4ae683c2c249ca3749 Mon Sep 17 00:00:00 2001 From: Peter Palfrader Date: Wed, 23 May 2007 21:51:43 +0000 Subject: Add parse-trac git-svn-id: svn+ssh://asteria.noreply.org/svn/weaselutils/trunk@273 bc3d92e2-beff-0310-a7cd-cc87d7ac0ede --- parse-trac | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ parse-wiki | 5 --- 2 files changed, 105 insertions(+), 5 deletions(-) create mode 100755 parse-trac 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 \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 = ; +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; -- cgit v1.2.3