You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2008/03/10 18:33:58 UTC

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

Author: jdcasey
Date: Mon Mar 10 10:33:55 2008
New Revision: 635613

URL: http://svn.apache.org/viewvc?rev=635613&view=rev
Log:
[MNG-3415] Fixing metadata writing NOT to occur when offline or when TrasferFailedException happens...only when resource is not found (for updateInterval calculations) and when resolution succeeds. Integration tests to follow.

Modified:
    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/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=635613&r1=635612&r2=635613&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 Mon Mar 10 10:33:55 2008
@@ -82,19 +82,21 @@
                                           localRepository.pathOfLocalRepositoryMetadata( metadata, repository ) );
 
 
-
                     boolean checkForUpdates =
-                        policy.checkOutOfDate( new Date( file.lastModified() ) ) || !file.exists();
+                        !file.exists() || policy.checkOutOfDate( new Date( file.lastModified() ) );
 
                     if ( checkForUpdates )
                     {
                         if ( wagonManager.isOnline() )
                         {
                             getLogger().info( metadata.getKey() + ": checking for updates from " + repository.getId() );
+
+                            boolean storeMetadata = false;
                             try
                             {
                                 wagonManager.getArtifactMetadata( metadata, repository, file,
                                                                   policy.getChecksumPolicy() );
+                                storeMetadata = true;
                             }
                             catch ( ResourceDoesNotExistException e )
                             {
@@ -106,6 +108,7 @@
                                 {
                                     file.delete();
                                 }
+                                storeMetadata = true;
                             }
                             catch ( TransferFailedException e )
                             {
@@ -119,6 +122,30 @@
                                 // TODO: [jc; 08-Nov-2005] revisit this for 2.1
                                 // suppressing logging to avoid logging this error twice.
                             }
+                            if ( storeMetadata )
+                            {
+                                // touch file so that this is not checked again until interval has passed
+                                if ( file.exists() )
+                                {
+                                    file.setLastModified( System.currentTimeMillis() );
+                                }
+                                else
+                                {
+                                    // this ensures that files are not continuously checked when they don't exist remotely
+
+                                    // TODO: [jdcasey] If this happens as a result of ResourceDoesNotExistException, what effect will it have on subsequent runs?
+                                    // Will the updateInterval come into play cleanly, or will this plug up the works??
+                                    try
+                                    {
+                                        metadata.storeInLocalRepository( localRepository, repository );
+                                    }
+                                    catch ( RepositoryMetadataStoreException e )
+                                    {
+                                        throw new RepositoryMetadataResolutionException(
+                                            "Unable to store local copy of metadata: " + e.getMessage(), e );
+                                    }
+                                }
+                            }
                         }
                         else
                         {
@@ -126,28 +153,11 @@
                                 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
-                    if ( file.exists() )
-                    {
-                        file.setLastModified( System.currentTimeMillis() );
-                    }
-                    else
-                    {
-                        // this ensures that files are not continuously checked when they don't exist remotely
-                        try
-                        {
-                            metadata.storeInLocalRepository( localRepository, repository );
-                        }
-                        catch ( RepositoryMetadataStoreException e )
-                        {
-                            throw new RepositoryMetadataResolutionException(
-                                "Unable to store local copy of metadata: " + e.getMessage(), e );
-                        }
-                    }
                 }
             }
+
+            // TODO: [jdcasey] what happens here when the system is offline, or there is a TransferFailedException
+            // ...and no metadata file is written?
             cachedMetadata.add( metadata.getKey() );
         }
 
@@ -238,7 +248,7 @@
                 }
                 else
                 {
-                    if ( m.getVersioning() != null && m.getVersioning().getSnapshot() != null &&
+                    if ( ( m.getVersioning() != null ) && ( m.getVersioning().getSnapshot() != null ) &&
                         m.getVersioning().getSnapshot().isLocalCopy() )
                     {
                         m.getVersioning().getSnapshot().setLocalCopy( false );
@@ -265,7 +275,7 @@
         {
             Metadata metadata = readMetadata( metadataFile );
 
-            if ( repoMetadata.isSnapshot() && previousMetadata != null )
+            if ( repoMetadata.isSnapshot() && ( previousMetadata != null ) )
             {
                 previousMetadata.put( remoteRepository, metadata );
             }