Author: jdcasey Date: Fri Jul 6 10:10:55 2007 New Revision: 553960 URL: http://svn.apache.org/viewvc?view=rev&rev=553960 Log: first unit tests succeeds now.
Added: maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-SNAPSHOT.jar - copied unchanged from r553936, maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-20070618.225814-2.jar maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-SNAPSHOT.pom - copied unchanged from r553936, maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-20070618.225814-2.pom maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/parent/1.0-SNAPSHOT/parent-1.0-SNAPSHOT.pom - copied unchanged from r553936, maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/parent/1.0-SNAPSHOT/parent-1.0-20070618.225814-3.pom Removed: maven/shared/trunk/maven-repository-builder/src/test/resources/projects/massembly-210-direct-parent/src/main/java/ maven/shared/trunk/maven-repository-builder/src/test/resources/projects/massembly-210-direct-parent/src/test/ maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-20070618.225707-1.jar maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-20070618.225707-1.jar.md5 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-20070618.225707-1.jar.sha1 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-20070618.225707-1.pom maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-20070618.225707-1.pom.md5 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-20070618.225707-1.pom.sha1 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-20070618.225814-2.jar maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-20070618.225814-2.jar.md5 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-20070618.225814-2.jar.sha1 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-20070618.225814-2.pom maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-20070618.225814-2.pom.md5 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/child-1.0-20070618.225814-2.pom.sha1 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/maven-metadata.xml.md5 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/1.0-SNAPSHOT/maven-metadata.xml.sha1 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/maven-metadata.xml.md5 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/child/maven-metadata.xml.sha1 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/parent/1.0-SNAPSHOT/maven-metadata.xml.md5 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/parent/1.0-SNAPSHOT/maven-metadata.xml.sha1 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/parent/1.0-SNAPSHOT/parent-1.0-20070618.225538-1.pom maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/parent/1.0-SNAPSHOT/parent-1.0-20070618.225538-1.pom.md5 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/parent/1.0-SNAPSHOT/parent-1.0-20070618.225538-1.pom.sha1 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/parent/1.0-SNAPSHOT/parent-1.0-20070618.225707-2.pom maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/parent/1.0-SNAPSHOT/parent-1.0-20070618.225707-2.pom.md5 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/parent/1.0-SNAPSHOT/parent-1.0-20070618.225707-2.pom.sha1 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/parent/1.0-SNAPSHOT/parent-1.0-20070618.225814-3.pom maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/parent/1.0-SNAPSHOT/parent-1.0-20070618.225814-3.pom.md5 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/parent/1.0-SNAPSHOT/parent-1.0-20070618.225814-3.pom.sha1 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/parent/maven-metadata.xml.md5 maven/shared/trunk/maven-repository-builder/src/test/resources/remote-repository/massembly/210/parent/maven-metadata.xml.sha1 Modified: maven/shared/trunk/maven-repository-builder/pom.xml maven/shared/trunk/maven-repository-builder/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java maven/shared/trunk/maven-repository-builder/src/main/java/org/apache/maven/shared/repository/model/DefaultRepositoryInfo.java maven/shared/trunk/maven-repository-builder/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java Modified: maven/shared/trunk/maven-repository-builder/pom.xml URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-repository-builder/pom.xml?view=diff&rev=553960&r1=553959&r2=553960 ============================================================================== --- maven/shared/trunk/maven-repository-builder/pom.xml (original) +++ maven/shared/trunk/maven-repository-builder/pom.xml Fri Jul 6 10:10:55 2007 @@ -54,6 +54,12 @@ <version>1.0-beta-2</version> <scope>test</scope> </dependency> + <dependency> + <groupId>org.apache.maven.wagon</groupId> + <artifactId>wagon-http-lightweight</artifactId> + <version>1.0-beta-2</version> + <scope>test</scope> + </dependency> </dependencies> <build> <plugins> @@ -62,7 +68,7 @@ <version>2.3</version> <configuration> <excludes> - <exclude>**/DefaultRepositoryBuilderTest.java</exclude> + <exclude>**/TestRepositoryBuilderConfigSource.java</exclude> </excludes> </configuration> </plugin> Modified: maven/shared/trunk/maven-repository-builder/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-repository-builder/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java?view=diff&rev=553960&r1=553959&r2=553960 ============================================================================== --- maven/shared/trunk/maven-repository-builder/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java (original) +++ maven/shared/trunk/maven-repository-builder/src/main/java/org/apache/maven/shared/repository/DefaultRepositoryAssembler.java Fri Jul 6 10:10:55 2007 @@ -64,6 +64,7 @@ import org.apache.maven.shared.repository.utils.DigestUtils; import org.codehaus.plexus.logging.AbstractLogEnabled; import org.codehaus.plexus.logging.Logger; +import org.codehaus.plexus.logging.console.ConsoleLogger; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.IOUtil; @@ -121,12 +122,15 @@ ArtifactRepositoryFactory artifactRepositoryFactory, ArtifactMetadataSource metadataSource, MavenProjectBuilder projectBuilder ) { + // used for testing, primarily. this.artifactFactory = artifactFactory; this.artifactResolver = artifactResolver; this.repositoryLayout = repositoryLayout; this.artifactRepositoryFactory = artifactRepositoryFactory; this.metadataSource = metadataSource; this.projectBuilder = projectBuilder; + + enableLogging( new ConsoleLogger( Logger.LEVEL_DEBUG, getClass().getName() + "::Internal" ) ); } public void buildRemoteRepository( File repositoryDirectory, RepositoryInfo repository, @@ -203,7 +207,7 @@ } addPomWithAncestry( project.getArtifact(), project.getRemoteArtifactRepositories(), localRepository, - targetRepository, groupVersionAlignments ); + targetRepository, groupVersionAlignments, project.getFile() ); } private ArtifactFilter buildRepositoryFilter( RepositoryInfo repository, MavenProject project ) @@ -222,7 +226,9 @@ // descriptor everytime the POM is updated. // ---------------------------------------------------------------------------- - if ( repository.getIncludes().isEmpty() ) + List includes = repository.getIncludes(); + + if ( ( includes == null ) || includes.isEmpty() ) { List patterns = new ArrayList(); @@ -255,7 +261,9 @@ // up everything. // ---------------------------------------------------------------------------- - if ( !repository.getExcludes().isEmpty() ) + List excludes = repository.getExcludes(); + + if ( ( excludes != null ) && !excludes.isEmpty() ) { filter.add( new PatternExcludesArtifactFilter( repository.getExcludes(), true ) ); } @@ -299,7 +307,7 @@ writeChecksums( targetFile ); - addPomWithAncestry( a, project.getRemoteArtifactRepositories(), localRepository, targetRepository, groupVersionAlignments ); + addPomWithAncestry( a, project.getRemoteArtifactRepositories(), localRepository, targetRepository, groupVersionAlignments, null ); } } } @@ -317,29 +325,44 @@ } } + /** + * + * @param pomFileOverride This is used to allow injection of a POM's file directly, for + * cases where the POM has not been installed into the repository yet. + */ private void addPomWithAncestry( Artifact artifact, List remoteArtifactRepositories, ArtifactRepository localRepository, ArtifactRepository targetRepository, - Map groupVersionAlignments ) + Map groupVersionAlignments, File pomFileOverride ) throws RepositoryAssemblyException { - artifact = artifactFactory.createProjectArtifact( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() ); + String type = artifact.getType(); MavenProject p; try { - p = projectBuilder.buildFromRepository( artifact, - remoteArtifactRepositories, - localRepository ); + if ( pomFileOverride == null ) + { + artifact = artifactFactory.createProjectArtifact( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() ); + p = projectBuilder.buildFromRepository( artifact, remoteArtifactRepositories, localRepository ); + } + else + { + p = projectBuilder.build( pomFileOverride, localRepository, null ); + } } catch ( ProjectBuildingException e ) { - throw new RepositoryAssemblyException( "Error reading POM: " + artifact.getId(), e ); + throw new RepositoryAssemblyException( "Error reading POM for: " + artifact.getId(), e ); } // if we're dealing with a POM artifact, then we've already copied the POM itself; only process ancestry. - if ( "pom".equals( artifact.getType() ) ) + // NOTE: We need to preserve the original artifact for comparison here. + if ( "pom".equals( type ) ) { p = p.getParent(); + + // this automatically negates the pomFileOverride, if it exists. + pomFileOverride = null; } while( p != null ) @@ -349,7 +372,20 @@ setAlignment( artifact, groupVersionAlignments ); - File sourceFile = new File( localRepository.getBasedir(), localRepository.pathOf( artifact ) ); + File sourceFile; + + // if we have an override for the current POM, use it. + if ( pomFileOverride != null ) + { + sourceFile = pomFileOverride; + + // use it at most once. + pomFileOverride = null; + } + else + { + sourceFile = new File( localRepository.getBasedir(), localRepository.pathOf( artifact ) ); + } if ( !sourceFile.exists() ) { @@ -485,11 +521,14 @@ { Map groupVersionAlignments = new HashMap(); - for ( Iterator i = versionAlignments.iterator(); i.hasNext(); ) + if ( versionAlignments != null ) { - GroupVersionAlignment alignment = (GroupVersionAlignment) i.next(); + for ( Iterator i = versionAlignments.iterator(); i.hasNext(); ) + { + GroupVersionAlignment alignment = (GroupVersionAlignment) i.next(); - groupVersionAlignments.put( alignment.getId(), alignment ); + groupVersionAlignments.put( alignment.getId(), alignment ); + } } return groupVersionAlignments; Modified: maven/shared/trunk/maven-repository-builder/src/main/java/org/apache/maven/shared/repository/model/DefaultRepositoryInfo.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-repository-builder/src/main/java/org/apache/maven/shared/repository/model/DefaultRepositoryInfo.java?view=diff&rev=553960&r1=553959&r2=553960 ============================================================================== --- maven/shared/trunk/maven-repository-builder/src/main/java/org/apache/maven/shared/repository/model/DefaultRepositoryInfo.java (original) +++ maven/shared/trunk/maven-repository-builder/src/main/java/org/apache/maven/shared/repository/model/DefaultRepositoryInfo.java Fri Jul 6 10:10:55 2007 @@ -18,6 +18,8 @@ */ package org.apache.maven.shared.repository.model; +import org.apache.maven.artifact.Artifact; + import java.util.List; public class DefaultRepositoryInfo @@ -26,7 +28,7 @@ private boolean includeMetadata; - private String scope; + private String scope = Artifact.SCOPE_COMPILE; private List includes; Modified: maven/shared/trunk/maven-repository-builder/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-repository-builder/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java?view=diff&rev=553960&r1=553959&r2=553960 ============================================================================== --- maven/shared/trunk/maven-repository-builder/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java (original) +++ maven/shared/trunk/maven-repository-builder/src/test/java/org/apache/maven/shared/repository/DefaultRepositoryBuilderTest.java Fri Jul 6 10:10:55 2007 @@ -1,5 +1,6 @@ package org.apache.maven.shared.repository; +import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.metadata.ArtifactMetadataSource; import org.apache.maven.artifact.repository.ArtifactRepository; @@ -14,15 +15,14 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectBuilder; import org.apache.maven.project.ProjectBuildingException; +import org.apache.maven.project.artifact.InvalidDependencyVersionException; import org.apache.maven.shared.repository.model.DefaultRepositoryInfo; import org.codehaus.plexus.PlexusTestCase; -import org.codehaus.plexus.logging.Logger; -import org.codehaus.plexus.logging.console.ConsoleLogger; import java.io.File; import java.io.IOException; import java.net.URL; -import java.util.ArrayList; +import java.util.Collections; public class DefaultRepositoryBuilderTest extends PlexusTestCase @@ -51,41 +51,43 @@ projectBuilder = (MavenProjectBuilder) lookup( MavenProjectBuilder.class.getName() ); - File localRepo = new File( getBasedir(), "target/local-repository" ); - defaultLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.class.getName(), "default" ); repoFactory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.class.getName() ); artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.class.getName() ); artifactResolver = (ArtifactResolver) lookup( ArtifactResolver.class.getName() ); metadataSource = (ArtifactMetadataSource) lookup( ArtifactMetadataSource.class.getName() ); + File localRepo = new File( getBasedir(), "target/local-repository" ); + localRepository = repoFactory.createArtifactRepository( "local", localRepo.getAbsolutePath(), defaultLayout, null, null ); } - private MavenProject getProject( String projectResource ) - throws ProjectBuildingException, IOException + private MavenProject getProject( String projectResource, String parentGroupId, String parentArtifactId, String parentVersion ) + throws ProjectBuildingException, IOException, InvalidDependencyVersionException { ClassLoader cloader = Thread.currentThread().getContextClassLoader(); - URL res = cloader.getResource( projectResource ); + URL res = cloader.getResource( "projects/" + projectResource ); File projectFile = new File( res.getPath() ); - return projectBuilder.build( projectFile, localRepository, getProfileManager() ); + // pre-load the parent model...this is a hack! + Artifact parentArtifact = artifactFactory.createParentArtifact( parentGroupId, parentArtifactId, parentVersion ); + projectBuilder.buildFromRepository( parentArtifact, Collections.EMPTY_LIST, localRepository ); + + MavenProject project = projectBuilder.build( projectFile, localRepository, getProfileManager() ); + + project.setDependencyArtifacts( project.createArtifacts( artifactFactory, null, null ) ); + + return project; } private ProfileManager getProfileManager() throws IOException { if ( profileManager == null ) { - ClassLoader cloader = Thread.currentThread().getContextClassLoader(); - URL res = cloader.getResource( "marker.txt" ); - - File markerFile = new File( res.getPath() ); - markerFile = markerFile.getCanonicalFile(); - - File repoDir = new File( markerFile.getParentFile(), "remote-repository" ); + File repoDir = getTestRemoteRepositoryBasedir(); Profile profile = new Profile(); Repository repo = new Repository(); @@ -95,6 +97,8 @@ repo.setReleases( new RepositoryPolicy() ); repo.setSnapshots( new RepositoryPolicy() ); + profile.addRepository( repo ); + profileManager = new DefaultProfileManager( getContainer() ); profileManager.addProfile( profile ); profileManager.explicitlyActivate( "test.repo" ); @@ -103,12 +107,32 @@ return profileManager; } + private File getTestRemoteRepositoryBasedir() + throws IOException + { + ClassLoader cloader = Thread.currentThread().getContextClassLoader(); + URL res = cloader.getResource( "marker.txt" ); + + File markerFile = new File( res.getPath() ); + markerFile = markerFile.getCanonicalFile(); + + File repoDir = new File( markerFile.getParentFile(), "remote-repository" ); + + return repoDir; + } + public void test_MASSEMBLY_210_projectParentIsIncludedInRepository() - throws ProjectBuildingException, RepositoryAssemblyException, IOException + throws ProjectBuildingException, RepositoryAssemblyException, IOException, InvalidDependencyVersionException { - MavenProject project = getProject( "projects/massembly-210-direct-parent/pom.xml" ); - // TODO: jdcasey, the project loaded that way as no initialized Artifact objects - // TODO: with this non resolved content the repository assembler does not run! + File repoDir = getTestRemoteRepositoryBasedir(); + + ArtifactRepository localRepository = repoFactory.createArtifactRepository( + "local", + repoDir.getAbsoluteFile().toURL().toExternalForm(), + defaultLayout, null, null ); + + + MavenProject project = getProject( "massembly-210-direct-parent/pom.xml", "massembly.210", "parent", "1.0-SNAPSHOT" ); TestRepositoryBuilderConfigSource cs = new TestRepositoryBuilderConfigSource(); cs.setProject( project ); @@ -117,14 +141,10 @@ DefaultRepositoryAssembler assembler = new DefaultRepositoryAssembler( artifactFactory, artifactResolver, defaultLayout, repoFactory, metadataSource, projectBuilder ); - // TODO: NPE thrown if logger not set - assembler.enableLogging( new ConsoleLogger( Logger.LEVEL_DEBUG, "console")); File repositoryDirectory = new File( getBasedir(), "target/test-repositories/massembly-210-direct-parent" ); DefaultRepositoryInfo repoInfo = new DefaultRepositoryInfo(); - // TODO: NPE if we don't call this - no clue what it's supposed to represent - repoInfo.setGroupVersionAlignments( new ArrayList()); assembler.buildRemoteRepository( repositoryDirectory, repoInfo, cs );