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 03:32:49 UTC

svn commit: r634129 - in /maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact: manager/DefaultWagonManager.java manager/WagonManager.java repository/metadata/DefaultRepositoryMetadataManager.java

Author: brett
Date: Wed Mar  5 18:32:48 2008
New Revision: 634129

URL: http://svn.apache.org/viewvc?rev=634129&view=rev
Log:
[MNG-3341] only look in the original deployment repository for metadata to update

Modified:
    maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
    maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonManager.java
    maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java

Modified: maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java?rev=634129&r1=634128&r2=634129&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java Wed Mar  5 18:32:48 2008
@@ -346,8 +346,8 @@
         else
         {
             getLogger().debug( "Trying repository " + repository.getId() );
-            getRemoteFile( repository, artifact.getFile(), remotePath, downloadMonitor, policy.getChecksumPolicy(),
-                           false );
+            getRemoteFile( getMirrorRepository( repository ), artifact.getFile(), remotePath, downloadMonitor,
+                                   policy.getChecksumPolicy(), false );
             getLogger().debug( "  Artifact resolved" );
 
             artifact.setResolved( true );
@@ -362,6 +362,15 @@
     {
         String remotePath = repository.pathOfRemoteRepositoryMetadata( metadata );
 
+        getRemoteFile( getMirrorRepository( repository ), destination, remotePath, null, checksumPolicy, true );
+    }
+
+    public void getArtifactMetadataFromDeploymentRepository( ArtifactMetadata metadata, ArtifactRepository repository,
+                                                             File destination, String checksumPolicy )
+        throws TransferFailedException, ResourceDoesNotExistException
+    {
+        String remotePath = repository.pathOfRemoteRepositoryMetadata( metadata );
+
         getRemoteFile( repository, destination, remotePath, null, checksumPolicy, true );
     }
 
@@ -377,14 +386,6 @@
 
         failIfNotOnline();
 
-        ArtifactRepository mirror = getMirror( repository.getId() );
-        if ( mirror != null )
-        {
-            repository = repositoryFactory.createArtifactRepository( mirror.getId(), mirror.getUrl(),
-                                                                     repository.getLayout(), repository.getSnapshots(),
-                                                                     repository.getReleases() );
-        }
-
         String protocol = repository.getProtocol();
         Wagon wagon;
         try
@@ -583,6 +584,18 @@
                 }
             }
         }
+    }
+
+    private ArtifactRepository getMirrorRepository( ArtifactRepository repository )
+    {
+        ArtifactRepository mirror = getMirror( repository.getId() );
+        if ( mirror != null )
+        {
+            repository = repositoryFactory.createArtifactRepository( mirror.getId(), mirror.getUrl(),
+                                                                     repository.getLayout(), repository.getSnapshots(),
+                                                                     repository.getReleases() );
+        }
+        return repository;
     }
 
     private void failIfNotOnline()

Modified: maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonManager.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonManager.java?rev=634129&r1=634128&r2=634129&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonManager.java (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/manager/WagonManager.java Wed Mar  5 18:32:48 2008
@@ -88,6 +88,10 @@
                               String checksumPolicy )
         throws TransferFailedException, ResourceDoesNotExistException;
 
+    void getArtifactMetadataFromDeploymentRepository( ArtifactMetadata metadata, ArtifactRepository remoteRepository,
+                                                      File file, String checksumPolicyWarn )
+        throws TransferFailedException, ResourceDoesNotExistException;
+
     void setOnline( boolean online );
 
     boolean isOnline();
@@ -120,4 +124,4 @@
     void registerWagons( Collection wagons, PlexusContainer extensionContainer );
 
     void setDefaultRepositoryPermissions( RepositoryPermissions permissions );
-}
\ No newline at end of file
+}

Modified: maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java?rev=634129&r1=634128&r2=634129&view=diff
==============================================================================
--- maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java (original)
+++ maven/components/branches/maven-2.0.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java Wed Mar  5 18:32:48 2008
@@ -86,33 +86,44 @@
                     boolean checkForUpdates =
                         policy.checkOutOfDate( new Date( file.lastModified() ) ) || !file.exists();
 
-                    boolean metadataIsEmpty = true;
-
                     if ( checkForUpdates )
                     {
-                        try
+                        if ( wagonManager.isOnline() )
                         {
-                            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().warn( metadata + " could not be retrieved from repository: " +
+                                    repository.getId() + " due to an error: " + e.getMessage() );
+                                getLogger().debug( "Exception", e );
+
+                                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.
                             }
-                            metadataIsEmpty = false;
                         }
-                        catch ( TransferFailedException e )
+                        else
                         {
-                            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.
-                            metadataIsEmpty = true;
+                            getLogger().debug( "System is offline. Cannot resolve metadata:\n" +
+                                metadata.extendedToString() + "\n\n" );
                         }
                     }
 
@@ -321,20 +332,7 @@
                 "System is offline. Cannot resolve required metadata:\n" + metadata.extendedToString() );
         }
 
-        File file = new File( localRepository.getBasedir(),
-                              localRepository.pathOfLocalRepositoryMetadata( metadata, remoteRepository ) );
-
-        try
-        {
-            resolveAlways( metadata, remoteRepository, file, ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN );
-        }
-        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.
-        }
+        File file = getArtifactMetadataFromDeploymentRepository( metadata, localRepository, remoteRepository );
 
         try
         {
@@ -350,17 +348,22 @@
         }
     }
 
-    private void resolveAlways( ArtifactMetadata metadata, ArtifactRepository repository, File file,
-                                String checksumPolicy )
-        throws TransferFailedException
+    private File getArtifactMetadataFromDeploymentRepository( ArtifactMetadata metadata,
+                                                              ArtifactRepository localRepository,
+                                                              ArtifactRepository remoteRepository )
     {
+        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() )
@@ -370,12 +373,16 @@
         }
         catch ( TransferFailedException e )
         {
-            getLogger().warn( metadata + " could not be retrieved from repository: " + repository.getId() +
+            getLogger().warn( metadata + " could not be retrieved from repository: " + remoteRepository.getId() +
                 " due to an error: " + e.getMessage() );
             getLogger().debug( "Exception", e );
 
-            throw 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.
         }
+        return file;
     }
 
     private boolean alreadyResolved( ArtifactMetadata metadata )
@@ -394,28 +401,17 @@
                 "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 ) );
-
-        if ( !wagonManager.isOnline() )
+        File file;
+        if ( metadata instanceof RepositoryMetadata )
         {
-            // metadata is required for deployment, can't be offline
-            throw new RepositoryMetadataDeploymentException(
-                "System is offline. Unable to get previous metadata to update:\n" + metadata.extendedToString() );
-        }
-
-        try
-        {
-            resolveAlways( metadata, deploymentRepository, file, ArtifactRepositoryPolicy.CHECKSUM_POLICY_WARN );
+            getLogger().info( "Retrieving previous metadata from " + deploymentRepository.getId() );
+            file = getArtifactMetadataFromDeploymentRepository( metadata, localRepository, deploymentRepository );
         }
-        catch ( TransferFailedException e )
+        else
         {
-            // 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.
+            // It's a POM - we don't need to retrieve it first
+            file = new File( localRepository.getBasedir(),
+                             localRepository.pathOfLocalRepositoryMetadata( metadata, deploymentRepository ) );
         }
 
         try