From: Brett Porter Date: Mon, 24 Jul 2006 13:22:32 +0000 (+0000) Subject: [MRM-125] separate the timestamp for the metadata and the artifacts to ensure both... X-Git-Tag: archiva-0.9-alpha-1~754 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=7e0bf5be8d282207c424ee1c48ad8d7bae6af724;p=archiva.git [MRM-125] separate the timestamp for the metadata and the artifacts to ensure both get resolved git-svn-id: https://svn.apache.org/repos/asf/maven/repository-manager/trunk@425044 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/maven-repository-discovery/src/main/java/org/apache/maven/repository/discovery/AbstractArtifactDiscoverer.java b/maven-repository-discovery/src/main/java/org/apache/maven/repository/discovery/AbstractArtifactDiscoverer.java index 5a328cb67..3faa8bd47 100644 --- a/maven-repository-discovery/src/main/java/org/apache/maven/repository/discovery/AbstractArtifactDiscoverer.java +++ b/maven-repository-discovery/src/main/java/org/apache/maven/repository/discovery/AbstractArtifactDiscoverer.java @@ -18,13 +18,16 @@ package org.apache.maven.repository.discovery; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.repository.ArtifactRepository; +import org.codehaus.plexus.util.xml.Xpp3Dom; import java.io.File; import java.io.IOException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; +import java.util.Locale; /** * Base class for artifact discoverers. @@ -58,7 +61,8 @@ public abstract class AbstractArtifactDiscoverer throw new UnsupportedOperationException( "Only filesystem repositories are supported" ); } - long comparisonTimestamp = readComparisonTimestamp( repository, operation ); + Xpp3Dom dom = getLastArtifactDiscoveryDom( readRepositoryMetadataDom( repository ) ); + long comparisonTimestamp = readComparisonTimestamp( repository, operation, dom ); // Note that last checked time is deliberately set to the start of the process so that anything added // mid-discovery and missed by the scanner will get checked next time. @@ -126,4 +130,20 @@ public abstract class AbstractArtifactDiscoverer return artifact; } + + public void setLastCheckedTime( ArtifactRepository repository, String operation, Date date ) + throws IOException + { + // see notes in resetLastCheckedTime + + File file = new File( repository.getBasedir(), "maven-metadata.xml" ); + + Xpp3Dom dom = readDom( file ); + + String dateString = new SimpleDateFormat( DATE_FMT, Locale.US ).format( date ); + + setEntry( getLastArtifactDiscoveryDom( dom ), operation, dateString ); + + saveDom( file, dom ); + } } diff --git a/maven-repository-discovery/src/main/java/org/apache/maven/repository/discovery/AbstractDiscoverer.java b/maven-repository-discovery/src/main/java/org/apache/maven/repository/discovery/AbstractDiscoverer.java index 31754d2a9..88a85229f 100644 --- a/maven-repository-discovery/src/main/java/org/apache/maven/repository/discovery/AbstractDiscoverer.java +++ b/maven-repository-discovery/src/main/java/org/apache/maven/repository/discovery/AbstractDiscoverer.java @@ -37,7 +37,6 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; -import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Locale; @@ -142,11 +141,8 @@ public abstract class AbstractDiscoverer return excludedPaths.iterator(); } - protected long readComparisonTimestamp( ArtifactRepository repository, String operation ) + protected long readComparisonTimestamp( ArtifactRepository repository, String operation, Xpp3Dom dom ) { - File file = new File( repository.getBasedir(), "maven-metadata.xml" ); - Xpp3Dom dom = readDom( file ); - dom = getLastDiscoveryDom( dom ); Xpp3Dom entry = dom.getChild( operation ); long comparisonTimestamp = 0; if ( entry != null ) @@ -194,13 +190,24 @@ public abstract class AbstractDiscoverer return dom; } - protected Xpp3Dom getLastDiscoveryDom( Xpp3Dom dom ) + protected Xpp3Dom getLastArtifactDiscoveryDom( Xpp3Dom dom ) + { + Xpp3Dom lastDiscoveryDom = dom.getChild( "lastArtifactDiscovery" ); + if ( lastDiscoveryDom == null ) + { + dom.addChild( new Xpp3Dom( "lastArtifactDiscovery" ) ); + lastDiscoveryDom = dom.getChild( "lastArtifactDiscovery" ); + } + return lastDiscoveryDom; + } + + protected Xpp3Dom getLastMetadataDiscoveryDom( Xpp3Dom dom ) { - Xpp3Dom lastDiscoveryDom = dom.getChild( "lastDiscovery" ); + Xpp3Dom lastDiscoveryDom = dom.getChild( "lastMetadataDiscovery" ); if ( lastDiscoveryDom == null ) { - dom.addChild( new Xpp3Dom( "lastDiscovery" ) ); - lastDiscoveryDom = dom.getChild( "lastDiscovery" ); + dom.addChild( new Xpp3Dom( "lastMetadataDiscovery" ) ); + lastDiscoveryDom = dom.getChild( "lastMetadataDiscovery" ); } return lastDiscoveryDom; } @@ -218,8 +225,26 @@ public abstract class AbstractDiscoverer Xpp3Dom dom = readDom( file ); - Xpp3Dom lastDiscoveryDom = getLastDiscoveryDom( dom ); + boolean changed = false; + if ( removeEntry( getLastArtifactDiscoveryDom( dom ), operation ) ) + { + changed = true; + } + + if ( removeEntry( getLastMetadataDiscoveryDom( dom ), operation ) ) + { + changed = true; + } + + if ( changed ) + { + saveDom( file, dom ); + } + } + + private boolean removeEntry( Xpp3Dom lastDiscoveryDom, String operation ) + { boolean changed = false; // do this in reverse so that removing doesn't affect counter @@ -232,14 +257,10 @@ public abstract class AbstractDiscoverer lastDiscoveryDom.removeChild( i ); } } - - if ( changed ) - { - saveDom( file, dom ); - } + return changed; } - private void saveDom( File file, Xpp3Dom dom ) + protected void saveDom( File file, Xpp3Dom dom ) throws IOException { FileWriter writer = new FileWriter( file ); @@ -255,25 +276,19 @@ public abstract class AbstractDiscoverer } } - public void setLastCheckedTime( ArtifactRepository repository, String operation, Date date ) - throws IOException + protected void setEntry( Xpp3Dom lastDiscoveryDom, String operation, String dateString ) { - // see notes in resetLastCheckedTime - - File file = new File( repository.getBasedir(), "maven-metadata.xml" ); - - Xpp3Dom dom = readDom( file ); - - Xpp3Dom lastDiscoveryDom = getLastDiscoveryDom( dom ); - Xpp3Dom entry = lastDiscoveryDom.getChild( operation ); if ( entry == null ) { entry = new Xpp3Dom( operation ); lastDiscoveryDom.addChild( entry ); } - entry.setValue( new SimpleDateFormat( DATE_FMT, Locale.US ).format( date ) ); + entry.setValue( dateString ); + } - saveDom( file, dom ); + protected Xpp3Dom readRepositoryMetadataDom( ArtifactRepository repository ) + { + return readDom( new File( repository.getBasedir(), "maven-metadata.xml" ) ); } } diff --git a/maven-repository-discovery/src/main/java/org/apache/maven/repository/discovery/DefaultMetadataDiscoverer.java b/maven-repository-discovery/src/main/java/org/apache/maven/repository/discovery/DefaultMetadataDiscoverer.java index 54f8970a4..4d1cb3fae 100644 --- a/maven-repository-discovery/src/main/java/org/apache/maven/repository/discovery/DefaultMetadataDiscoverer.java +++ b/maven-repository-discovery/src/main/java/org/apache/maven/repository/discovery/DefaultMetadataDiscoverer.java @@ -25,6 +25,7 @@ import org.apache.maven.artifact.repository.metadata.RepositoryMetadata; import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata; import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader; import org.codehaus.plexus.util.StringUtils; +import org.codehaus.plexus.util.xml.Xpp3Dom; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import java.io.File; @@ -34,11 +35,13 @@ import java.io.InputStreamReader; import java.io.Reader; import java.net.MalformedURLException; import java.net.URL; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.StringTokenizer; /** @@ -63,7 +66,8 @@ public class DefaultMetadataDiscoverer throw new UnsupportedOperationException( "Only filesystem repositories are supported" ); } - long comparisonTimestamp = readComparisonTimestamp( repository, operation ); + Xpp3Dom dom = getLastMetadataDiscoveryDom( readRepositoryMetadataDom( repository ) ); + long comparisonTimestamp = readComparisonTimestamp( repository, operation, dom ); // Note that last checked time is deliberately set to the start of the process so that anything added // mid-discovery and missed by the scanner will get checked next time. @@ -226,4 +230,20 @@ public class DefaultMetadataDiscoverer return metadata; } + + public void setLastCheckedTime( ArtifactRepository repository, String operation, Date date ) + throws IOException + { + // see notes in resetLastCheckedTime + + File file = new File( repository.getBasedir(), "maven-metadata.xml" ); + + Xpp3Dom dom = readDom( file ); + + String dateString = new SimpleDateFormat( DATE_FMT, Locale.US ).format( date ); + + setEntry( getLastMetadataDiscoveryDom( dom ), operation, dateString ); + + saveDom( file, dom ); + } }