Author: trygvis
Date: Thu Apr 21 07:10:08 2005
New Revision: 164064

URL: http://svn.apache.org/viewcvs?rev=164064&view=rev
Log:
Fixing a issue with removing projects.
o When persisting the changed file list the object has to be JDO persistable so
  the list now contains ScmFile objects instead of Strings.
o Changed the build controller to add ScmFile objects instead of Strings.
o Added removeProject() to the continuum Python module.
o After the integration test has executed the tests on a project it removed 
them.

o Ignoring compiled Python files.

Modified:
    maven/continuum/trunk/continuum-core-it/   (props changed)
    maven/continuum/trunk/continuum-core-it/continuum.py
    maven/continuum/trunk/continuum-core-it/it.py
    
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/store/ModelloJPoxContinuumStore.java
    
maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/store/ModelloJPoxContinuumStoreTest.java
    maven/continuum/trunk/continuum-model/src/main/resources/continuum.mdo

Propchange: maven/continuum/trunk/continuum-core-it/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Thu Apr 21 07:10:08 2005
@@ -6,3 +6,4 @@
 *.ipr
 *.iws
 *.iml
+*.pyc

Modified: maven/continuum/trunk/continuum-core-it/continuum.py
URL: 
http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-core-it/continuum.py?rev=164064&r1=164063&r2=164064&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-core-it/continuum.py (original)
+++ maven/continuum/trunk/continuum-core-it/continuum.py Thu Apr 21 07:10:08 
2005
@@ -74,6 +74,9 @@
 
     return result[ "projects" ]
 
+def removeProject( projectId ):
+    checkResult( server.continuum.removeProject( projectId ) )
+
 def buildProject( projectId ):
     result = checkResult( server.continuum.buildProject( projectId ) )
 

Modified: maven/continuum/trunk/continuum-core-it/it.py
URL: 
http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-core-it/it.py?rev=164064&r1=164063&r2=164064&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-core-it/it.py (original)
+++ maven/continuum/trunk/continuum-core-it/it.py Thu Apr 21 07:10:08 2005
@@ -23,7 +23,7 @@
 
     if( expected == actual ):
         return
-    
+
     print
     print "##############################################"
     print "ASSERTION FAILURE!"
@@ -110,6 +110,15 @@
     assertEquals( "Standard output didn't contain the expected output.", 
expectedStandardOutput, buildResult.standardOutput )
     assertEquals( "Standard error wasn't empty.", 0, len( 
buildResult.standardError ) )
 
+def removeProject( projectId ):
+    continuum.removeProject( projectId )
+
+    map = continuum.server.continuum.getProject( projectId )
+
+    if ( map[ "result" ] != "failure" ):
+        print map
+        fail( "Expected a failure when removing project." )
+
 def execute( workingDirectory, command ):
     cwd = os.getcwd()
     os.chdir( workingDirectory )
@@ -187,10 +196,10 @@
     <nagEmailAddress>%(email)s</nagEmailAddress>
   </build>
 </project>
-""" % { 
-        "artifactId" : artifactId, 
-        "scm" : scm, 
-        "scmUrl" : makeScmUrl( scm, scmroot, artifactId ), 
+""" % {
+        "artifactId" : artifactId,
+        "scm" : scm,
+        "scmUrl" : makeScmUrl( scm, scmroot, artifactId ),
         "email" : email
       } )
     pom.close()
@@ -270,9 +279,14 @@
     script.close()
     os.system( "chmod +x " + basedir + "/script.sh" )
 
-############################################################
-# Start
-############################################################
+print "############################################################"
+print "Running integration tests"
+print ""
+print "NOTE:"
+print "When running these integration tests you will get some"
+print "stacktraces related."
+print "############################################################"
+print ""
 
 # This is the email that will be used as the nag email address
 email = "[EMAIL PROTECTED]"
@@ -329,6 +343,8 @@
     assertEquals( "The project name wasn't changed.", "Maven 1 Project - 
Changed", maven1.name )
     assertEquals( "The project version wasn't changed.", "1.1", maven1.version 
)
 
+    removeProject( maven1.id );
+
 if 1:
     progress( "Initializing Maven 2 CVS project" )
     initMaven2Project( maven2Project, cvsroot, "maven-2" )
@@ -345,16 +361,18 @@
     build = continuum.buildProject( maven2.id )
     assertSuccessfulNoBuildPerformed( build )
 
+    removeProject( maven2Id )
+
 if 1:
     progress( "Initializing Ant SVN project" )
     initAntProject( antProject )
     svnImport( antProject, svnroot, "ant-svn" )
 
     progress( "Adding Ant SVN project" )
-    antSvnId = continuum.addProjectFromScm( "scm:svn:file://" + svnroot + 
"/ant-svn", "ant", "Ant SVN Project", email, "3.0", 
-                                            { 
-                                                "executable": "ant", 
-                                                "targets" : "clean, build" 
+    antSvnId = continuum.addProjectFromScm( "scm:svn:file://" + svnroot + 
"/ant-svn", "ant", "Ant SVN Project", email, "3.0",
+                                            {
+                                                "executable": "ant",
+                                                "targets" : "clean, build"
                                             } )
     antSvn = continuum.getProject( antSvnId )
     assertProject( antSvnId, "Ant SVN Project", email, continuum.STATE_NEW, 
"3.0", "ant", antSvn )
@@ -362,17 +380,20 @@
     build = continuum.buildProject( antSvn.id )
     assertSuccessfulAntBuild( build )
 
+    removeProject( antSvnId )
+
 if 1:
     progress( "Initializing Ant CVS project" )
     initAntProject( antProject )
     cvsImport( antProject, cvsroot, "ant-cvs" )
-    antCvsId = continuum.addProjectFromScm( "scm:cvs:local:" + basedir + 
"/cvsroot:ant-cvs", "ant", "Ant CVS Project", email, "3.0", 
+    antCvsId = continuum.addProjectFromScm( "scm:cvs:local:" + basedir + 
"/cvsroot:ant-cvs", "ant", "Ant CVS Project", email, "3.0",
                                          { "executable": "ant", "targets" : 
"clean, build"} )
     antCvs = continuum.getProject( antCvsId )
     assertProject( antCvsId, "Ant CVS Project", email, continuum.STATE_NEW, 
"3.0", "ant", antCvs )
     progress( "Building CVS Ant project" )
     build = continuum.buildProject( antCvs.id )
     assertSuccessfulAntBuild( build )
+    removeProject( antCvsId )
 
 if 1:
     progress( "Initializing Shell CVS project" )
@@ -380,7 +401,7 @@
     cvsImport( shellProject, cvsroot, "shell" )
 
     progress( "Adding CVS Shell project" )
-    shellId = continuum.addProjectFromScm( "scm:cvs:local:" + basedir + 
"/cvsroot:shell", "shell", "Shell Project", email, "3.0", 
+    shellId = continuum.addProjectFromScm( "scm:cvs:local:" + basedir + 
"/cvsroot:shell", "shell", "Shell Project", email, "3.0",
                                            { "executable": "script.sh", 
"arguments" : ""} )
 
     shell = continuum.getProject( shellId )
@@ -414,6 +435,7 @@
     assertSuccessfulShellBuild( build, """a
 b
 """ )
+    removeProject( shellId )
 
 # TODO: Add project failure tests
 

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=164064&r1=164063&r2=164064&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
 Thu Apr 21 07:10:08 2005
@@ -29,10 +29,10 @@
 import org.apache.maven.continuum.project.ContinuumBuildResult;
 import org.apache.maven.continuum.project.ContinuumProject;
 import org.apache.maven.continuum.project.ContinuumProjectState;
+import org.apache.maven.continuum.project.ScmFile;
 import org.apache.maven.continuum.scm.ContinuumScm;
 import org.apache.maven.continuum.store.ContinuumStore;
 import org.apache.maven.continuum.store.ContinuumStoreException;
-import org.apache.maven.scm.ScmFile;
 import org.apache.maven.scm.command.update.UpdateScmResult;
 
 import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -266,9 +266,11 @@
 
         for ( Iterator it = scmFiles.iterator(); it.hasNext(); )
         {
-            ScmFile file = (ScmFile) it.next();
+            org.apache.maven.scm.ScmFile scmFile = 
(org.apache.maven.scm.ScmFile) it.next();
 
-            files.add( file.getPath() );
+            ScmFile file = new ScmFile( scmFile.getPath() );
+
+            files.add( file );
         }
 
         result.setChangedFiles( files );

Modified: 
maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/store/ModelloJPoxContinuumStore.java
URL: 
http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/store/ModelloJPoxContinuumStore.java?rev=164064&r1=164063&r2=164064&view=diff
==============================================================================
--- 
maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/store/ModelloJPoxContinuumStore.java
 (original)
+++ 
maven/continuum/trunk/continuum-core/src/main/java/org/apache/maven/continuum/store/ModelloJPoxContinuumStore.java
 Thu Apr 21 07:10:08 2005
@@ -24,12 +24,14 @@
 import java.util.Properties;
 
 import javax.jdo.JDOHelper;
+import javax.jdo.PersistenceManager;
 
 import org.apache.maven.continuum.project.ContinuumBuild;
 import org.apache.maven.continuum.project.ContinuumBuildResult;
 import org.apache.maven.continuum.project.ContinuumJPoxStore;
 import org.apache.maven.continuum.project.ContinuumProject;
 import org.apache.maven.continuum.project.ContinuumProjectState;
+import org.apache.maven.continuum.project.ScmFile;
 
 import org.codehaus.plexus.jdo.JdoFactory;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
@@ -112,10 +114,65 @@
     {
         try
         {
+            store.begin();
+
+//            System.err.println( "**********************************" );
+//            System.err.println( "**********************************" );
+//            System.err.println( "**********************************" );
+
+//            System.err.println( "getProject()" );
+            ContinuumProject project = store.getContinuumProject( projectId, 
false );
+
+            // TODO: This is dumb.
+            PersistenceManager pm = 
store.getThreadState().getPersistenceManager();
+
+//            System.err.println( "getBuilds()" );
+            for ( Iterator it = project.getBuilds().iterator(); it.hasNext(); )
+            {
+                ContinuumBuild build = (ContinuumBuild) it.next();
+
+//                System.err.println( "getBuildResult()" );
+                ContinuumBuildResult result = build.getBuildResult();
+
+//                System.err.println( "result.getChangedFiles()" );
+                List changedFiles = result.getChangedFiles();
+
+//                System.err.println( "changedFiles.clear()" );
+                changedFiles.clear();
+
+//                System.err.println( "pm.deletePersistentAll( changedFiles )" 
);
+                pm.deletePersistentAll( changedFiles );
+
+//                System.err.println( "result.setBuild( null )" );
+                result.setBuild( null );
+
+//                System.err.println( "pm.deletePersistent( result )" );
+                pm.deletePersistent( result );
+            }
+
+//            System.err.println( "project.getBuilds()" );
+            List builds = new ArrayList( project.getBuilds() );
+
+            for ( Iterator it = builds.iterator(); it.hasNext(); )
+            {
+                ContinuumBuild build = (ContinuumBuild) it.next();
+
+//                System.err.println( "build.setProject( null )" );
+                build.setProject( null );
+            }
+
+//            System.err.println( "pm.deletePersistentAll( builds )" );
+            pm.deletePersistentAll( project.getBuilds() );
+
+//            System.err.println( "store.deleteContinuumProject( projectId )" 
);
             store.deleteContinuumProject( projectId );
+
+            store.commit();
         }
         catch ( Exception e )
         {
+            rollback( store );
+
             throw new ContinuumStoreException( "Error while removing project 
with id '" + projectId + "'.", e );
         }
     }

Modified: 
maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/store/ModelloJPoxContinuumStoreTest.java
URL: 
http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/store/ModelloJPoxContinuumStoreTest.java?rev=164064&r1=164063&r2=164064&view=diff
==============================================================================
--- 
maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/store/ModelloJPoxContinuumStoreTest.java
 (original)
+++ 
maven/continuum/trunk/continuum-core/src/test/java/org/apache/maven/continuum/store/ModelloJPoxContinuumStoreTest.java
 Thu Apr 21 07:10:08 2005
@@ -29,6 +29,7 @@
 import org.apache.maven.continuum.project.ContinuumJPoxStore;
 import org.apache.maven.continuum.project.ContinuumProject;
 import org.apache.maven.continuum.project.ContinuumProjectState;
+import org.apache.maven.continuum.project.ScmFile;
 
 import org.codehaus.plexus.PlexusTestCase;
 import org.codehaus.plexus.jdo.JdoFactory;
@@ -342,6 +343,24 @@
         assertTrue( actual.containsKey( "key" ) );
 
         assertEquals( "value", actual.getProperty( "key" ) );
+    }
+
+    public void testRemoveProject()
+        throws Exception
+    {
+        ContinuumStore store = (ContinuumStore) lookup( ContinuumStore.ROLE );
+
+        String projectId = addProject( "Test Project" );
+
+        String buildId = store.createBuild( projectId );
+
+        ContinuumBuildResult result = new ShellBuildResult();
+
+        result.addChangedFile( new ScmFile( "foo" ) );
+
+        store.setBuildResult( buildId, ContinuumProjectState.OK, result, null 
);
+
+        store.removeProject( projectId );
     }
 
     // ----------------------------------------------------------------------

Modified: maven/continuum/trunk/continuum-model/src/main/resources/continuum.mdo
URL: 
http://svn.apache.org/viewcvs/maven/continuum/trunk/continuum-model/src/main/resources/continuum.mdo?rev=164064&r1=164063&r2=164064&view=diff
==============================================================================
--- maven/continuum/trunk/continuum-model/src/main/resources/continuum.mdo 
(original)
+++ maven/continuum/trunk/continuum-model/src/main/resources/continuum.mdo Thu 
Apr 21 07:10:08 2005
@@ -346,11 +346,42 @@
           <name>changedFiles</name>
           <version>1.0.0</version>
           <association>
-            <type>String</type>
+            <type>ScmFile</type>
             <multiplicity>*</multiplicity>
           </association>
         </field>
       </fields>
+    </class>
+
+    <class>
+      <name>ScmFile</name>
+      <version>1.0.0</version>
+      <fields>
+        <field>
+          <name>path</name>
+          <version>1.0.0</version>
+          <type>String</type>
+        </field>
+      </fields>
+      <codeSegments>
+        <codeSegment>
+          <code>
+            public ScmFile()
+            {
+            }
+
+            public ScmFile( String path )
+            {
+              this.path = path;
+            }
+
+            public String toString()
+            {
+              return path;
+            }
+          </code>
+        </codeSegment>
+      </codeSegments>
     </class>
 
     <class>


Reply via email to