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 )