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 2008/03/06 05:53:57 UTC

svn commit: r634163 - /maven/artifact/trunk/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java

Author: brett
Date: Wed Mar  5 20:53:56 2008
New Revision: 634163

URL: http://svn.apache.org/viewvc?rev=634163&view=rev
Log:
[MNG-3341] only look in the original deployment repository for metadata to update
Merged from r634129 on the maven-2.0.x branch

Modified:
    maven/artifact/trunk/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java

Modified: maven/artifact/trunk/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java?rev=634163&r1=634162&r2=634163&view=diff
==============================================================================
--- maven/artifact/trunk/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java (original)
+++ maven/artifact/trunk/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java Wed Mar  5 20:53:56 2008
@@ -82,31 +82,48 @@
             File file = new File( localRepository.getBasedir(),
                 localRepository.pathOfLocalRepositoryMetadata( metadata, repository ) );
 
-            if ( updateCheckManager.isUpdateRequired( metadata, repository, file ) )
+            if ( wagonManager.isOnline() )
             {
-                try
+                if ( updateCheckManager.isUpdateRequired( metadata, repository, file ) )
                 {
-                    if ( wagonManager.isOnline() )
+                    getLogger().info( metadata.getKey() + ": checking for updates from " + repository.getId() );
+                    try
                     {
-                        getLogger().info(
-                            metadata.getKey() + ": checking for updates from " + repository.getId() );
-                        resolveAlways( metadata, repository, file, policy.getChecksumPolicy() );
+                        wagonManager.getArtifactMetadata( metadata, repository, file, policy.getChecksumPolicy() );
                     }
-                    else
+                    catch ( ResourceDoesNotExistException e )
                     {
-                        getLogger().debug( "System is offline. Cannot resolve metadata:\n" +
-                            metadata.extendedToString() + "\n\n" );
+                        getLogger().debug( metadata + " could not be found on repository: " + repository.getId() );
+
+                        // delete the local copy so the old details aren't used.
+                        if ( file.exists() )
+                        {
+                            file.delete();
+                        }
                     }
-                }
-                catch ( TransferFailedException e )
-                {
-                    getLogger().info( "Repository '" + repository.getId() + "' will be blacklisted" );
-                    repository.setBlacklisted( true );
+                    catch ( TransferFailedException e )
+                    {
+                        getLogger().warn( metadata + " could not be retrieved from repository: " + repository.getId() +
+                            " due to an error: " + e.getMessage() );
+                        getLogger().debug( "Exception", e );
 
-                    // TODO: [jc; 08-Nov-2005] revisit this for 2.1
-                    // suppressing logging to avoid logging this error twice.
+                        getLogger().info( "Repository '" + repository.getId() + "' will be blacklisted" );
+                        repository.setBlacklisted( true );
+
+                        // TODO: [jc; 08-Nov-2005] revisit this for 2.1
+                        // suppressing logging to avoid logging this error twice.
+                    }
+                    finally
+                    {
+                        updateCheckManager.touch( metadata, repository, file );
+                    }
                 }
             }
+            else
+            {
+                getLogger().debug(
+                    "System is offline. Cannot resolve metadata:\n" + metadata.extendedToString() + "\n\n" );
+            }
 
             // TODO: should this be inside the above check?
             // touch file so that this is not checked again until interval has passed
@@ -290,19 +307,15 @@
                 "System is offline. Cannot resolve required metadata:\n" + metadata.extendedToString() );
         }
 
-        File file = new File( localRepository.getBasedir(),
-            localRepository.pathOfLocalRepositoryMetadata( metadata, remoteRepository ) );
-
+        File file;
         try
         {
-            resolveAlways( metadata, remoteRepository, file, ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN );
+            file = getArtifactMetadataFromDeploymentRepository( metadata, localRepository, remoteRepository );
         }
         catch ( TransferFailedException e )
         {
-            // TODO: [jc; 08-Nov-2005] revisit this for 2.1
-            // suppressing logging to avoid logging this error twice.
-            // We don't want to interrupt program flow here. Just allow empty metadata instead.
-            // rethrowing this would change behavior.
+            throw new RepositoryMetadataResolutionException( metadata + " could not be retrieved from repository: " +
+                remoteRepository.getId() + " due to an error: " + e.getMessage(), e );
         }
 
         try
@@ -319,42 +332,38 @@
         }
     }
 
-    private void resolveAlways( ArtifactMetadata metadata,
-                                ArtifactRepository repository,
-                                File file,
-                                String checksumPolicy )
+    private File getArtifactMetadataFromDeploymentRepository( ArtifactMetadata metadata,
+                                                              ArtifactRepository localRepository,
+                                                              ArtifactRepository remoteRepository )
         throws TransferFailedException
     {
+        File file = new File( localRepository.getBasedir(),
+                              localRepository.pathOfLocalRepositoryMetadata( metadata, remoteRepository ) );
+
         try
         {
-            wagonManager.getArtifactMetadata( metadata, repository, file, checksumPolicy );
+            wagonManager.getArtifactMetadataFromDeploymentRepository( metadata, remoteRepository, file,
+                                                                      ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN );
         }
         catch ( ResourceDoesNotExistException e )
         {
-            getLogger().debug( metadata
-                               + " could not be found on repository: "
-                               + repository.getId() );
+            getLogger().info(
+                metadata + " could not be found on repository: " + remoteRepository.getId() + ", so will be created" );
 
+            // delete the local copy so the old details aren't used.
             if ( file.exists() )
             {
                 file.delete();
             }
         }
-        catch ( TransferFailedException e )
-        {
-            getLogger().warn(
-                metadata + " could not be retrieved from repository: " + repository.getId() + " due to an error: " + e.getMessage() );
-            getLogger().debug( "Exception", e );
-
-            throw e;
-        }
         finally
         {
             if ( metadata instanceof RepositoryMetadata )
             {
-                updateCheckManager.touch( (RepositoryMetadata) metadata, repository, file );
+                updateCheckManager.touch( (RepositoryMetadata) metadata, remoteRepository, file );
             }
         }
+        return file;
     }
 
     public void deploy( ArtifactMetadata metadata,
@@ -369,19 +378,26 @@
                 "System is offline. Cannot deploy metadata:\n" + metadata.extendedToString() );
         }
 
-        getLogger().info( "Retrieving previous metadata from " + deploymentRepository.getId() );
-
-        File file = new File( localRepository.getBasedir(),
-            localRepository.pathOfLocalRepositoryMetadata( metadata, deploymentRepository ) );
-
-        try
+        File file;
+        if ( metadata instanceof RepositoryMetadata )
         {
-            resolveAlways( metadata, deploymentRepository, file, ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN );
+            getLogger().info( "Retrieving previous metadata from " + deploymentRepository.getId() );
+            try
+            {
+                file = getArtifactMetadataFromDeploymentRepository( metadata, localRepository, deploymentRepository );
+            }
+            catch ( TransferFailedException e )
+            {
+                throw new RepositoryMetadataDeploymentException( metadata +
+                    " could not be retrieved from repository: " + deploymentRepository.getId() + " due to an error: " +
+                    e.getMessage(), e );
+            }
         }
-        catch ( TransferFailedException e )
+        else
         {
-            throw new RepositoryMetadataDeploymentException(
-                "Unable to get previous metadata to update: " + e.getMessage(), e );
+            // It's a POM - we don't need to retrieve it first
+            file = new File( localRepository.getBasedir(),
+                             localRepository.pathOfLocalRepositoryMetadata( metadata, deploymentRepository ) );
         }
 
         try