You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by tr...@apache.org on 2005/07/04 17:50:26 UTC

svn commit: r209095 - in /maven/continuum/trunk/continuum-core/src: main/java/org/apache/maven/continuum/buildcontroller/ main/java/org/apache/maven/continuum/notification/mail/ main/resources/org/apache/maven/continuum/notification/mail/templates/ tes...

Author: trygvis
Date: Mon Jul  4 08:50:25 2005
New Revision: 209095

URL: http://svn.apache.org/viewcvs?rev=209095&view=rev
Log:
Fixing CONTINUUM-174.

Modified:
    maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/DefaultBuildController.java
    maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifier.java
    maven/continuum/trunk/continuum-core/src/main/resources/org/apache/maven/continuum/notification/mail/templates/common.vm
    maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifierTest.java

Modified: maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/DefaultBuildController.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/DefaultBuildController.java?rev=209095&r1=209094&r2=209095&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/DefaultBuildController.java (original)
+++ maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/buildcontroller/DefaultBuildController.java Mon Jul  4 08:50:25 2005
@@ -127,9 +127,9 @@
                     // Check to see if there was a error while checking out the project
                     // ----------------------------------------------------------------------
 
-                    // TODO: remove once CONTINUUM-193 is resolved
                     if ( StringUtils.isEmpty( checkoutErrorMessage ) && StringUtils.isEmpty( checkoutErrorException ) )
                     {
+                        // TODO: remove once CONTINUUM-193 is resolved
                         UpdateScmResult updateScmResult = new UpdateScmResult();
 
                         updateScmResult.setCommandOutput( checkOutScmResult.getCommandOutput() );
@@ -190,58 +190,6 @@
                 buildId = storeBuild( project, build );
             }
 
-/////////////////////// This section should delegate to UpdateWorkingDirectoryFromScmContinuumAction
-/*
-/////////////////////// START SECTION
-            // ----------------------------------------------------------------------
-            // Update the project
-            //
-            // If this fails, create a build, store the scm result and set the
-            // build status to error.
-            // ----------------------------------------------------------------------
-
-
-            if ( !update( context ) )
-            {
-                return;
-            }
-/////////////////////// END SECTION
-*/
-/*
-/////////////////////// This section should delegate to UpdateProjectFromWorkingDirectoryContinuumAction
-/////////////////////// START SECTION
-            if ( !updateProjectMetadata( context ) )
-            {
-                return;
-            }
-/////////////////////// END SECTION
-*/
-/*
-/////////////////////// This section should delegate to ExecuteBuilderContinuumAction
-/////////////////////// START SECTION
-
-            // ----------------------------------------------------------------------
-            // Figure out if the project needs to be built
-            // ----------------------------------------------------------------------
-
-            if ( context.scmResult.getUpdatedFiles().size() == 0 &&
-                 !forced &&
-                 !isNew( context.project ) )
-            {
-                getLogger().info( "No files updated, not building. Project id '" + context.project.getId() + "'." );
-
-//                Nothing to do, the project doesn't contain any state anymore
-//                store.setBuildNotExecuted( projectId );
-
-                return;
-            }
-
-            makeBuild( context );
-
-            buildProject( context );
-
-/////////////////////// END SECTION
-*/
         }
         catch ( Exception ex )
         {
@@ -270,104 +218,6 @@
         }
     }
 
-    // ----------------------------------------------------------------------
-    //
-    // ----------------------------------------------------------------------
-/*
-    private boolean update( BuildContext context )
-        throws ContinuumStoreException
-    {
-        try
-        {
-// No state in the project
-//            store.setIsUpdating( context.project.getId() );
-
-            notifier.checkoutStarted( context.project );
-
-            context.scmResult = scm.updateProject( context.project );
-
-// No state in the project
-//            store.setUpdateDone( context.project.getId() );
-
-            return true;
-        }
-        catch ( ContinuumScmException e )
-        {
-            getLogger().fatalError( "Error while updating from SCM. Project id '" + context.project.getId() + "'." );
-
-            makeAndStoreErrorBuildResult( context, e );
-
-            return false;
-        }
-        finally
-        {
-            notifier.checkoutComplete( context.project, context.scmResult );
-        }
-    }
-*/
-/*
-    private boolean updateProjectMetadata( BuildContext context )
-        throws ContinuumStoreException
-    {
-        // TODO: Update the metadata files and then update the project descriptor
-        // before updating the project itself. This will make it possible to migrate
-        // a project from one SCM to another.
-
-        ContinuumProject project = context.project;
-
-        try
-        {
-            continuum.updateProjectFromScm( project.getId() );
-        }
-        catch ( ContinuumException e )
-        {
-            getLogger().fatalError( "Error while updating project metadata from check out.", e );
-
-            makeAndStoreErrorBuildResult( context, e );
-
-            return false;
-        }
-
-        return true;
-    }
-*/
-/*
-    private void buildProject( BuildContext context )
-        throws ContinuumStoreException
-    {
-        try
-        {
-            notifier.runningGoals( context.project, context.build );
-
-            context.result = context.builder.build( context.project );
-
-            if ( context.result.isSuccess() )
-            {
-                context.state = ContinuumProjectState.OK;
-            }
-            else
-            {
-                context.state = ContinuumProjectState.FAILED;
-            }
-
-            setBuildResult( context.build.getId(),
-                            context.state,
-                            context.result,
-                            context.scmResult,
-                            null );
-        }
-        catch ( Throwable ex )
-        {
-            getLogger().fatalError( "Error building the project, project id: '" + context.project.getId() + "'.", ex );
-
-            makeAndStoreErrorBuildResult( context, ex );
-        }
-        finally
-        {
-            notifier.goalsCompleted( context.project, context.build );
-        }
-    }
-*/
     // ----------------------------------------------------------------------
     //
     // ----------------------------------------------------------------------

Modified: maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifier.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifier.java?rev=209095&r1=209094&r2=209095&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifier.java (original)
+++ maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifier.java Mon Jul  4 08:50:25 2005
@@ -83,7 +83,7 @@
     //
     // ----------------------------------------------------------------------
 
-    private String localHostName;
+    private String buildHost;
 
     private FormatterTool formatterTool;
 
@@ -101,6 +101,17 @@
 
     public void initialize()
     {
+        try
+        {
+            InetAddress address = InetAddress.getLocalHost();
+
+            buildHost = StringUtils.clean( address.getCanonicalHostName() );
+        }
+        catch ( UnknownHostException ex )
+        {
+            fromName = "Continuum";
+        }
+
         // ----------------------------------------------------------------------
         // From mailbox
         // ----------------------------------------------------------------------
@@ -118,22 +129,13 @@
 
         if ( StringUtils.isEmpty( fromName ) )
         {
-            try
-            {
-                InetAddress address = InetAddress.getLocalHost();
-
-                localHostName = address.getCanonicalHostName();
-
-                fromName = "Continuum@" + localHostName;
-            }
-            catch ( UnknownHostException ex )
-            {
-                fromName = "Continuum";
-            }
+            fromName = "Continuum@" + buildHost;
         }
 
         getLogger().info( "From name: " + fromName );
 
+        getLogger().info( "Build host name: " + buildHost );
+
         // ----------------------------------------------------------------------
         //
         // ----------------------------------------------------------------------
@@ -221,8 +223,6 @@
 
             context.put( "build", build );
 
-            context.put( "build", build );
-
             context.put( "previousBuild", previousBuild );
 
             // ----------------------------------------------------------------------
@@ -233,7 +233,7 @@
 
             // TODO: Make the build host a part of the build
 
-            context.put( "buildHost", localHostName );
+            context.put( "buildHost", buildHost );
 
             // ----------------------------------------------------------------------
             //
@@ -305,7 +305,7 @@
 
         MailMessage message = new MailMessage();
 
-        message.addHeader( "X-Continuum-Host", localHostName );
+        message.addHeader( "X-Continuum-Build-Host", buildHost );
 
         message.addHeader( "X-Continuum-Project-Id", project.getId() );
 

Modified: maven/continuum/trunk/continuum-core/src/main/resources/org/apache/maven/continuum/notification/mail/templates/common.vm
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-core/src/main/resources/org/apache/maven/continuum/notification/mail/templates/common.vm?rev=209095&r1=209094&r2=209095&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-core/src/main/resources/org/apache/maven/continuum/notification/mail/templates/common.vm (original)
+++ maven/continuum/trunk/continuum-core/src/main/resources/org/apache/maven/continuum/notification/mail/templates/common.vm Mon Jul  4 08:50:25 2005
@@ -14,37 +14,55 @@
  * limitations under the License.
  *#
 #macro( shellBuildResult )
-****************************************************************************
 Build statistics:
   State: $formatter.formatProjectState( $build.state )
 #if ( $previousBuild )
   Previous State: $formatter.formatProjectState( $previousBuild.state )
 #else
-  Previous build: No previous build.
+  Previous Build: No previous build.
 #end
   Started at: $formatter.formatTimestamp( $build.startTime )
   Finished at: $formatter.formatTimestamp( $build.endTime )
   Total time: $formatter.formatInterval( $build.startTime, $build.endTime )
+  Forced: $build.forced
+  Exit code: $build.exitCode
   Building machine hostname: $buildHost
-****************************************************************************
 
-#if ( $buildResult.standardOutput && $buildResult.standardOutput != "" )
+#if ( $build.updateScmResult )
+Changes
+#if ( $build.updateScmResult.updatedFiles.size() == 0 )
+ No files changed
+#else
+ #foreach ( $file in $build.updateScmResult.updatedFiles )
+ * $file.path
+ #end
+#end
+#end
+
+#if ( $build.state == 4 )
 ****************************************************************************
-Standard output:
+Build Error:
 ****************************************************************************
-$buildResult.standardOutput
+$build.error
+#else
+****************************************************************************
+Standard Output:
 ****************************************************************************
+#if ( $build.standardOutput && $build.standardOutput != "" )
+$build.standardOutput
 #else
 There was no content on standard output.
 #end
-
-#if( $buildResult.standardError && $buildResult.standardError != "" )
 ****************************************************************************
-Standard error:
+
 ****************************************************************************
-$buildResult.standardError
+Standard Error:
 ****************************************************************************
+#if( $build.standardError && $build.standardError != "" )
+$build.standardError
 #else
 There was no content on standard error.
 #end
+****************************************************************************
 #end
+#end ## #macro( shellBuildResult )

Modified: maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifierTest.java
URL: http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifierTest.java?rev=209095&r1=209094&r2=209095&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifierTest.java (original)
+++ maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/notification/mail/MailContinuumNotifierTest.java Mon Jul  4 08:50:25 2005
@@ -28,6 +28,8 @@
 import org.apache.maven.continuum.project.ContinuumProject;
 import org.apache.maven.continuum.project.ContinuumProjectState;
 import org.apache.maven.continuum.project.MavenTwoProject;
+import org.apache.maven.continuum.scm.UpdateScmResult;
+import org.apache.maven.continuum.scm.ScmFile;
 
 import org.codehaus.plexus.PlexusTestCase;
 import org.codehaus.plexus.mailsender.MailMessage;
@@ -42,71 +44,103 @@
 public class MailContinuumNotifierTest
     extends PlexusTestCase
 {
-    public void testMailNotification()
+    public void testSuccessfulBuild()
         throws Exception
     {
-        Notifier notifier = (Notifier) lookup( Notifier.ROLE, "mail" );
+        ContinuumProject project = makeProject();
 
-        MockMailSender mailSender = (MockMailSender) lookup( MockMailSender.ROLE );
+        ContinuumBuild build = makeBuild( ContinuumProjectState.OK );
 
-        // ----------------------------------------------------------------------
-        //
-        // ----------------------------------------------------------------------
+        build.setStandardOutput( "stdout" );
 
-        String source = ContinuumNotificationDispatcher.MESSAGE_ID_BUILD_COMPLETE;
+        build.setStandardError( "stderr" );
 
-        Set recipients = new HashSet();
+        MailMessage mailMessage = sendNotificationAndGetMessage( project, build );
 
-        recipients.add( "foo@bar" );
+        dumpContent( mailMessage );
+    }
 
-        Map context =  new HashMap();
+    public void testFailedBuild()
+        throws Exception
+    {
+        ContinuumProject project = makeProject();
 
-        // ----------------------------------------------------------------------
-        // ContinuumProject
-        // ----------------------------------------------------------------------
+        ContinuumBuild build = makeBuild( ContinuumProjectState.FAILED );
 
-        ContinuumProject project = new MavenTwoProject();
+        MailMessage mailMessage = sendNotificationAndGetMessage( project, build );
 
-        project.setName( "Test Project" );
+        build.setStandardOutput( "stdout" );
 
-        project.setExecutorId( MavenTwoBuildExecutor.ID );
+        dumpContent( mailMessage );
+    }
 
-        context.put( ContinuumNotificationDispatcher.CONTEXT_PROJECT, project );
+    public void testErrorenousBuild()
+        throws Exception
+    {
+        ContinuumProject project = makeProject();
 
-        // ----------------------------------------------------------------------
-        // ContinuumBuild
-        // ----------------------------------------------------------------------
+        ContinuumBuild build = makeBuild( ContinuumProjectState.ERROR );
 
-        ContinuumBuild build = new ContinuumBuild();
+        build.setStandardError( "stderr" );
 
-        build.setId( "17" );
+        build.setError( "Big long error message" );
 
-        build.setStartTime( System.currentTimeMillis() );
+        MailMessage mailMessage = sendNotificationAndGetMessage( project, build );
 
-        build.setEndTime( System.currentTimeMillis() + 1234567 );
+        dumpContent( mailMessage );
+    }
 
-        build.setError( null );
+    private void dumpContent( MailMessage mailMessage )
+    {
+//        System.err.println( mailMessage.getContent() );
+    }
 
-        build.setState( ContinuumProjectState.OK );
+    // ----------------------------------------------------------------------
+    //
+    // ----------------------------------------------------------------------
+
+    private MailMessage sendNotificationAndGetMessage( ContinuumProject project,
+                                                       ContinuumBuild build )
+        throws Exception
+    {
+        Set recipients = new HashSet();
+
+        recipients.add( "foo@bar" );
+
+        Map context = new HashMap();
+
+        context.put( ContinuumNotificationDispatcher.CONTEXT_PROJECT, project );
 
         context.put( ContinuumNotificationDispatcher.CONTEXT_BUILD, build );
 
+        context.put( "buildHost", "foo.bar.com" );
+
         // ----------------------------------------------------------------------
         //
         // ----------------------------------------------------------------------
 
-        notifier.sendNotification( source, recipients, context );
+        Notifier notifier = (Notifier) lookup( Notifier.ROLE, "mail" );
+
+        notifier.sendNotification( ContinuumNotificationDispatcher.MESSAGE_ID_BUILD_COMPLETE,
+                                   recipients,
+                                   context );
 
         // ----------------------------------------------------------------------
         //
         // ----------------------------------------------------------------------
 
+        MockMailSender mailSender = (MockMailSender) lookup( MockMailSender.ROLE );
+
         assertEquals( 1, mailSender.getReceivedEmailSize() );
 
         List mails = CollectionUtils.iteratorToList( mailSender.getReceivedEmail() );
 
         MailMessage mailMessage = (MailMessage) mails.get( 0 );
 
+        // ----------------------------------------------------------------------
+        //
+        // ----------------------------------------------------------------------
+
         assertEquals( "continuum@localhost", mailMessage.getFrom().getMailbox() );
 
         assertEquals( "Continuum", mailMessage.getFrom().getName() );
@@ -118,5 +152,48 @@
         assertEquals( "foo@bar", ( (MailMessage.Address) to.get( 0 ) ).getMailbox() );
 
         assertNull( ( (MailMessage.Address) to.get( 0 ) ).getName() );
+
+        return mailMessage;
+    }
+
+    private ContinuumProject makeProject()
+    {
+        ContinuumProject project = new MavenTwoProject();
+
+        project.setName( "Test Project" );
+
+        project.setExecutorId( MavenTwoBuildExecutor.ID );
+        return project;
+    }
+
+    private ContinuumBuild makeBuild( int state )
+    {
+        ContinuumBuild build = new ContinuumBuild();
+
+        build.setId( "17" );
+
+        build.setStartTime( System.currentTimeMillis() );
+
+        build.setEndTime( System.currentTimeMillis() + 1234567 );
+
+        build.setState( state );
+
+        build.setSuccess( state == ContinuumProjectState.OK );
+
+        build.setForced( true );
+
+        build.setExitCode( 10 );
+
+        UpdateScmResult updateScmResult = new UpdateScmResult();
+
+        ScmFile file = new ScmFile();
+
+        file.setPath( "/hey/yo/lets/go");
+
+        updateScmResult.getUpdatedFiles().add( file );
+
+        build.setUpdateScmResult( updateScmResult );
+
+        return build;
     }
 }