Author: jdcasey
Date: Thu Feb 14 13:16:19 2008
New Revision: 627874

URL: http://svn.apache.org/viewvc?rev=627874&view=rev
Log:
[MASSEMBLY-282] Check for the case where an artifact to be added to the 
assembly points to the same file that the assembler is meant to create. This 
happens when appendAssemblyId == false and classifier == null, in cases where 
the assembly is meant to re-create the standard output artifact from a build, 
but that standard output artifact should be included in the assembly.

Patch submitted by: Paul Gier
NOTE: I modified the patch to copy the conflicting file to a temporary 
location, then include it from there, rather than skipping it.

Modified:
    maven/plugins/trunk/maven-assembly-plugin/pom.xml
    
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java
    
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java
    
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhaseTest.java
    
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhaseTest.java
    
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTaskTest.java
    
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java
    
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddArtifactTask.java
    
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java

Modified: maven/plugins/trunk/maven-assembly-plugin/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/pom.xml?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-assembly-plugin/pom.xml Thu Feb 14 13:16:19 2008
@@ -298,17 +298,17 @@
                   <debug>true</debug>
 
                  <!-- Useful config for debugging one IT -->
-                 <!--
                   <pomIncludes>
-                    
<pomInclude>**/dependency-sets/including*/pom.xml</pomInclude>
+                    
<pomInclude>mojo-configuration/no-appendAssemblyId-no-classifier/pom.xml</pomInclude>
                   </pomIncludes>
-                  <streamLogs>true</streamLogs>
-                 -->
                   <!-- END single-IT debugging block. -->
 
+                  <!--
                   <pomIncludes>
                     <pomInclude>**/pom.xml</pomInclude>
                   </pomIncludes>
+                  <streamLogs>true</streamLogs>
+                -->
                   <pomExcludes>
                     
<pomExclude>repositories/repo-with-snapshot-parents/pom.xml</pomExclude>
 

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/phase/RepositoryAssemblyPhase.java
 Thu Feb 14 13:16:19 2008
@@ -93,7 +93,11 @@
 
             resolveDependencies(repository, configSource);
 
-            File repositoryDirectory = new File( tempRoot, 
repository.getOutputDirectory() );
+            String outputDirectory =
+                AssemblyFormatUtils.getOutputDirectory( 
repository.getOutputDirectory(), configSource.getProject(),
+                                                        null, 
configSource.getFinalName() );
+
+            File repositoryDirectory = new File( tempRoot, outputDirectory );
 
             if ( !repositoryDirectory.exists() )
             {
@@ -110,10 +114,6 @@
             {
                 throw new ArchiveCreationException( "Failed to assemble 
repository: " + e.getMessage(), e );
             }
-
-            String outputDirectory =
-                AssemblyFormatUtils.getOutputDirectory( 
repository.getOutputDirectory(), configSource.getProject(),
-                                                        null, 
configSource.getFinalName() );
 
             AddDirectoryTask task = new AddDirectoryTask( repositoryDirectory 
);
 

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTask.java
 Thu Feb 14 13:16:19 2008
@@ -29,9 +29,11 @@
 import org.codehaus.plexus.archiver.Archiver;
 import org.codehaus.plexus.archiver.ArchiverException;
 import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.StringUtils;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -74,6 +76,29 @@
     public void execute( Archiver archiver, AssemblerConfigurationSource 
configSource )
         throws ArchiveCreationException, AssemblyFormattingException
     {
+        // MASSEMBLY-282: We should support adding a project's standard output 
file as part of an assembly that replaces it.
+        if ( ( ( artifact.getFile() != null )  &&  ( archiver.getDestFile() != 
null ) )
+                        && artifact.getFile().equals( archiver.getDestFile() ) 
)
+        {
+            File tempRoot = configSource.getTemporaryRootDirectory();
+            File tempArtifactFile = new File( tempRoot, 
artifact.getFile().getName() );
+
+            logger.warn( "Artifact: "
+                         + artifact.getId()
+                         + " references the same file as the assembly 
destination file. Moving it to a temporary location for inclusion." );
+            try
+            {
+                FileUtils.copyFile( artifact.getFile(), tempArtifactFile );
+            }
+            catch ( IOException e )
+            {
+                throw new ArchiveCreationException( "Error moving artifact 
file: '" + artifact.getFile() + "' to temporary location: " + tempArtifactFile 
+ ". Reason: "
+                                                    + e.getMessage(), e );
+            }
+
+            artifact.setFile( tempArtifactFile );
+        }
+
         String destDirectory = outputDirectory;
 
         destDirectory = AssemblyFormatUtils.getOutputDirectory( destDirectory, 
configSource.getProject(), project, configSource.getFinalName(), 
artifactExpressionPrefix );

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhaseTest.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhaseTest.java?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhaseTest.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/DependencySetAssemblyPhaseTest.java
 Thu Feb 14 13:16:19 2008
@@ -82,6 +82,7 @@
         macTask.expectCSGetRepositories( null, null );
         macTask.expectResolveDependencies( Collections.singleton( 
artifactMock.getArtifact() ) );
 
+        macTask.expectGetDestFile( new File( "junk" ) );
         macTask.expectAddFile( artifactFile, "out/dep", 10 );
 
         project.setArtifacts( Collections.singleton( 
artifactMock.getArtifact() ) );

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhaseTest.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhaseTest.java?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhaseTest.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/phase/ModuleSetAssemblyPhaseTest.java
 Thu Feb 14 13:16:19 2008
@@ -274,6 +274,7 @@
 
         macTask.expectGetReactorProjects( projects );
         macTask.expectGetFinalName( "final-name" );
+        macTask.expectGetDestFile( new File( "junk" ) );
 
         int mode = TypeConversionUtils.modeToInt( "777", new ConsoleLogger( 
Logger.LEVEL_DEBUG, "test" ) );
 
@@ -355,6 +356,7 @@
         File artifactFile = artifactMock.setNewFile();
 
         macTask.expectGetFinalName( "final-name" );
+        macTask.expectGetDestFile( new File( "junk" ) );
         macTask.expectAddFile( artifactFile, "out/artifact", 
TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, 
"test" ) ) );
 
         ModuleBinaries binaries = new ModuleBinaries();
@@ -433,6 +435,7 @@
         File artifactFile = artifactMock.setNewFile();
 
         macTask.expectGetFinalName( "final-name" );
+        macTask.expectGetDestFile( new File( "junk" ) );
         macTask.expectAddFile( artifactFile, "out/artifact", 
TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, 
"test" ) ) );
 
         ModuleBinaries binaries = new ModuleBinaries();
@@ -469,6 +472,7 @@
         File artifactFile = artifactMock.setNewFile();
 
         macTask.expectCSGetFinalName( "final-name" );
+        macTask.expectGetDestFile( new File( "junk" ) );
         macTask.expectAddFile( artifactFile, "out/artifact", 
TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, 
"test" ) ) );
 
         ModuleBinaries binaries = new ModuleBinaries();
@@ -527,6 +531,7 @@
         File moduleArtifactFile = moduleArtifactMock.setNewFile();
 
         macTask.expectCSGetFinalName( "final-name" );
+        macTask.expectGetDestFile( new File( "junk" ) );
 
         int mode = TypeConversionUtils.modeToInt( "777", new ConsoleLogger( 
Logger.LEVEL_DEBUG, "test" ) );
 
@@ -649,6 +654,7 @@
         project.setArtifact( artifactMock.getArtifact() );
 
         macTask.expectGetFinalName( "final-name" );
+        macTask.expectGetDestFile( new File( "junk" ) );
 
         macTask.expectAddFile( artifactFile, "out/artifact", 
TypeConversionUtils.modeToInt( "777", new ConsoleLogger( Logger.LEVEL_DEBUG, 
"test" ) ) );
 

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTaskTest.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTaskTest.java?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTaskTest.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddArtifactTaskTest.java
 Thu Feb 14 13:16:19 2008
@@ -73,6 +73,7 @@
         ArtifactMock artifactMock = new ArtifactMock( mockManager, "group", 
"artifact", "version", "jar", false );
         File artifactFile = artifactMock.setNewFile();
 
+        mac.expectGetDestFile( new File( "junk" ) );
         mac.expectAddFile( artifactFile, outputLocation );
 
         mockManager.replayAll();
@@ -97,6 +98,7 @@
         File file = mock.setNewFile();
         mock.setExtension( ext );
 
+        mac.expectGetDestFile( new File( "junk" ) );
         mac.expectAddFile( file, outputDir + artifactId + "-" + version + "." 
+ ext );
 
         mockManager.replayAll();
@@ -136,6 +138,7 @@
 
         String outputLocation = "";
 
+        mac.expectGetDestFile( new File( "junk" ) );
         try
         {
             mac.archiver.addArchivedFileSet( artifactFile, outputLocation, 
AddArtifactTask.DEFAULT_INCLUDES_ARRAY, null );
@@ -170,6 +173,7 @@
         ArtifactMock artifactMock = new ArtifactMock( mockManager, "group", 
"artifact", "version", "jar", false );
         File artifactFile = artifactMock.setNewFile();
 
+        mac.expectGetDestFile( new File( "junk" ) );
         try
         {
             mac.archiver.addArchivedFileSet( artifactFile, outputLocation, 
AddArtifactTask.DEFAULT_INCLUDES_ARRAY, null );
@@ -205,6 +209,7 @@
         ArtifactMock artifactMock = new ArtifactMock( mockManager, "group", 
"artifact", "version", "jar", false );
         File artifactFile = artifactMock.setNewFile();
 
+        mac.expectGetDestFile( new File( "junk" ) );
         mac.expectAddArchivedFileSet( artifactFile, outputLocation, includes, 
excludes );
 
         mockManager.replayAll();

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/AddDependencySetsTaskTest.java
 Thu Feb 14 13:16:19 2008
@@ -97,6 +97,7 @@
         macTask.expectCSGetRepositories( null, null );
         macTask.expectResolveDependencies( Collections.singleton( 
depArtifactMock.getArtifact() ) );
 
+        macTask.expectGetDestFile( new File( "junk" ) );
         macTask.expectAddFile( newFile, outDir + depAid + "-" + depVer + "." + 
depExt, 10 );
 
         mockManager.replayAll();
@@ -180,6 +181,7 @@
             macTask.expectAddFile( artifactFile, outputLocation + "/artifact", 
10 );
         }
 
+        macTask.expectGetDestFile( new File( "junk" ) );
         macTask.expectCSGetFinalName( "final-name" );
 
         MavenProject depProject = new MavenProject( new Model() );

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddArtifactTask.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddArtifactTask.java?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddArtifactTask.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddArtifactTask.java
 Thu Feb 14 13:16:19 2008
@@ -78,6 +78,12 @@
         configSourceCtl.setReturnValue( finalName, MockControl.ONE_OR_MORE );
     }
 
+    public void expectGetDestFile( File destFile )
+    {
+        archiver.getDestFile();
+        archiverCtl.setReturnValue( destFile, MockControl.ZERO_OR_MORE );
+    }
+
     public void expectAddArchivedFileSet( File artifactFile, String 
outputLocation, String[] includes, String[] excludes )
     {
         try

Modified: 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java
URL: 
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java?rev=627874&r1=627873&r2=627874&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java
 (original)
+++ 
maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/archive/task/testutils/MockAndControlForAddDependencySetsTask.java
 Thu Feb 14 13:16:19 2008
@@ -176,6 +176,12 @@
         configSourceCtl.setReturnValue( finalName, MockControl.ONE_OR_MORE );
     }
 
+    public void expectGetDestFile( File destFile )
+    {
+        archiver.getDestFile();
+        archiverCtl.setReturnValue( destFile, MockControl.ZERO_OR_MORE );
+    }
+
     public void expectCSGetRepositories( ArtifactRepository localRepo, List 
remoteRepos )
     {
         configSource.getLocalRepository();


Reply via email to