From bb9a82825b3c2eb30d6736895759eda550b6eed6 Mon Sep 17 00:00:00 2001 From: Joakim Erdfelt <joakime@apache.org> Date: Thu, 11 Oct 2007 16:05:24 +0000 Subject: [PATCH] Correcting logic for determining if the local maven-metadata.xml needs to be updated. git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@583862 13f79535-47bb-0310-9956-ffa450edef68 --- .../DefaultRepositoryProxyConnectors.java | 60 ++++++++++++++----- 1 file changed, 45 insertions(+), 15 deletions(-) diff --git a/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java b/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java index 2f1cad9ae..4872427b2 100644 --- a/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java +++ b/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java @@ -170,7 +170,8 @@ public class DefaultRepositoryProxyConnectors 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 @@ public class DefaultRepositoryProxyConnectors 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 @@ public class DefaultRepositoryProxyConnectors 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 @@ public class DefaultRepositoryProxyConnectors 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 @@ public class DefaultRepositoryProxyConnectors 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 @@ public class DefaultRepositoryProxyConnectors transferChecksum( wagon, remoteRepository, remotePath, localFile, ".sha1" ); transferChecksum( wagon, remoteRepository, remotePath, localFile, ".md5" ); - } } catch ( ResourceDoesNotExistException e )