Is there a test that reproduces this problem? JIRA issue?

On 11/10/2007, at 6:05 PM, [EMAIL PROTECTED] wrote:

Author: joakime
Date: Thu Oct 11 09:05:24 2007
New Revision: 583862

URL: http://svn.apache.org/viewvc?rev=583862&view=rev
Log:
Correcting logic for determining if the local maven-metadata.xml needs to be updated.


Modified:
maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/ org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java

Modified: maven/archiva/trunk/archiva-base/archiva-proxy/src/main/ java/org/apache/maven/archiva/proxy/ DefaultRepositoryProxyConnectors.java URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/ archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/ DefaultRepositoryProxyConnectors.java? rev=583862&r1=583861&r2=583862&view=diff ====================================================================== ======== --- maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/ org/apache/maven/archiva/proxy/ DefaultRepositoryProxyConnectors.java (original) +++ maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/ org/apache/maven/archiva/proxy/ DefaultRepositoryProxyConnectors.java Thu Oct 11 09:05:24 2007
@@ -170,7 +170,8 @@
         File localFile = toLocalFile( repository, metadata );

         Properties requestProperties = new Properties();
-        boolean hasFetched = false;
+        boolean metadataNeedsUpdating = false;
+        long originalTimestamp = getLastModified( localFile );

List<ProxyConnector> connectors = getProxyConnectors ( repository );
         for ( ProxyConnector connector : connectors )
@@ -179,17 +180,21 @@
             String targetPath = metadataTools.toPath( metadata );

File localRepoFile = toLocalRepoFile( repository, targetRepository, targetPath ); - File downloadedFile = transferFile( connector, targetRepository, targetPath, localRepoFile,
-                                                requestProperties );
+ long originalMetadataTimestamp = getLastModified ( localRepoFile ); + transferFile( connector, targetRepository, targetPath, localRepoFile, requestProperties );

-            if ( fileExists( downloadedFile ) )
+ if ( hasBeenUpdated( localRepoFile, originalMetadataTimestamp ) )
             {
- getLogger().debug( "Successfully transfered: " + downloadedFile.getAbsolutePath() );
-                hasFetched = true;
+                metadataNeedsUpdating = true;
             }
         }

-        if ( hasFetched || fileExists( localFile ) )
+        if ( hasBeenUpdated( localFile, originalTimestamp ) )
+        {
+            metadataNeedsUpdating = true;
+        }
+
+        if ( metadataNeedsUpdating )
         {
             try
             {
@@ -228,6 +233,27 @@
         return null;
     }

+    private long getLastModified( File file )
+    {
+        if ( !file.exists() || !file.isFile() )
+        {
+            return 0;
+        }
+
+        return file.lastModified();
+    }
+
+ private boolean hasBeenUpdated( File file, long originalLastModified )
+    {
+        if ( !file.exists() || !file.isFile() )
+        {
+            return false;
+        }
+
+        long currentLastModified = getLastModified( file );
+        return ( currentLastModified > originalLastModified );
+    }
+
     /**
* Fetch from the proxies a metadata.xml file for the groupId:artifactId metadata contents.
      *
@@ -239,7 +265,8 @@
         File localFile = toLocalFile( repository, metadata );

         Properties requestProperties = new Properties();
-        boolean hasFetched = false;
+        boolean metadataNeedsUpdating = false;
+        long originalTimestamp = getLastModified( localFile );

List<ProxyConnector> connectors = getProxyConnectors ( repository );
         for ( ProxyConnector connector : connectors )
@@ -248,17 +275,21 @@
             String targetPath = metadataTools.toPath( metadata );

File localRepoFile = toLocalRepoFile( repository, targetRepository, targetPath ); - File downloadedFile = transferFile( connector, targetRepository, targetPath, localRepoFile,
-                                                requestProperties );
+ long originalMetadataTimestamp = getLastModified ( localRepoFile ); + transferFile( connector, targetRepository, targetPath, localRepoFile, requestProperties );

-            if ( fileExists( downloadedFile ) )
+ if ( hasBeenUpdated( localRepoFile, originalMetadataTimestamp ) )
             {
- getLogger().debug( "Successfully transfered: " + downloadedFile.getAbsolutePath() );
-                hasFetched = true;
+                metadataNeedsUpdating = true;
             }
         }

-        if ( hasFetched || fileExists( localFile ) )
+        if ( hasBeenUpdated( localFile, originalTimestamp ) )
+        {
+            metadataNeedsUpdating = true;
+        }
+
+        if ( metadataNeedsUpdating )
         {
             try
             {
@@ -428,7 +459,6 @@

transferChecksum( wagon, remoteRepository, remotePath, localFile, ".sha1" ); transferChecksum( wagon, remoteRepository, remotePath, localFile, ".md5" );
-
             }
         }
         catch ( ResourceDoesNotExistException e )


--
Brett Porter - [EMAIL PROTECTED]
Blog: http://www.devzuz.org/blogs/bporter/

Reply via email to