[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
This commit is contained in:
Brett Porter 2006-07-24 13:22:32 +00:00
parent a12af7203c
commit 7e0bf5be8d
3 changed files with 85 additions and 30 deletions

View File

@ -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 );
}
}

View File

@ -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( "lastDiscovery" );
Xpp3Dom lastDiscoveryDom = dom.getChild( "lastArtifactDiscovery" );
if ( lastDiscoveryDom == null )
{
dom.addChild( new Xpp3Dom( "lastDiscovery" ) );
lastDiscoveryDom = dom.getChild( "lastDiscovery" );
dom.addChild( new Xpp3Dom( "lastArtifactDiscovery" ) );
lastDiscoveryDom = dom.getChild( "lastArtifactDiscovery" );
}
return lastDiscoveryDom;
}
protected Xpp3Dom getLastMetadataDiscoveryDom( Xpp3Dom dom )
{
Xpp3Dom lastDiscoveryDom = dom.getChild( "lastMetadataDiscovery" );
if ( lastDiscoveryDom == null )
{
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" ) );
}
}

View File

@ -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 );
}
}