Author: brett
Date: Tue Dec 12 20:13:15 2006
New Revision: 486484

URL: http://svn.apache.org/viewvc?view=rev&rev=486484
Log:
[MNG-1908] fix the performance problem with this particular fix

Modified:
    
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
    
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
    
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
    
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/AbstractVersionTransformation.java

Modified: 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java?view=diff&rev=486484&r1=486483&r2=486484
==============================================================================
--- 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
 (original)
+++ 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
 Tue Dec 12 20:13:15 2006
@@ -272,13 +272,13 @@
                 // This one we will eat when looking through remote 
repositories
                 // because we want to cycle through them all before squawking.
 
-                getLogger().warn(
-                    "Unable to get resource from repository " + 
repository.getId() + " (" + repository.getUrl() + ")" );
+                getLogger().warn( "Unable to get resource '" + 
artifact.getId() + "' from repository " +
+                    repository.getId() + " (" + repository.getUrl() + ")" );
             }
             catch ( TransferFailedException e )
             {
-                getLogger().warn(
-                    "Unable to get resource from repository " + 
repository.getId() + " (" + repository.getUrl() + ")" );
+                getLogger().warn( "Unable to get resource '" + 
artifact.getId() + "' from repository " +
+                    repository.getId() + " (" + repository.getUrl() + ")" );
             }
         }
 
@@ -324,7 +324,7 @@
     }
 
     private void getRemoteFile( ArtifactRepository repository, File 
destination, String remotePath,
-                                   TransferListener downloadMonitor, String 
checksumPolicy )
+                                TransferListener downloadMonitor, String 
checksumPolicy )
         throws TransferFailedException, ResourceDoesNotExistException
     {
         // TODO: better excetpions - transfer failed is not enough?
@@ -398,7 +398,21 @@
                 // This should take care of creating destination directory now 
on
                 if ( destination.exists() )
                 {
-                    downloaded = wagon.getIfNewer( remotePath, temp, 
destination.lastModified() );
+                    try
+                    {
+                        downloaded = wagon.getIfNewer( remotePath, temp, 
destination.lastModified() );
+                        if ( !downloaded )
+                        {
+                            // prevent additional checks of this artifact 
until it expires again
+                            destination.setLastModified( 
System.currentTimeMillis() );
+                        }
+                    }
+                    catch ( UnsupportedOperationException e )
+                    {
+                        // older wagons throw this. Just get() instead
+                        wagon.get( remotePath, temp );
+                        downloaded = true;
+                    }
                 }
                 else
                 {

Modified: 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java?view=diff&rev=486484&r1=486483&r2=486484
==============================================================================
--- 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
 (original)
+++ 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
 Tue Dec 12 20:13:15 2006
@@ -100,6 +100,7 @@
                         }
                     }
 
+                    // TODO: should this be inside the above check?
                     // touch file so that this is not checked again until 
interval has passed
                     if ( file.exists() )
                     {

Modified: 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java?view=diff&rev=486484&r1=486483&r2=486484
==============================================================================
--- 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
 (original)
+++ 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
 Tue Dec 12 20:13:15 2006
@@ -20,8 +20,13 @@
 import org.apache.maven.artifact.factory.ArtifactFactory;
 import org.apache.maven.artifact.manager.WagonManager;
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
+import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+import 
org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.repository.metadata.Versioning;
+import org.apache.maven.artifact.repository.metadata.Snapshot;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.artifact.transform.ArtifactTransformationManager;
 import org.apache.maven.wagon.ResourceDoesNotExistException;
@@ -105,12 +110,36 @@
 
                 transformationManager.transformForResolve( artifact, 
remoteRepositories, localRepository );
 
+                boolean localCopy = false;
+                for ( Iterator i = artifact.getMetadataList().iterator(); 
i.hasNext(); )
+                {
+                    ArtifactMetadata m = (ArtifactMetadata) i.next();
+                    if ( m instanceof SnapshotArtifactRepositoryMetadata )
+                    {
+                        SnapshotArtifactRepositoryMetadata snapshotMetadata = 
(SnapshotArtifactRepositoryMetadata) m;
+
+                        Metadata metadata = snapshotMetadata.getMetadata();
+                        if ( metadata != null )
+                        {
+                            Versioning versioning = metadata.getVersioning();
+                            if ( versioning != null )
+                            {
+                                Snapshot snapshot = versioning.getSnapshot();
+                                if ( snapshot != null )
+                                {
+                                    localCopy = snapshot.isLocalCopy();
+                                }
+                            }
+                        }
+                    }
+                }
+
                 File destination = artifact.getFile();
                 List repositories = remoteRepositories;
 
                 // TODO: would prefer the snapshot transformation took care of 
this. Maybe we need a "shouldresolve" flag.
                 if ( artifact.isSnapshot() && 
artifact.getBaseVersion().equals( artifact.getVersion() ) &&
-                    destination.exists() )
+                    destination.exists() && !localCopy )
                 {
                     Date comparisonDate = new Date( destination.lastModified() 
);
 

Modified: 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/AbstractVersionTransformation.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/AbstractVersionTransformation.java?view=diff&rev=486484&r1=486483&r2=486484
==============================================================================
--- 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/AbstractVersionTransformation.java
 (original)
+++ 
maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/transform/AbstractVersionTransformation.java
 Tue Dec 12 20:13:15 2006
@@ -61,6 +61,8 @@
 
         repositoryMetadataManager.resolve( metadata, remoteRepositories, 
localRepository );
 
+        artifact.addMetadata( metadata );
+
         Metadata repoMetadata = metadata.getMetadata();
         String version = null;
         if ( repoMetadata != null && repoMetadata.getVersioning() != null )


Reply via email to