You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2006/04/02 02:32:45 UTC

svn commit: r390765 - in /maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact: manager/DefaultWagonManager.java repository/metadata/DefaultRepositoryMetadataManager.java resolver/DefaultArtifactResolver.java

Author: brett
Date: Sat Apr  1 16:32:42 2006
New Revision: 390765

URL: http://svn.apache.org/viewcvs?rev=390765&view=rev
Log:
[MNG-1908] rollback the change on trunk since it degrades performance significantly at present

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

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java?rev=390765&r1=390764&r2=390765&view=diff
==============================================================================
--- 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 Sat Apr  1 16:32:42 2006
@@ -73,7 +73,7 @@
     private Map serverPermissionsMap = new HashMap();
 
     private Map mirrors = new HashMap();
-
+    
     private Map serverConfigurationMap = new HashMap();
 
     private TransferListener downloadMonitor;
@@ -128,14 +128,14 @@
         try
         {
             wagon = getWagon( protocol );
-
+            
             configureWagon( wagon, repository );
         }
         catch ( UnsupportedProtocolException e )
         {
             throw new TransferFailedException( "Unsupported Protocol: '" + protocol + "': " + e.getMessage(), e );
         }
-
+        
         if ( downloadMonitor != null )
         {
             wagon.addTransferListener( downloadMonitor );
@@ -255,8 +255,7 @@
             }
         }
 
-        // if it already exists locally we were just trying to force it - ignore the update
-        if ( !successful && !artifact.getFile().exists() )
+        if ( !successful )
         {
             throw new ResourceDoesNotExistException( "Unable to download the artifact from any repository" );
         }
@@ -350,8 +349,6 @@
         File temp = new File( destination + ".tmp" );
         temp.deleteOnExit();
 
-        boolean downloaded = false;
-
         try
         {
             wagon.connect( new Repository( repository.getId(), repository.getUrl() ),
@@ -369,38 +366,51 @@
                 retry = false;
 
                 // This should take care of creating destination directory now on
-                if ( destination.exists() )
+                wagon.get( remotePath, temp );
+
+                // keep the checksum files from showing up on the download monitor...
+                if ( downloadMonitor != null )
                 {
-                    downloaded = wagon.getIfNewer( remotePath, temp, destination.lastModified() );
+                    wagon.removeTransferListener( downloadMonitor );
                 }
-                else
+
+                // try to verify the SHA-1 checksum for this file.
+                try
                 {
-                    wagon.get( remotePath, temp );
-                    downloaded = true;
+                    verifyChecksum( sha1ChecksumObserver, destination, temp, remotePath, ".sha1", wagon );
                 }
-
-                if ( downloaded )
+                catch ( ChecksumFailedException e )
                 {
-                    // keep the checksum files from showing up on the download monitor...
-                    if ( downloadMonitor != null )
+                    // if we catch a ChecksumFailedException, it means the transfer/read succeeded, but the checksum
+                    // doesn't match. This could be a problem with the server (ibiblio HTTP-200 error page), so we'll
+                    // try this up to two times. On the second try, we'll handle it as a bona-fide error, based on the
+                    // repository's checksum checking policy.
+                    if ( firstRun )
+                    {
+                        getLogger().warn( "*** CHECKSUM FAILED - " + e.getMessage() + " - RETRYING" );
+                        retry = true;
+                    }
+                    else
                     {
-                        wagon.removeTransferListener( downloadMonitor );
+                        handleChecksumFailure( checksumPolicy, e.getMessage(), e.getCause() );
                     }
+                }
+                catch ( ResourceDoesNotExistException sha1TryException )
+                {
+                    getLogger().debug( "SHA1 not found, trying MD5", sha1TryException );
 
-                    // try to verify the SHA-1 checksum for this file.
+                    // if this IS NOT a ChecksumFailedException, it was a problem with transfer/read of the checksum
+                    // file...we'll try again with the MD5 checksum.
                     try
                     {
-                        verifyChecksum( sha1ChecksumObserver, destination, temp, remotePath, ".sha1", wagon );
+                        verifyChecksum( md5ChecksumObserver, destination, temp, remotePath, ".md5", wagon );
                     }
                     catch ( ChecksumFailedException e )
                     {
-                        // if we catch a ChecksumFailedException, it means the transfer/read succeeded, but the checksum
-                        // doesn't match. This could be a problem with the server (ibiblio HTTP-200 error page), so we'll
-                        // try this up to two times. On the second try, we'll handle it as a bona-fide error, based on the
-                        // repository's checksum checking policy.
+                        // if we also fail to verify based on the MD5 checksum, and the checksum transfer/read
+                        // succeeded, then we need to determine whether to retry or handle it as a failure.
                         if ( firstRun )
                         {
-                            getLogger().warn( "*** CHECKSUM FAILED - " + e.getMessage() + " - RETRYING" );
                             retry = true;
                         }
                         else
@@ -408,42 +418,18 @@
                             handleChecksumFailure( checksumPolicy, e.getMessage(), e.getCause() );
                         }
                     }
-                    catch ( ResourceDoesNotExistException sha1TryException )
+                    catch ( ResourceDoesNotExistException md5TryException )
                     {
-                        getLogger().debug( "SHA1 not found, trying MD5", sha1TryException );
-
-                        // if this IS NOT a ChecksumFailedException, it was a problem with transfer/read of the checksum
-                        // file...we'll try again with the MD5 checksum.
-                        try
-                        {
-                            verifyChecksum( md5ChecksumObserver, destination, temp, remotePath, ".md5", wagon );
-                        }
-                        catch ( ChecksumFailedException e )
-                        {
-                            // if we also fail to verify based on the MD5 checksum, and the checksum transfer/read
-                            // succeeded, then we need to determine whether to retry or handle it as a failure.
-                            if ( firstRun )
-                            {
-                                retry = true;
-                            }
-                            else
-                            {
-                                handleChecksumFailure( checksumPolicy, e.getMessage(), e.getCause() );
-                            }
-                        }
-                        catch ( ResourceDoesNotExistException md5TryException )
-                        {
-                            // this was a failed transfer, and we don't want to retry.
-                            handleChecksumFailure( checksumPolicy, "Error retrieving checksum file for " + remotePath,
-                                                   md5TryException );
-                        }
+                        // this was a failed transfer, and we don't want to retry.
+                        handleChecksumFailure( checksumPolicy, "Error retrieving checksum file for " + remotePath,
+                                               md5TryException );
                     }
+                }
 
-                    // reinstate the download monitor...
-                    if ( downloadMonitor != null )
-                    {
-                        wagon.addTransferListener( downloadMonitor );
-                    }
+                // reinstate the download monitor...
+                if ( downloadMonitor != null )
+                {
+                    wagon.addTransferListener( downloadMonitor );
                 }
 
                 // unset the firstRun flag, so we don't get caught in an infinite loop...
@@ -469,32 +455,29 @@
             releaseWagon( wagon );
         }
 
-        if ( downloaded )
+        if ( !temp.exists() )
         {
-            if ( !temp.exists() )
-            {
-                throw new ResourceDoesNotExistException( "Downloaded file does not exist: " + temp );
-            }
+            throw new ResourceDoesNotExistException( "Downloaded file does not exist: " + temp );
+        }
 
-            // The temporary file is named destination + ".tmp" and is done this way to ensure
-            // that the temporary file is in the same file system as the destination because the
-            // File.renameTo operation doesn't really work across file systems.
-            // So we will attempt to do a File.renameTo for efficiency and atomicity, if this fails
-            // then we will use a brute force copy and delete the temporary file.
+        // The temporary file is named destination + ".tmp" and is done this way to ensure
+        // that the temporary file is in the same file system as the destination because the
+        // File.renameTo operation doesn't really work across file systems.
+        // So we will attempt to do a File.renameTo for efficiency and atomicity, if this fails
+        // then we will use a brute force copy and delete the temporary file.
 
-            if ( !temp.renameTo( destination ) )
+        if ( !temp.renameTo( destination ) )
+        {
+            try
             {
-                try
-                {
-                    FileUtils.copyFile( temp, destination );
+                FileUtils.copyFile( temp, destination );
 
-                    temp.delete();
-                }
-                catch ( IOException e )
-                {
-                    throw new TransferFailedException(
-                        "Error copying temporary file to the final destination: " + e.getMessage(), e );
-                }
+                temp.delete();
+            }
+            catch ( IOException e )
+            {
+                throw new TransferFailedException(
+                    "Error copying temporary file to the final destination: " + e.getMessage(), e );
             }
         }
     }
@@ -523,8 +506,8 @@
         // otherwise it is ignore
     }
 
-    private void verifyChecksum( ChecksumObserver checksumObserver, File destination, File tempDestination,
-                                 String remotePath, String checksumFileExtension, Wagon wagon )
+    private void verifyChecksum( ChecksumObserver checksumObserver, File destination, File tempDestination, String remotePath,
+                                 String checksumFileExtension, Wagon wagon )
         throws ResourceDoesNotExistException, TransferFailedException, AuthorizationException
     {
         try
@@ -560,10 +543,7 @@
             if ( expectedChecksum.equals( actualChecksum ) )
             {
                 File checksumFile = new File( destination + checksumFileExtension );
-                if ( checksumFile.exists() )
-                {
-                    checksumFile.delete();
-                }
+                if ( checksumFile.exists() ) checksumFile.delete();
                 FileUtils.copyFile( tempChecksumFile, checksumFile );
             }
             else
@@ -620,13 +600,13 @@
     /**
      * Set the proxy used for a particular protocol.
      *
-     * @param protocol      the protocol (required)
-     * @param host          the proxy host name (required)
-     * @param port          the proxy port (required)
-     * @param username      the username for the proxy, or null if there is none
-     * @param password      the password for the proxy, or null if there is none
+     * @param protocol the protocol (required)
+     * @param host the proxy host name (required)
+     * @param port the proxy port (required)
+     * @param username the username for the proxy, or null if there is none
+     * @param password the password for the proxy, or null if there is none
      * @param nonProxyHosts the set of hosts not to use the proxy for. Follows Java system
-     *                      property format: <code>*.foo.com|localhost</code>.
+     * property format: <code>*.foo.com|localhost</code>.
      * @todo [BP] would be nice to configure this via plexus in some way
      */
     public void addProxy( String protocol, String host, int port, String username, String password,
@@ -718,12 +698,12 @@
     {
         this.interactive = interactive;
     }
-
+    
 
     /**
      * Applies the server configuration to the wagon
-     *
-     * @param wagon      the wagon to configure
+     * 
+     * @param wagon the wagon to configure
      * @param repository the repository that has the configuration
      * @throws WagonConfigurationException wraps any error given during configuration of the wagon instance
      */
@@ -744,9 +724,7 @@
             }
             catch ( final ComponentLookupException e )
             {
-                throw new WagonConfigurationException( repositoryId,
-                                                       "Unable to lookup wagon configurator. Wagon configuration cannot be applied.",
-                                                       e );
+                throw new WagonConfigurationException( repositoryId, "Unable to lookup wagon configurator. Wagon configuration cannot be applied.", e );
             }
             catch ( ComponentConfigurationException e )
             {
@@ -769,7 +747,7 @@
             }
         }
     }
-
+    
 
     public void addConfiguration( String repositoryId, Xpp3Dom configuration )
     {

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java?rev=390765&r1=390764&r2=390765&view=diff
==============================================================================
--- 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 Sat Apr  1 16:32:42 2006
@@ -78,11 +78,10 @@
                     File file = new File( localRepository.getBasedir(),
                                           localRepository.pathOfLocalRepositoryMetadata( metadata, repository ) );
 
-                    boolean checkForUpdates =
-                        policy.checkOutOfDate( new Date( file.lastModified() ) ) || !file.exists();
+                    boolean checkForUpdates = policy.checkOutOfDate( new Date( file.lastModified() ) ) || !file.exists();
 
                     boolean metadataIsEmpty = true;
-
+                    
                     if ( checkForUpdates )
                     {
                         getLogger().info( metadata.getKey() + ": checking for updates from " + repository.getId() );
@@ -202,8 +201,6 @@
 
                     if ( !m.getVersioning().getSnapshot().isLocalCopy() )
                     {
-                        // TODO: I think this is incorrect (it results in localCopy set in a remote profile). Probably
-                        //   harmless so not removing at this point until full tests in place.
                         m.getVersioning().getSnapshot().setLocalCopy( true );
                         metadata.setMetadata( m );
                         metadata.storeInLocalRepository( localRepository, repository );
@@ -375,7 +372,7 @@
             getLogger().info( "Repository '" + repository.getId() + "' will be blacklisted" );
             getLogger().debug( "Exception", e );
             repository.setBlacklisted( allowBlacklisting );
-
+            
             throw e;
         }
     }

Modified: maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java
URL: http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact-manager/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactResolver.java?rev=390765&r1=390764&r2=390765&view=diff
==============================================================================
--- 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 Sat Apr  1 16:32:42 2006
@@ -21,7 +21,6 @@
 import org.apache.maven.artifact.manager.WagonManager;
 import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
 import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
 import org.apache.maven.artifact.transform.ArtifactTransformationManager;
 import org.apache.maven.wagon.ResourceDoesNotExistException;
@@ -33,7 +32,6 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -106,32 +104,6 @@
                 transformationManager.transformForResolve( artifact, remoteRepositories, localRepository );
 
                 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() )
-                {
-                    Date comparisonDate = new Date( destination.lastModified() );
-
-                    // cull to list of repositories that would like an update
-                    repositories = new ArrayList( remoteRepositories );
-                    for ( Iterator i = repositories.iterator(); i.hasNext(); )
-                    {
-                        ArtifactRepository repository = (ArtifactRepository) i.next();
-                        ArtifactRepositoryPolicy policy = repository.getSnapshots();
-                        if ( !policy.isEnabled() || !policy.checkOutOfDate( comparisonDate ) )
-                        {
-                            i.remove();
-                        }
-                    }
-
-                    if ( !repositories.isEmpty() )
-                    {
-                        // someone wants to check for updates
-                        force = true;
-                    }
-                }
                 boolean resolved = false;
                 if ( !destination.exists() || force )
                 {
@@ -149,10 +121,10 @@
                         }
                         else
                         {
-                            wagonManager.getArtifact( artifact, repositories );
+                            wagonManager.getArtifact( artifact, remoteRepositories );
                         }
 
-                        if ( !artifact.isResolved() && !destination.exists() )
+                        if ( !artifact.isResolved() )
                         {
                             throw new ArtifactResolutionException(
                                 "Failed to resolve artifact, possibly due to a repository list that is not appropriately equipped for this artifact's metadata.",
@@ -266,7 +238,7 @@
                 missingArtifacts.add( node.getArtifact() );
             }
         }
-
+        
         if ( missingArtifacts.size() > 0 )
         {
             throw new MultipleArtifactsNotFoundException( originatingArtifact, missingArtifacts, remoteRepositories );
@@ -300,4 +272,4 @@
                                     remoteRepositories, source, null, listeners );
     }
 
-}
\ No newline at end of file
+}