Author: bentmann
Date: Sun Dec  4 21:52:04 2011
New Revision: 1210240

URL: http://svn.apache.org/viewvc?rev=1210240&view=rev
Log:
o Revised fix from r1151426 which broke the appassembler-maven-plugin

Modified:
    
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/LegacyLocalRepositoryManager.java

Modified: 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/LegacyLocalRepositoryManager.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/LegacyLocalRepositoryManager.java?rev=1210240&r1=1210239&r2=1210240&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/LegacyLocalRepositoryManager.java
 (original)
+++ 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/artifact/repository/LegacyLocalRepositoryManager.java
 Sun Dec  4 21:52:04 2011
@@ -26,6 +26,7 @@ import java.util.List;
 import org.apache.maven.RepositoryUtils;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
 import 
org.apache.maven.artifact.repository.metadata.RepositoryMetadataStoreException;
 import org.apache.maven.repository.Proxy;
 import org.sonatype.aether.RepositorySystem;
@@ -58,6 +59,8 @@ public class LegacyLocalRepositoryManage
 
     private final LocalRepository repo;
 
+    private final boolean realLocalRepo;
+
     public static RepositorySystemSession overlay( ArtifactRepository 
repository, RepositorySystemSession session,
                                                    RepositorySystem system )
     {
@@ -103,6 +106,20 @@ public class LegacyLocalRepositoryManage
         repo =
             new LocalRepository( new File( delegate.getBasedir() ),
                                  ( layout != null ) ? 
layout.getClass().getSimpleName() : "legacy" );
+
+        /*
+         * NOTE: "invoker:install" vs "appassembler:assemble": Both mojos use 
the artifact installer to put an artifact
+         * into a repository. In the first case, the result needs to be a 
proper local repository that one can use for
+         * local artifact resolution. In the second case, the result needs to 
precisely obey the path information of the
+         * repository's layout to allow pointing at artifacts within the 
repository. Unfortunately,
+         * DefaultRepositoryLayout does not correctly describe the layout of a 
local repository which unlike a remote
+         * repository never uses timestamps in the filename of a snapshot 
artifact. The discrepancy gets notable when a
+         * remotely resolved snapshot artifact gets passed into pathOf(). So 
producing a proper local artifact path
+         * using DefaultRepositoryLayout requires us to enforce usage of the 
artifact's base version. This
+         * transformation however contradicts the other use case of precisely 
obeying the repository's layout. The below
+         * flag tries to detect which use case applies to make both plugins 
happy.
+         */
+        realLocalRepo = ( layout instanceof DefaultRepositoryLayout ) && 
"local".equals( delegate.getId() );
     }
 
     public LocalRepository getRepository()
@@ -112,7 +129,11 @@ public class LegacyLocalRepositoryManage
 
     public String getPathForLocalArtifact( Artifact artifact )
     {
-        return delegate.pathOf( RepositoryUtils.toArtifact( 
artifact.setVersion( artifact.getBaseVersion() ) ) );
+        if ( realLocalRepo )
+        {
+            return delegate.pathOf( RepositoryUtils.toArtifact( 
artifact.setVersion( artifact.getBaseVersion() ) ) );
+        }
+        return delegate.pathOf( RepositoryUtils.toArtifact( artifact ) );
     }
 
     public String getPathForRemoteArtifact( Artifact artifact, 
RemoteRepository repository, String context )


Reply via email to