Thread: [Codestriker-commits] CVS update: codestriker/test/CodestrikerTest Config.pm MainPage.pm TopicConten
Brought to you by:
sits
From: <si...@us...> - 2004-12-21 22:44:44
|
Created Codestriker topic at: http://codestriker.sourceforge.net/cgi-bin/codestriker.pl?topic=3370564&action=view User: sits Date: 04/12/21 14:44:28 Modified: . CHANGELOG codestriker.conf lib Codestriker.pm lib/Codestriker/TopicListeners Email.pm test changetopicproperties.t cleanuptesttopics.t deletetopic.t htmlescape.t mainpagechangestate.t runtests.conf test/CodestrikerTest Config.pm MainPage.pm TopicContentPage.pm TopicPropertiesPage.pm Added: test diffparsers.t Log: * Extra options are now available in the codestriker.conf file in regards to when emails are sent out. It is now possible to control whether emails are sent to the topic author and/or the comment author when new comments are created. Also, there is an option which determines if all reviewers are notified if the topic's state is changed. This is all controlled by the $email_send_options configuration item. From Jason Remillard. Index: CHANGELOG =================================================================== RCS file: /cvsroot/codestriker/codestriker/CHANGELOG,v retrieving revision 1.156 retrieving revision 1.157 diff -u -r1.156 -r1.157 --- CHANGELOG 7 Dec 2004 21:47:09 -0000 1.156 +++ CHANGELOG 21 Dec 2004 22:44:22 -0000 1.157 @@ -1,6 +1,16 @@ *** When upgrading, don't forget to: "cd bin ; ./checksetup.pl" *** *** Also, it is _highly_ advisable to backup your data before upgrading *** +Version 1.8.6 + +* Extra options are now available in the codestriker.conf file in + regards to when emails are sent out. It is now possible to control + whether emails are sent to the topic author and/or the comment + author when new comments are created. Also, there is an option + which determines if all reviewers are notified if the topic's state + is changed. This is all controlled by the $email_send_options + configuration item. From Jason Remillard. + Version 1.8.5 * Complete support for VSS repositories. Topics linked to a VSS Index: codestriker.conf =================================================================== RCS file: /cvsroot/codestriker/codestriker/codestriker.conf,v retrieving revision 1.67 retrieving revision 1.68 diff -u -r1.67 -r1.68 --- codestriker.conf 21 Nov 2004 05:00:04 -0000 1.67 +++ codestriker.conf 21 Dec 2004 22:44:22 -0000 1.68 @@ -260,13 +260,29 @@ # truncate them, to beat SPAM harvesters. $antispam_email = 0; -# If true, codestriker will send out emails to the topic owner and -# comment submitter when a comment is added. If this option is false, -# no email will be sent to either the topic owner or the comment -# submitter. Emails about each comment may not be needed if a meeting + +# If comments_sent_to_topic_author is true, codestriker will send +# out email to the topic owner and when a comment is added. If this +# option is false, no email will be sent the topic owner. +# +# If comments_sent_to_commenter is set to true, codestriker will +# blind cc (bcc) the comment author on all comments. The preceding +# comments_sent_to_topic_author must be true in order for the blind +# cc of emails to be enabled. +# +# If topic_state_change_sent_to_reviewers is set to true, codestriker +# will send email to the reviewer list when a topic state is changed. +# +# Emails about each comment may not be needed if a meeting # is planned to discuss the topic. If the comment submitter specifies -# a cc user, an email is always sent out, regardless of this setting. -$allow_comment_email = 1; +# a cc user, an email is always sent out, regardless of any email +# settings. +$email_send_options = + { + comments_sent_to_topic_author => 1, + comments_sent_to_commenter => 0, + topic_state_change_sent_to_reviewers => 0 + }; # Default width of tabs. Most developers expect this to be 8, but # some expect to see 4. This is also stored in the user's cookie, and Index: Codestriker.pm =================================================================== RCS file: /cvsroot/codestriker/codestriker/lib/Codestriker.pm,v retrieving revision 1.66 retrieving revision 1.67 diff -u -r1.66 -r1.67 --- Codestriker.pm 12 Oct 2004 10:13:38 -0000 1.66 +++ Codestriker.pm 21 Dec 2004 22:44:24 -0000 1.67 @@ -19,7 +19,7 @@ $file_reviewer $db $dbuser $dbpasswd $codestriker_css $NORMAL_MODE $COLOURED_MODE $COLOURED_MONO_MODE $topic_states $bug_db $bug_db_host $bug_db_name $bug_db_password $bug_db_user - $lxr_map $allow_comment_email $default_topic_br_mode + $lxr_map $email_send_options $default_topic_br_mode $allow_delete $allow_searchlist $default_file_to_view $allow_projects $antispam_email $VERSION $title $BASEDIR $metric_config $tmpdir @metric_schema $comment_state_metrics Index: Email.pm =================================================================== RCS file: /cvsroot/codestriker/codestriker/lib/Codestriker/TopicListeners/Email.pm,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- Email.pm 17 Nov 2004 10:04:40 -0000 1.12 +++ Email.pm 21 Dec 2004 22:44:25 -0000 1.13 @@ -92,6 +92,9 @@ # removed reviewer,cc - sent to the removed reviewer, and author if != user. # added reviwer,cc - send to the new cc, and author if != user. # any change not made by the author, sent to the author. + # + # If topic_state_change_sent_to_reviewers is true, then topic state changes + # will be sent out to the reviewers. # Record the list of email addresses already handled. my %handled_addresses = (); @@ -142,6 +145,15 @@ $handled_addresses{ $user } = 1; } + # Check for state changes + if ($topic->{topic_state} ne $topic_orig->{topic_state} && + $Codestriker::email_send_options->{topic_state_change_sent_to_reviewers}) { + + foreach my $user ( split /, /, $topic->{reviewers} ) { + $handled_addresses{ $user } = 1; + } + } + my @to_list = keys( %handled_addresses ); if ( @to_list ) { @@ -160,22 +172,7 @@ sub send_topic_changed_email { my ($self, $user_that_made_the_change, $topic_orig, $topic,@to_list) = @_; - my $changes; - - # First line is naming names on who made the change to the topic. - if ($user_that_made_the_change ne "") { - $changes .= "The following changes were made by $user_that_made_the_change.\n"; - } - else { - my $host = $ENV{'REMOTE_HOST'}; - my $addr = $ENV{'REMOTE_ADDR'}; - - $host = "(unknown)" if !defined($host); - $addr = "(unknown)" if !defined($addr); - - $changes .= "The following changes were made by an unknown user from " . - "host $host and address $addr\n"; - } + my $changes = ""; # Check for author change. if ($topic->{author} ne $topic_orig->{author}) { @@ -229,11 +226,6 @@ $changes .= "The description was changed.\n"; } - # Check for state changes - if ($topic->{topic_state} ne $topic_orig->{topic_state} ) { - $changes .= "The state was changed to $topic->{topic_state}.\n"; - } - if ($topic->{project_name} ne $topic_orig->{project_name}) { $changes .= "The project was changed to $topic->{project_name}.\n"; } @@ -242,6 +234,38 @@ $changes .= "The bug list was changed to $topic->{bug_ids}.\n"; } + my $change_event_name = "Modified"; + + # Check for state changes, has to be the last check. + if ($topic->{topic_state} ne $topic_orig->{topic_state} ) { + + if ( $changes eq "" ) { + # The state change is the only thing changed. This is a common + # case, so tell people in the title what state the topic is in + # now. + $change_event_name = $topic->{topic_state}; + } + + $changes .= "The state was changed to $topic->{topic_state}.\n"; + } + + # First line is naming names on who made the change to the topic. + if ($user_that_made_the_change ne "") { + $changes = "The following changes were made by $user_that_made_the_change.\n" . + $changes + } + else { + my $host = $ENV{'REMOTE_HOST'}; + my $addr = $ENV{'REMOTE_ADDR'}; + + $host = "(unknown)" if !defined($host); + $addr = "(unknown)" if !defined($addr); + + $changes = "The following changes were made by an unknown user from " . + "host $host and address $addr\n" . $changes; + } + + # See if anybody needs an mail, if so then send it out. if (@to_list) { my $from = $user_that_made_the_change; @@ -271,7 +295,7 @@ my $cc = ""; # Send off the email to the revelant parties. - $self->_send_topic_email($topic, 0, "Modified", 1, $from, + $self->_send_topic_email($topic, 0,$change_event_name , 1, $from, $to, $cc, $bcc,$changes); } } @@ -319,7 +343,13 @@ my $from = $comment->{author}; my $to = $topic->{author}; - my $bcc = $comment->{author}; + + # don't blind copy the comment authors unless configured to. + my $bcc = ""; + if ( $Codestriker::email_send_options->{comments_sent_to_commenter} ) { + $bcc = $comment->{author}; + } + my $subject = "[REVIEW] Topic \"$topic->{title}\" comment added by $comment->{author}"; my $body = "$comment->{author} added a comment to Topic \"$topic->{title}\".\n\n" . @@ -351,7 +381,8 @@ } # Send the email notification out, if it is allowed in the config file. - if ( $Codestriker::allow_comment_email || $comment->{cc} ne "") + if ( $Codestriker::email_send_options->{comments_sent_to_topic_author} || + $comment->{cc} ne "") { if (!$self->doit(0, $comment->{topicid}, $from, $to, join(', ',@cc_recipients), $bcc, Index: changetopicproperties.t =================================================================== RCS file: /cvsroot/codestriker/codestriker/test/changetopicproperties.t,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- changetopicproperties.t 8 Sep 2004 03:48:57 -0000 1.2 +++ changetopicproperties.t 21 Dec 2004 22:44:26 -0000 1.3 @@ -61,7 +61,7 @@ ok( $properties->CompareProperties( 'topic_state',$newState),"verify state to $newState"); } -ok( $properties->SetTopicProperties( 'topic_state','Delete'),"delete topic, cleanup"); +ok( $properties->SetTopicProperties( 'topic_state','Deleted'),"delete topic, cleanup"); sub TestField { @@ -82,7 +82,6 @@ { push @new_values,$CodestrikerTest::Config::email_adddress[0]; push @new_values,$CodestrikerTest::Config::email_adddress[1]; - push @bad_values,"xxxx"; } elsif ($type eq 'email_list') { @@ -98,9 +97,6 @@ push @new_values,"$em1;$em2"; push @new_values," $em1 , $em2 "; - - push @bad_values,"xxxx"; - push @bad_values,"$em1,xxxx"; } if ( $allow_empty ) Index: cleanuptesttopics.t =================================================================== RCS file: /cvsroot/codestriker/codestriker/test/cleanuptesttopics.t,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- cleanuptesttopics.t 8 Sep 2004 03:48:57 -0000 1.2 +++ cleanuptesttopics.t 21 Dec 2004 22:44:26 -0000 1.3 @@ -29,7 +29,7 @@ my $properties = $topic_content->GetLink('Topic Properties'); - ok( $properties->SetTopicProperties( topic_state=>'Delete'),"delete topic $topic->{title}"); + ok( $properties->SetTopicProperties( topic_state=>'Deleted'),"delete topic $topic->{title}"); } Index: deletetopic.t =================================================================== RCS file: /cvsroot/codestriker/codestriker/test/deletetopic.t,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- deletetopic.t 8 Sep 2004 03:48:57 -0000 1.2 +++ deletetopic.t 21 Dec 2004 22:44:26 -0000 1.3 @@ -40,7 +40,7 @@ my $properties = $topic_content->GetLink('Topic Properties'); -ok( $properties->SetTopicProperties( topic_state=>'Delete'),"change delete"); +ok( $properties->SetTopicProperties( topic_state=>'Deleted'),"change delete"); my $searchPage = $main->GetLink("Search"); Index: htmlescape.t =================================================================== RCS file: /cvsroot/codestriker/codestriker/test/htmlescape.t,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- htmlescape.t 8 Sep 2004 03:48:57 -0000 1.2 +++ htmlescape.t 21 Dec 2004 22:44:26 -0000 1.3 @@ -28,7 +28,7 @@ topic_description=>'description <PRE><TABLE>', email=>$CodestrikerTest::Config::email_adddress[0], reviewers=>$CodestrikerTest::Config::email_adddress[1], - topic_file=>'testtopictexts/htmlfile.txt', + topic_file=>'testtopictexts/txt-htmlfile.txt', cc=>''); ok( $confirmPage->TopicCreated(),"normal text file create" ); Index: mainpagechangestate.t =================================================================== RCS file: /cvsroot/codestriker/codestriker/test/mainpagechangestate.t,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- mainpagechangestate.t 8 Sep 2004 03:48:57 -0000 1.2 +++ mainpagechangestate.t 21 Dec 2004 22:44:26 -0000 1.3 @@ -132,7 +132,7 @@ topic_description=>'description', email=>$CodestrikerTest::Config::email_adddress[0], reviewers=>$CodestrikerTest::Config::email_adddress[1], - topic_file=>'testtopictexts/htmlfile.txt', + topic_file=>'testtopictexts/txt-htmlfile.txt', cc=>''); ok( $confirmPage->TopicCreated(),"created topic $title" ); Index: runtests.conf =================================================================== RCS file: /cvsroot/codestriker/codestriker/test/runtests.conf,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- runtests.conf 8 Sep 2004 03:48:57 -0000 1.2 +++ runtests.conf 21 Dec 2004 22:44:26 -0000 1.3 @@ -5,7 +5,7 @@ @email_adddress = ( 'jpr@clover','jpr2@clover','jpr3@clover' ); -$version = "1.8.3"; +$version = "1.8.5"; $check_help_links = 0; Index: diffparsers.t =================================================================== RCS file: diffparsers.t diff -N diffparsers.t --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ diffparsers.t 21 Dec 2004 22:44:26 -0000 1.1 @@ -0,0 +1,113 @@ + +# make sure if we don't have any repo configured that all traces of repo's +# are gone from the system. + +use strict; +use warnings; + +use Test::More qw(no_plan); + +use CodestrikerTest::Config; +use CodestrikerTest::MainPage; +use CodestrikerTest::Page; +use CodestrikerTest::PageFactory; +use CodestrikerTest::Util; + +CodestrikerTest::Config::ProcessCommandLine(); + +my $main = CodestrikerTest::PageFactory->CreatePage($CodestrikerTest::Config::main_url); + +my @filenames = <testtopictexts/*.txt>; + +foreach my $filename (@filenames) +{ + my $repo = '/home/sits/cvs'; + + $filename =~ /\/([a-zA-Z]+)/; + + my $repo_type = $1; + + if ($repo_type eq "cvs") + { + $repo = '/home/sits/cvs'; + } + elsif ($repo_type eq "perforce") + { + $repo = 'perforce:sits:sits2@localhost:1666'; + } + elsif ($repo_type eq "clearcase") + { + $repo = 'clearcase:c:\\stuff\\view_name\\vob_name'; + } + elsif ($repo_type eq "svn") + { + $repo = 'svn:http://svn.collab.net/repos/svn/trunk'; + } + elsif ($repo_type eq "vss") + { + $repo = 'vss:c:\\Program Files\\Microsoft Visual Studio\\VSS;admin;password'; + } + + print "# Creating topic for file $filename - $repo_type - $repo\n"; + + my $topic_content = $main->MakeAndNavigateToNewTopic(topic_file=>$filename,repository=>$repo); + + # clean it up. + my $properties = $topic_content->GetLink('Topic Properties'); + + my @files = $topic_content->GetTopcFileInfo(); + my @bench_files = (); + + if ( -e "$filename.bench" ) + { + open BENCH,"<$filename.bench" or die "$!"; + + my $index = 0; + + while ( <BENCH> ) + { + chop; + my ($sourcefilename,$version,$added,$removed) = split /\t/; + + is( $sourcefilename,$files[$index]->{filename}, + "$filename $index - $sourcefilename == $files[$index]->{filename}" ); + is( $version,$files[$index]->{version}, + "$filename $index - $version == $files[$index]->{version}" ); + is( $added,$files[$index]->{added_lines}, + "$filename $index - $added == $files[$index]->{added_lines}" ); + is( $removed,$files[$index]->{removed_lines}, + "$filename $index - $removed == $files[$index]->{removed_lines}" ); + + ++$index; + } + + close(BENCH); + } + else + { + print "# *** creating $filename.bench\n"; + + open BENCH,">$filename.bench" or die "$!"; + + my $index = 0; + foreach my $file (@files) + { + print BENCH $files[$index]->{filename} . "\t" . + $files[$index]->{version} . "\t" . + $files[$index]->{added_lines} . "\t" . + $files[$index]->{removed_lines} . "\n"; + + ++$index; + } + + close BENCH; + } + + ok( $properties->SetTopicProperties( topic_state=>'Deleted'),"change delete"); +} + + + + +0; + Index: Config.pm =================================================================== RCS file: /cvsroot/codestriker/codestriker/test/CodestrikerTest/Config.pm,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Config.pm 8 Sep 2004 03:48:57 -0000 1.2 +++ Config.pm 21 Dec 2004 22:44:27 -0000 1.3 @@ -34,7 +34,8 @@ close FILE; } -BEGIN + +sub ReloadConfiguration { $run_quick = 0; $check_help_links = 0; @@ -53,14 +54,17 @@ close CONFIG_FILE; $title = "Codestriker $version"; - - # Restore the default config file that is stored in the current directory. - RestoreDefaultConfiguration(); } - +# called at the start of each test. Used to process the command line args +# from runtests.pl and reset the config of codestriker. sub ProcessCommandLine { + ReloadConfiguration(); + + # Restore the default config file that is stored in the current directory. + RestoreDefaultConfiguration(); + if ( $ENV{CSTEST_OPTIONS} ) { push @ARGV, split /\s/,$ENV{CSTEST_OPTIONS}; Index: MainPage.pm =================================================================== RCS file: /cvsroot/codestriker/codestriker/test/CodestrikerTest/MainPage.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- MainPage.pm 14 Dec 2004 21:39:49 -0000 1.3 +++ MainPage.pm 21 Dec 2004 22:44:27 -0000 1.4 @@ -141,7 +141,6 @@ my $p = HTML::TokeParser->new(doc=>\$content); - # Skip the top table, remove this to run against 1.7.8. $p->get_tag("table"); $p->get_tag("/table"); Index: TopicContentPage.pm =================================================================== RCS file: /cvsroot/codestriker/codestriker/test/CodestrikerTest/TopicContentPage.pm,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- TopicContentPage.pm 8 Sep 2004 03:48:57 -0000 1.2 +++ TopicContentPage.pm 21 Dec 2004 22:44:27 -0000 1.3 @@ -91,6 +91,89 @@ return $count; } +sub GetTopcFileInfo +{ + my ($self) = @_; + + $self->_ParseFileList(); + + return @{$self->{file_list}}; + +} + +sub _ParseFileList +{ + my ($self) = @_; + + if ( !exists($self->{file_list})) + { + my $content = $self->{response}->content; + + my $p = HTML::TokeParser->new(doc=>\$content); + + $p->get_tag("table"); + $p->get_tag("table"); + $p->get_tag("table"); + $p->get_tag("/table"); + + # This is the topic table. + + $p->get_tag("/tr"); # move past the TOC header. + + my @files; + + while (my $token = $p->get_tag("tr","/table")) + { + last if $token->[0] eq "/table"; + + $token = $p->get_tag("td"); + + my $hasVersion = !exists( $token->[1]->{"colspan"} ); + + my $filename = $p->get_trimmed_text("/td"); + $filename =~ s/^\[Jump to\] //; + + my $version = ""; + if ( $hasVersion) + { + $p->get_tag("td"); + $version = $p->get_trimmed_text("/td"); + + # trim the white space, the \xA0 is a html character code for a space. + $version =~ s/^[\s\xA0]+//g; + $version =~ s/[\s\xA0]+$//g; + } + + $p->get_tag("td"); + my $added_removed_lines = $p->get_trimmed_text("/td"); + $added_removed_lines =~ /\+([0-9]+),-([0-9]+)/; + + my $added_lines = ""; + my $removed_lines = ""; + if ( defined($1) && defined($2)) + { + $added_lines = $1; + $removed_lines = $2; + } + + my $file = + { + filename=>$filename, + version=>$version, + added_lines=>$added_lines, + removed_lines=>$removed_lines + }; + + # for debugging. + # print "# " . scalar(@files) . " fn=$filename v=$version add=$added_lines remove=$removed_lines\n"; + + push (@files,$file); + } + + $self->{file_list} = \@files; + } +} + 1; Index: TopicPropertiesPage.pm =================================================================== RCS file: /cvsroot/codestriker/codestriker/test/CodestrikerTest/TopicPropertiesPage.pm,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- TopicPropertiesPage.pm 8 Sep 2004 03:48:57 -0000 1.2 +++ TopicPropertiesPage.pm 21 Dec 2004 22:44:27 -0000 1.3 @@ -48,8 +48,11 @@ # The dumb form module does not like getting all of its params passed in at once. foreach my $key ( keys ( %options )) { + if ( $options{$key} ne $form->value( $key ) ) + { $form->value($key,$options{$key}); } + } #$form->dump(); |