Date: Tue, 19 Feb 2013 02:48:52 +0000 (UTC) From: Mark Linimon <linimon@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r246976 - user/bugmeister/gnats/tools Message-ID: <201302190248.r1J2mrBf022525@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: linimon (doc,ports committer) Date: Tue Feb 19 02:48:52 2013 New Revision: 246976 URL: http://svnweb.freebsd.org/changeset/base/246976 Log: linimon-authored scripts to allow specialized GNATS reports. Added: user/bugmeister/gnats/tools/do_email_annotated_prs (contents, props changed) user/bugmeister/gnats/tools/do_generate_annotated_prs (contents, props changed) user/bugmeister/gnats/tools/do_generate_annotated_prs.pl (contents, props changed) user/bugmeister/gnats/tools/email_annotated_prs (contents, props changed) user/bugmeister/gnats/tools/email_boilerplate.txt (contents, props changed) Added: user/bugmeister/gnats/tools/do_email_annotated_prs ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/bugmeister/gnats/tools/do_email_annotated_prs Tue Feb 19 02:48:52 2013 (r246976) @@ -0,0 +1,64 @@ +#!/bin/sh + +# send customized email corresponding to email template. Might or might +# not be "PRs assigned to". Kind of overlaps email_annotated_prs. + +# set this to non-null when testing changes +#DEVELOPMENT="yes" + +user=$1 +input_filename=$2 +html_mode=$3 + +SCRIPT_DIR="/home/gnats/tools" +DEFAULT_FILENAME="pr_email_template.txt" +BOILERPLATE="$SCRIPT_DIR/email_boilerplate.txt" +SENDMAIL="/usr/sbin/sendmail -odi -fowner-bugmaster@FreeBSD.org -oem" + +if [ ! -z "$DEVELOPMENT" ]; then + # development: + TO_BUGMASTER="linimon@FreeBSD.org" +fi + +if [ -z "$user" ]; then + echo "usage: do_email_annotated_prs [user] [filename] [html_mode]" + exit 1 +fi + +# copied verbatim from gnatsreport.sh + targ=`echo ${user} | grep @` + if [ "${targ}" = "" ]; then + targ=${user}@FreeBSD.org + else + targ=${user} + fi + if [ -z "$DEVELOPMENT" ]; then + mail_to=${targ} + else + mail_to=${TO_BUGMASTER} + fi + +if [ -z "$input_filename" ]; then + # look for fallback if not explicitly specified + input_filename="/home/$user/public_html/$DEFAULT_FILENAME" + if [ -e $input_filename ]; then + echo "default template $input_filename not found." + exit 1 + fi +fi + +if [ -z "$html_mode" ]; then + html_mode="0" +fi + +# now send the mail + ( + echo "From: FreeBSD bugmaster <bugmaster@freebsd.org>" + echo "To: ${user}" + echo "Subject: Current problem reports customized for ${targ}" + echo "" + perl $SCRIPT_DIR/do_generate_annotated_prs.pl $input_filename $html_mode + cat $BOILERPLATE + ) | ${SENDMAIL} ${mail_to} + +exit 0 Added: user/bugmeister/gnats/tools/do_generate_annotated_prs ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/bugmeister/gnats/tools/do_generate_annotated_prs Tue Feb 19 02:48:52 2013 (r246976) @@ -0,0 +1,20 @@ +#!/bin/sh + +# create an HTML page corresponding to annotated PRs + +script_dir="/home/gnats/tools" + +DEFAULT_FILENAME="annotated_prs.txt" + +input_filename=$1 +if [ -z "$input_filename" ]; then + input_filename="/home/`whoami`/public_html/$DEFAULT_FILENAME" +fi +output_filename=`echo $input_filename | sed -e "s/txt/html/"` + +html_mode=$2 +if [ -z "$html_mode" ]; then + html_mode="1" +fi + +perl $script_dir/do_generate_annotated_prs.pl $input_filename $html_mode > $output_filename.tmp && mv $output_filename.tmp $output_filename Added: user/bugmeister/gnats/tools/do_generate_annotated_prs.pl ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/bugmeister/gnats/tools/do_generate_annotated_prs.pl Tue Feb 19 02:48:52 2013 (r246976) @@ -0,0 +1,93 @@ +#!/usr/bin/perl +# +# Script to create HTML page of annotated sets of bug reports. +# +# author: linimon +# thanks to: pgollucci for perl help +# + +require '/home/gnats/tools/cgi-lib.pl'; +require '/home/gnats/tools/cgi-style.pl'; +require '/home/gnats/tools/query-pr-common.pl'; +require 'getopts.pl'; + +$query_pr_ref="http://www.freebsd.org/cgi/query-pr.cgi"; + +local($filename)=$ARGV[0]; +local($html_mode)=$ARGV[1]; + +$wrote_header = 0; +$accumulating_prs = 0; + +open my $fh, '<', "$filename" or die "Can't open [$filename] because [$!]\n"; + +while (my $line = <$fh>) { + + chomp $line; + + if ($line =~ /^\d+/) { + # line is a PR number. Add it to the current PR list. + $query_args=$line . " -x"; + @prs=&read_gnats($query_args); + $accumulating_prs = 1; + } + else { + # line is text. + + # if HTML mode, 1st text line is the HTML title (hack) + if (! $wrote_header ) { + if ($html_mode ) { + print &noninteractive_html_header($line); + print "<p>\n"; + print "Date generated: " . gmtime() . " GMT\n"; + print "</p>\n"; + } else { + print "Date generated: " . gmtime() . " GMT\n"; + print "\n"; + print $line . "\n"; + print "\n"; + } + $wrote_header = 1; + } else { + if ($line =~ /%QUERY-PR/) { + # use the rest of the line as arguments + $line =~ s/%QUERY-PR//; + # hack: add a macro for "tag" -- not supported by query-pr + $line =~ s/--tag (\S+)/-t \'\\[$1\\]\'/ if ($line =~ /--tag /); + # Only add -x if noone gave --state=closed/-s closed + if ($line !~ /-s\s+\S*closed/ and $line !~ /--state=\S*closed/) { + $line .= " -x"; + } + $query_args=$line; + # print "<br>query_args are " . $query_args . "<br>\n"; + @prs=&read_gnats($query_args); + $accumulating_prs = 1; + } else { + # just a regular text line + if ($accumulating_prs) { + # need to write out the accumulated PRs first. + @prs=reverse(@prs); + &printcnt(&gnats_summary(1, $html_mode, \@prs, $query_pr_ref)); + # do not carry those over to the next block + @prs = (); + $accumulating_prs = 0; + } + # any text line other than the first, or %QUERY-PR, is echoed verbatim + print $line . "\n"; + } + } + } +} +close $fh or die "Can't close [$filename] because [$!]\n"; + +if ($accumulating_prs) { + # write out last block + @prs=reverse(@prs); + &printcnt(&gnats_summary(1, $html_mode, \@prs, $query_pr_ref)); +} + +if ($html_mode ) { + print &html_footer; +} + +exit(0); Added: user/bugmeister/gnats/tools/email_annotated_prs ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/bugmeister/gnats/tools/email_annotated_prs Tue Feb 19 02:48:52 2013 (r246976) @@ -0,0 +1,40 @@ +#!/bin/sh + +# send email corresponding to email template + +user=$1 +targ=$2 +mail_to=$3 +input_filename=$4 +html_mode=$5 + +DEFAULT_FILENAME="pr_email_template.txt" + +SCRIPT_DIR="/home/gnats/tools" +BOILERPLATE="$SCRIPT_DIR/email_boilerplate.txt" +SENDMAIL="/usr/sbin/sendmail -odi -fowner-bugmaster@FreeBSD.org -oem" + +if [ -z "$user" -o -z "$targ" -o -z "$mail_to" ]; then + echo "usage: email_annotated_prs [user] [mail_to] [filename] [html_mode]" + exit 1 +fi + +if [ -z "$input_filename" ]; then + # XXX MCL use fallback if not exists + # XXX MCL template not yet generalized! + input_filename="/home/$user/public_html/$DEFAULT_FILENAME" +fi + +if [ -z "$html_mode" ]; then + html_mode="1" +fi + +# now send the mail + ( + echo "From: FreeBSD bugmaster <bugmaster@freebsd.org>" + echo "To: ${user}" + echo "Subject: Current problem reports assigned to ${targ}" + echo "" + perl $SCRIPT_DIR/do_generate_annotated_prs.pl $input_filename $html_mode + cat $BOILERPLATE + ) | ${SENDMAIL} ${mail_to} Added: user/bugmeister/gnats/tools/email_boilerplate.txt ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/bugmeister/gnats/tools/email_boilerplate.txt Tue Feb 19 02:48:52 2013 (r246976) @@ -0,0 +1,25 @@ + +Notes: + +generated on freefall via: + + ~gnats/tools/do_email_annotated_prs [user] [filename] [html_mode] + +user is mandatory. + +If you do not specify filename the script will look for a file named +pr_emailtemplate.txt in ~[user]/public_html/. + +html_mode may be 1 to send HTML mail, or 0 or omitted not to. + +The input format is fairly free-form: any line that starts with a numeric +is magically assumed to be a PR number; otherwise it is simply copied to +the output. The magic string %QUERY_PR is a metadirective. + +Closed PRs are automagically filtered out by default, but can be shown +if desired. + +Note: to view an individual PR, use: + http://www.freebsd.org/cgi/query-pr.cgi?pr=[number]. + +Send comments to linimon@FreeBSD.org.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201302190248.r1J2mrBf022525>