You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by og...@apache.org on 2008/10/14 03:46:47 UTC
svn commit: r704292 - in /maven/mercury/trunk:
mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/
mercury-it/
mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/
mercury-md/mercury-md-sat/ mercury-md/mercury-md-sa...
Author: ogusakov
Date: Mon Oct 13 18:46:46 2008
New Revision: 704292
URL: http://svn.apache.org/viewvc?rev=704292&view=rev
Log:
fs cache works, remote repository reader uses it
Added:
maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryCachingReaderM2Test.java
maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/MetadataCacheException.java
maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/Messages.properties (contents, props changed)
- copied, changed from r704227, maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/resources/org/apache/maven/mercury/repository/remote/m2/Messages.properties
Removed:
maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/VirtualRepositoryReader.java
maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/resources/org/apache/maven/mercury/repository/remote/m2/Messages.properties
Modified:
maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/VersionRange.java
maven/mercury/trunk/mercury-it/pom.xml
maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryReaderM2Test.java
maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryReaderM2Test.java
maven/mercury/trunk/mercury-md/mercury-md-sat/pom.xml
maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Messages.properties
maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RemoteRepository.java
maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAMetadata.java
maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAVMetadata.java
maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java
maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryUpdateIntervalPolicy.java
maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryUpdatePolicy.java
maven/mercury/trunk/mercury-repo/mercury-repo-api/src/test/java/org/apache/maven/mercury/repository/api/RepositoryUpdatePolicyIntervalTest.java
maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAMetadata.java
maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVMetadata.java
maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java
maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGATest.java
maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVTest.java
maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2.java
maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java
maven/mercury/trunk/mercury-repo/mercury-repo-virtual/pom.xml
maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java
maven/mercury/trunk/mercury-repo/pom.xml
Modified: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/VersionRange.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/VersionRange.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/VersionRange.java (original)
+++ maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/VersionRange.java Mon Oct 13 18:46:46 2008
@@ -1,5 +1,6 @@
package org.apache.maven.mercury.artifact.version;
+import java.util.Collection;
import java.util.List;
import org.apache.maven.mercury.artifact.Artifact;
@@ -186,7 +187,7 @@
* @param noSnapshots
* @return
*/
- public static final String findLatest( final List<String> versions, final boolean noSnapshots )
+ public static final String findLatest( final Collection<String> versions, final boolean noSnapshots )
{
DefaultArtifactVersion tempDav = null;
DefaultArtifactVersion tempDav2 = null;
Modified: maven/mercury/trunk/mercury-it/pom.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-it/pom.xml?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-it/pom.xml (original)
+++ maven/mercury/trunk/mercury-it/pom.xml Mon Oct 13 18:46:46 2008
@@ -175,6 +175,12 @@
<version>${project.version}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.maven.mercury</groupId>
+ <artifactId>mercury-repo-virtual</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
<dependency>
<groupId>org.apache.maven.mercury</groupId>
<artifactId>mercury-transport-http</artifactId>
Modified: maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryReaderM2Test.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryReaderM2Test.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryReaderM2Test.java (original)
+++ maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryReaderM2Test.java Mon Oct 13 18:46:46 2008
@@ -2,6 +2,7 @@
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import junit.framework.TestCase;
@@ -218,7 +219,15 @@
assertNotNull( ror );
if( ror.hasExceptions() )
- System.out.println( ror.getExceptions() );
+ {
+ Map<ArtifactBasicMetadata, Exception> exs = ror.getExceptions();
+
+ for( ArtifactBasicMetadata bmd : exs.keySet() )
+ {
+ System.out.println( "\n==========> "+bmd.toString());
+ exs.get( bmd ).printStackTrace();
+ }
+ }
assertFalse( ror.hasExceptions() );
assertTrue( ror.hasResults() );
Added: maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryCachingReaderM2Test.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryCachingReaderM2Test.java?rev=704292&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryCachingReaderM2Test.java (added)
+++ maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryCachingReaderM2Test.java Mon Oct 13 18:46:46 2008
@@ -0,0 +1,167 @@
+package org.apache.maven.mercury.repository.tests;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.builder.api.MetadataReaderException;
+import org.apache.maven.mercury.repository.api.RemoteRepository;
+import org.apache.maven.mercury.repository.api.RepositoryException;
+import org.apache.maven.mercury.repository.api.RepositoryMetadataCache;
+import org.apache.maven.mercury.repository.api.RepositoryUpdateIntervalPolicy;
+import org.apache.maven.mercury.repository.api.RepositoryUpdatePolicy;
+import org.apache.maven.mercury.repository.local.m2.MetadataProcessorMock;
+import org.apache.maven.mercury.repository.metadata.Metadata;
+import org.apache.maven.mercury.repository.metadata.io.xpp3.MetadataXpp3Reader;
+import org.apache.maven.mercury.repository.remote.m2.RemoteRepositoryM2;
+import org.apache.maven.mercury.repository.virtual.VirtualRepositoryReader;
+import org.apache.maven.mercury.spi.http.client.retrieve.DefaultRetrievalRequest;
+import org.apache.maven.mercury.spi.http.client.retrieve.DefaultRetriever;
+import org.apache.maven.mercury.spi.http.client.retrieve.RetrievalResponse;
+import org.apache.maven.mercury.spi.http.server.HttpTestServer;
+import org.apache.maven.mercury.transport.api.Binding;
+import org.apache.maven.mercury.transport.api.Server;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+public class RemoteRepositoryCachingReaderM2Test
+extends AbstractRepositoryReaderM2Test
+{
+ MetadataXpp3Reader _reader;
+ File _testBase = new File("./target/test-classes/repo");
+ DefaultRetriever _retriever;
+ public String _port;
+ HttpTestServer _server;
+ DefaultRetrievalRequest _request;
+
+ RepositoryMetadataCache _mdCache;
+ File _cacheBase;
+
+
+
+ //-------------------------------------------------------------------------
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ _retriever = new DefaultRetriever();
+ _server = new HttpTestServer( _testBase, "/repo" );
+ _server.start();
+ _port = String.valueOf( _server.getPort() );
+
+ _reader = new MetadataXpp3Reader();
+ _request = new DefaultRetrievalRequest();
+
+ mdProcessor = new MetadataProcessorMock();
+
+ query = new ArrayList<ArtifactBasicMetadata>();
+
+ server = new Server( "test", new URL("http://localhost:"+_port+"/repo") );
+
+ RepositoryUpdatePolicy up = new RepositoryUpdateIntervalPolicy( RepositoryUpdateIntervalPolicy.UPDATE_POLICY_DAILY );
+
+ repo = new RemoteRepositoryM2( "testRepo", server );
+ ((RemoteRepository)repo).setUpdatePolicy( up );
+
+
+ reader = repo.getReader( new MetadataProcessorMock() );
+
+ _cacheBase = new File( _testBase, VirtualRepositoryReader.METADATA_CACHE_DIR );
+ _cacheBase.delete();
+ _cacheBase.mkdirs();
+
+ _mdCache = VirtualRepositoryReader.getCache( _testBase );
+
+ reader.setMetadataCache( _mdCache );
+
+ }
+ //-------------------------------------------------------------------------
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ super.tearDown();
+ _server.stop();
+ _server.destroy();
+ }
+ //-------------------------------------------------------------------------
+ private void validateMmd( Metadata mmd )
+ {
+ assertNotNull( mmd );
+ assertEquals("a", mmd.getGroupId() );
+ assertEquals("a", mmd.getArtifactId() );
+
+ assertNotNull( mmd.getVersioning() );
+
+ List<String> versions = mmd.getVersioning().getVersions();
+
+ assertNotNull( versions );
+ assertTrue( versions.size() > 3 );
+ }
+ //-------------------------------------------------------------------------
+ public void testReadMd()
+ throws FileNotFoundException, IOException, XmlPullParserException
+ {
+ FileInputStream fis = new FileInputStream( new File( _testBase, "a/a/maven-metadata.xml") );
+ Metadata mmd = _reader.read( fis );
+ fis.close();
+ validateMmd( mmd );
+
+ File cachedMd = new File( _cacheBase, "a/a/"+"meta-ga-"+repo.getId()+".xml" );
+
+ assertTrue( cachedMd.exists() );
+ }
+ //-------------------------------------------------------------------------
+ public void testReadRemoteMdViaRepositoryReader()
+ throws FileNotFoundException, IOException, XmlPullParserException, RepositoryException, MetadataReaderException
+ {
+
+ byte [] mmBuf = reader.readRawData( "a/a/maven-metadata.xml" );
+
+ assertNotNull( mmBuf );
+ assertTrue( mmBuf.length > 1 );
+
+ ByteArrayInputStream bais = new ByteArrayInputStream( mmBuf );
+ Metadata mmd = _reader.read( bais );
+ bais.close();
+
+ validateMmd( mmd );
+
+ File cachedMd = new File( _cacheBase, "a/a/"+"meta-ga-"+repo.getId()+".xml" );
+
+ assertTrue( cachedMd.exists() );
+ }
+ //-------------------------------------------------------------------------
+ @Override
+ public void testReadLatest()
+ throws IllegalArgumentException,
+ RepositoryException
+ {
+ super.testReadLatest();
+
+ File cachedMd = new File( _cacheBase, "a/a/"+"meta-ga-"+repo.getId()+".xml" );
+
+ assertTrue( cachedMd.exists() );
+
+ File cachedVMd = new File( _cacheBase, "a/a/a-5-SNAPSHOT/"+"meta-gav-"+repo.getId()+".xml" );
+
+ assertTrue( cachedVMd.exists() );
+ }
+ //-------------------------------------------------------------------------
+ @Override
+ public void testReadRelease()
+ throws IllegalArgumentException,
+ RepositoryException
+ {
+ // TODO Auto-generated method stub
+ super.testReadRelease();
+ }
+ //-------------------------------------------------------------------------
+ //-------------------------------------------------------------------------
+}
Modified: maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryReaderM2Test.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryReaderM2Test.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryReaderM2Test.java (original)
+++ maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryReaderM2Test.java Mon Oct 13 18:46:46 2008
@@ -13,10 +13,12 @@
import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
import org.apache.maven.mercury.builder.api.MetadataReaderException;
import org.apache.maven.mercury.repository.api.RepositoryException;
+import org.apache.maven.mercury.repository.cache.fs.MetadataCacheFs;
import org.apache.maven.mercury.repository.local.m2.MetadataProcessorMock;
import org.apache.maven.mercury.repository.metadata.Metadata;
import org.apache.maven.mercury.repository.metadata.io.xpp3.MetadataXpp3Reader;
import org.apache.maven.mercury.repository.remote.m2.RemoteRepositoryM2;
+import org.apache.maven.mercury.repository.virtual.VirtualRepositoryReader;
import org.apache.maven.mercury.spi.http.client.retrieve.DefaultRetrievalRequest;
import org.apache.maven.mercury.spi.http.client.retrieve.DefaultRetriever;
import org.apache.maven.mercury.spi.http.client.retrieve.RetrievalResponse;
@@ -34,7 +36,6 @@
public String _port;
HttpTestServer _server;
DefaultRetrievalRequest _request;
-
// List<ArtifactBasicMetadata> query;
// MetadataProcessor mdProcessor;
Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/pom.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/pom.xml?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/pom.xml (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/pom.xml Mon Oct 13 18:46:46 2008
@@ -60,7 +60,7 @@
</dependency>
<dependency>
<groupId>org.apache.maven.mercury</groupId>
- <artifactId>mercury-repo-api</artifactId>
+ <artifactId>mercury-repo-virtual</artifactId>
<version>${project.version}</version>
</dependency>
<!-- test deps -->
Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java Mon Oct 13 18:46:46 2008
@@ -17,7 +17,7 @@
import org.apache.maven.mercury.repository.api.ArtifactBasicResults;
import org.apache.maven.mercury.repository.api.Repository;
import org.apache.maven.mercury.repository.api.RepositoryException;
-import org.apache.maven.mercury.repository.api.VirtualRepositoryReader;
+import org.apache.maven.mercury.repository.virtual.VirtualRepositoryReader;
import org.codehaus.plexus.lang.DefaultLanguage;
import org.codehaus.plexus.lang.Language;
@@ -78,7 +78,7 @@
if( processors != null )
_processors = processors;
- this._reader = new VirtualRepositoryReader( repositories, processor, null );
+ this._reader = new VirtualRepositoryReader( repositories, processor );
}
//------------------------------------------------------------------------
/**
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Messages.properties
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Messages.properties?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Messages.properties (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Messages.properties Mon Oct 13 18:46:46 2008
@@ -11,4 +11,4 @@
bad.policy=cannot parse repository update policy: {0}
bad.interval.policy=cannot parse interval repository update policy: {0}
-empty.mdbytes=cannot initialize metadata object from empty byte array
\ No newline at end of file
+empty.md=cannot initialize metadata object from null
\ No newline at end of file
Added: maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/MetadataCacheException.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/MetadataCacheException.java?rev=704292&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/MetadataCacheException.java (added)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/MetadataCacheException.java Mon Oct 13 18:46:46 2008
@@ -0,0 +1,54 @@
+package org.apache.maven.mercury.repository.api;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class MetadataCacheException
+extends Exception
+{
+
+ /**
+ *
+ */
+ public MetadataCacheException()
+ {
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param message
+ */
+ public MetadataCacheException(
+ String message )
+ {
+ super( message );
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param cause
+ */
+ public MetadataCacheException(
+ Throwable cause )
+ {
+ super( cause );
+ // TODO Auto-generated constructor stub
+ }
+
+ /**
+ * @param message
+ * @param cause
+ */
+ public MetadataCacheException(
+ String message,
+ Throwable cause )
+ {
+ super( message, cause );
+ // TODO Auto-generated constructor stub
+ }
+
+}
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RemoteRepository.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RemoteRepository.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RemoteRepository.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RemoteRepository.java Mon Oct 13 18:46:46 2008
@@ -31,4 +31,17 @@
* this is the Server with many useful fields to describe the home of this remote repo
*/
Server getServer();
+
+ /**
+ * get the update policy configured for this remote repository
+ *
+ * @return the policy or null, if it does not exist
+ */
+ RepositoryUpdatePolicy getUpdatePolicy();
+
+ /**
+ * set the update policy configured for this remote repository
+ *
+ */
+ void setUpdatePolicy( RepositoryUpdatePolicy updatePolicy );
}
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAMetadata.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAMetadata.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAMetadata.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAMetadata.java Mon Oct 13 18:46:46 2008
@@ -33,6 +33,9 @@
/** GMT timestamp of the last metadata check */
protected long lastCheck;
+
+ /** is set true by cache implementation when determined that it's time to refresh */
+ protected transient boolean expired = false;
protected RepositoryGAMetadata()
{
@@ -53,17 +56,16 @@
}
/**
- * @param versions
- * @param lastCheck
+ * construct from maven 2.x maven-metadata.xml object
+ *
+ * @param md
* @throws MetadataException
*/
- public RepositoryGAMetadata( byte [] mdBytes )
+ public RepositoryGAMetadata( Metadata md )
throws MetadataException
{
- if( Util.isEmpty( mdBytes ) )
- throw new IllegalArgumentException( _lang.getMessage( "empty.mdbytes" ) );
-
- Metadata md = MetadataBuilder.getMetadata( mdBytes );
+ if( md == null )
+ throw new IllegalArgumentException( _lang.getMessage( "empty.md" ) );
this.ga = new ArtifactCoordinates( md.getGroupId(), md.getArtifactId(), md.getVersion() );
@@ -74,10 +76,28 @@
vers = md.getVersioning().getVersions();
this.versions.addAll( vers );
}
-
this.lastCheck = TimeUtil.getUTCTimestampAsLong();
}
+
+ /**
+ * copy constructor
+ *
+ * @param md
+ * @throws MetadataException
+ */
+ public RepositoryGAMetadata( RepositoryGAMetadata md )
+ throws MetadataException
+ {
+ this.ga = md.getGA();
+
+ if( !Util.isEmpty( md.getVersions() ) )
+ {
+ this.versions.addAll( md.getVersions() );
+ }
+
+ this.lastCheck = TimeUtil.getUTCTimestampAsLong();
+ }
public TreeSet<String> getVersions()
{
@@ -100,4 +120,14 @@
return ga;
}
+ public boolean isExpired()
+ {
+ return expired;
+ }
+
+ public void setExpired( boolean expired )
+ {
+ this.expired = expired;
+ }
+
}
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAVMetadata.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAVMetadata.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAVMetadata.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryGAVMetadata.java Mon Oct 13 18:46:46 2008
@@ -37,6 +37,9 @@
/** GMT timestamp of the last metadata check */
protected long lastCheck;
+ /** is set true by cache implementation when determined that it's time to refresh */
+ protected transient boolean expired = false;
+
protected RepositoryGAVMetadata()
{
}
@@ -57,21 +60,19 @@
this.classifiers = classifiers;
this.lastCheck = TimeUtil.getUTCTimestampAsLong();
}
+
/**
- * initialization of md object from old metadata object bytes
+ * construct from maven 2.x maven-metadata.xml object
*
- * @param versions
- * @param lastCheck
+ * @param md
* @throws MetadataException
*/
- public RepositoryGAVMetadata( byte [] mdBytes )
+ public RepositoryGAVMetadata( Metadata md )
throws MetadataException
{
- if( Util.isEmpty( mdBytes ) )
+ if( md == null )
throw new IllegalArgumentException( _lang.getMessage( "empty.mdbytes" ) );
- Metadata md = MetadataBuilder.getMetadata( mdBytes );
-
this.gav = new ArtifactCoordinates( md.getGroupId(), md.getArtifactId(), md.getVersion() );
List<String> versions = null;
@@ -79,12 +80,29 @@
if( md.getVersioning() != null )
versions = md.getVersioning().getVersions();
- if( !Util.isEmpty( versions ) && md.getVersioning().getSnapshot() != null )
+ if( !Util.isEmpty( versions ) )
this.snapshots.addAll( versions );
this.lastCheck = TimeUtil.getUTCTimestampAsLong();
}
+ /**
+ * copy constructor
+ *
+ * @param md
+ * @throws MetadataException
+ */
+ public RepositoryGAVMetadata( RepositoryGAVMetadata md )
+ throws MetadataException
+ {
+ this.gav = md.getGAV();
+
+ if( ! Util.isEmpty( md.getSnapshots() ) )
+ this.snapshots.addAll( md.getSnapshots() );
+
+ this.lastCheck = TimeUtil.getUTCTimestampAsLong();
+ }
+
public TreeSet<String> getSnapshots()
{
return snapshots;
@@ -132,4 +150,14 @@
return gav;
}
+ public boolean isExpired()
+ {
+ return expired;
+ }
+
+ public void setExpired( boolean expired )
+ {
+ this.expired = expired;
+ }
+
}
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java Mon Oct 13 18:46:46 2008
@@ -1,6 +1,7 @@
package org.apache.maven.mercury.repository.api;
import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactCoordinates;
/**
* this object abstracts the existence of multiple repositories and repository
@@ -17,16 +18,66 @@
/**
* check if GA level metadata exists in this cache for the given repo. Read from repo, if does not exists
*
- * @param bmd - bare GA coordinates of the requisted metadata
- * @return
+ * @param repoGuid repository GUID
+ * @param up repository update policy
+ * @param coord bare GA coordinates of the requisted metadata
+ * @return metadata object or null, if data does not exist or has been expired
*/
- public RepositoryGAMetadata findGA( RemoteRepository repo, ArtifactBasicMetadata bmd );
+ public RepositoryGAMetadata findGA( String repoGuid, RepositoryUpdatePolicy up, ArtifactCoordinates coord )
+ throws MetadataCorruptionException;
/**
* check if GAV level metadata exists in this cache for the given repo. Read from repo, if does not exists
*
- * @param bmd - bare GAV coordinates of the requisted metadata
+ * @param repoGuid repository GUID
+ * @param up repository update policy
+ * @param coord bare GAV coordinates of the requisted metadata
* @return
*/
- public RepositoryGAMetadata findGAV( RemoteRepository repo, ArtifactBasicMetadata bmd );
+ public RepositoryGAVMetadata findGAV( String repoGuid, RepositoryUpdatePolicy up, ArtifactCoordinates coord )
+ throws MetadataCorruptionException;
+
+ /**
+ * update stored GA metadata with a fresh copy
+ *
+ * @param repoGuid
+ * @param gam
+ * @throws MetadataCacheException
+ */
+ public void updateGA( String repoGuid, RepositoryGAMetadata gam )
+ throws MetadataCacheException;
+
+ /**
+ * update stored GA metadata with a fresh copy
+ *
+ * @param repoGuid
+ * @param gavm fresh metadata
+ * @throws MetadataCacheException
+ */
+ public void updateGAV( String repoGuid, RepositoryGAVMetadata gavm )
+ throws MetadataCacheException;
+
+ /**
+ * find cached raw data. Raw data is different from metadata in a sense
+ * that it does not expire does not expire, so it's either found or not.
+ * This call is crafted for caching POMs and thus ignores classifier
+ *
+ * @param bmd
+ * @return found bytes or null, if no data was cached for this coordinates before
+ * @throws MetadataCacheException
+ */
+ public byte [] findRaw( ArtifactBasicMetadata bmd )
+ throws MetadataCacheException;
+
+ /**
+ * cache raw data. Raw data is different from metadata in a sense
+ * that it does not expire does not expire, so it's either found or not
+ * This call is crafted for caching POMs and thus ignores classifier
+ *
+ * @param bmd
+ * @param rawBytes - bytes to cache
+ * @throws MetadataCacheException
+ */
+ public void saveRaw( ArtifactBasicMetadata bmd, byte [] rawBytes )
+ throws MetadataCacheException;
}
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryUpdateIntervalPolicy.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryUpdateIntervalPolicy.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryUpdateIntervalPolicy.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryUpdateIntervalPolicy.java Mon Oct 13 18:46:46 2008
@@ -26,6 +26,8 @@
public static final String UPDATE_POLICY_INTERVAL = "interval";
private static final int UPDATE_POLICY_INTERVAL_LENGTH = UPDATE_POLICY_INTERVAL.length();
+ public static final String DEFAULT_UPDATE_POLICY = UPDATE_POLICY_DAILY;
+
private static final long NEVER = -1L;
private static final long DAYLY = 3600000L*24L;
@@ -65,7 +67,7 @@
throw new IllegalArgumentException( _lang.getMessage( "bad.policy", policy ));
}
- public boolean timeToUpdate( long lastUpdate )
+ public boolean timestampExpired( long lastUpdate )
{
long now =System.currentTimeMillis();
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryUpdatePolicy.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryUpdatePolicy.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryUpdatePolicy.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryUpdatePolicy.java Mon Oct 13 18:46:46 2008
@@ -19,8 +19,8 @@
/**
* perform the calculation and decide if it's time to update
*
- * @param lastUpdate
+ * @param timestamp - UTC-based timestamp
* @return
*/
- boolean timeToUpdate( long lastUpdate );
+ boolean timestampExpired( long timestamp );
}
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-api/src/test/java/org/apache/maven/mercury/repository/api/RepositoryUpdatePolicyIntervalTest.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-api/src/test/java/org/apache/maven/mercury/repository/api/RepositoryUpdatePolicyIntervalTest.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-api/src/test/java/org/apache/maven/mercury/repository/api/RepositoryUpdatePolicyIntervalTest.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-api/src/test/java/org/apache/maven/mercury/repository/api/RepositoryUpdatePolicyIntervalTest.java Mon Oct 13 18:46:46 2008
@@ -25,16 +25,16 @@
public void testInterval()
{
- assertFalse( in.timeToUpdate( now ) );
- assertTrue( in.timeToUpdate( now-80000L ) );
+ assertFalse( in.timestampExpired( now ) );
+ assertTrue( in.timestampExpired( now-80000L ) );
}
public void testDayly()
{
in = new RepositoryUpdateIntervalPolicy( RepositoryUpdateIntervalPolicy.UPDATE_POLICY_DAILY );
- assertFalse( in.timeToUpdate( now ) );
- assertFalse( in.timeToUpdate( now-80000L ) );
- assertTrue( in.timeToUpdate( now - 24L*3600L*1000L - 80000L ) );
+ assertFalse( in.timestampExpired( now ) );
+ assertFalse( in.timestampExpired( now-80000L ) );
+ assertTrue( in.timestampExpired( now - 24L*3600L*1000L - 80000L ) );
}
}
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAMetadata.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAMetadata.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAMetadata.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAMetadata.java Mon Oct 13 18:46:46 2008
@@ -8,6 +8,7 @@
import org.apache.maven.mercury.artifact.ArtifactCoordinates;
import org.apache.maven.mercury.repository.api.MetadataCorruptionException;
import org.apache.maven.mercury.repository.api.RepositoryGAMetadata;
+import org.apache.maven.mercury.repository.metadata.Metadata;
import org.apache.maven.mercury.repository.metadata.MetadataException;
import org.apache.maven.mercury.util.Util;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
@@ -38,10 +39,10 @@
fromXml();
}
- public CachedGAMetadata( byte [] mdBytes )
+ public CachedGAMetadata( RepositoryGAMetadata md )
throws MetadataException
{
- super( mdBytes );
+ super( md );
cm = new CachedMetadata();
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVMetadata.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVMetadata.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVMetadata.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVMetadata.java Mon Oct 13 18:46:46 2008
@@ -39,10 +39,10 @@
fromXml();
}
- public CachedGAVMetadata( byte [] mdBytes )
+ public CachedGAVMetadata( RepositoryGAVMetadata gavm )
throws MetadataException
{
- super( mdBytes );
+ super( gavm );
cm = new CachedMetadata();
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java Mon Oct 13 18:46:46 2008
@@ -1,6 +1,7 @@
package org.apache.maven.mercury.repository.cache.fs;
import java.io.File;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
@@ -8,14 +9,21 @@
import org.apache.maven.mercury.artifact.Artifact;
import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactCoordinates;
import org.apache.maven.mercury.artifact.Quality;
+import org.apache.maven.mercury.artifact.version.DefaultArtifactVersion;
+import org.apache.maven.mercury.repository.api.MetadataCacheException;
+import org.apache.maven.mercury.repository.api.MetadataCorruptionException;
import org.apache.maven.mercury.repository.api.RemoteRepository;
import org.apache.maven.mercury.repository.api.RepositoryGAMetadata;
import org.apache.maven.mercury.repository.api.RepositoryGAVMetadata;
import org.apache.maven.mercury.repository.api.RepositoryMetadataCache;
+import org.apache.maven.mercury.repository.api.RepositoryUpdatePolicy;
+import org.apache.maven.mercury.util.FileLockBundle;
import org.apache.maven.mercury.util.FileUtil;
import org.codehaus.plexus.lang.DefaultLanguage;
import org.codehaus.plexus.lang.Language;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
/**
*
@@ -65,28 +73,164 @@
}
/**
- *
+ * private as it should be obtained via a call to <code>getCache()</code>
*/
private MetadataCacheFs( File root )
{
this.root = root;
}
- public RepositoryGAMetadata findGA( RemoteRepository repo, ArtifactBasicMetadata bmd )
+ public RepositoryGAMetadata findGA( String repoGuid, RepositoryUpdatePolicy up, ArtifactCoordinates coord )
+ throws MetadataCorruptionException
{
- File gam = getGADir( bmd );
-
- return null;
+ try
+ {
+ File gaDir = getGADir(coord);
+
+ File gamF = getGAFile( gaDir, repoGuid );
+
+ CachedGAMetadata md = null;
+
+ if( gamF.exists() )
+ {
+ md = new CachedGAMetadata( gamF );
+
+ if( up != null && up.timestampExpired( md.getLastCheck() ) )
+ md.setExpired( true );
+ }
+
+ return md;
+ }
+ catch( Exception e )
+ {
+ throw new MetadataCorruptionException( e.getMessage() );
+ }
}
- public RepositoryGAMetadata findGAV( RemoteRepository repo, ArtifactBasicMetadata bmd )
+ public RepositoryGAVMetadata findGAV( String repoGuid, RepositoryUpdatePolicy up, ArtifactCoordinates coord )
+ throws MetadataCorruptionException
{
- return null;
+ FileLockBundle lock = null;
+ try
+ {
+ File gavDir = getGAVDir( coord );
+
+ lock = FileUtil.lockDir( gavDir.getCanonicalPath(), 500L, 5L );
+
+ File gavmF = getGAVFile( gavDir, repoGuid );
+
+ CachedGAVMetadata md = null;
+
+ if( gavmF.exists() )
+ {
+ md = new CachedGAVMetadata( gavmF );
+
+ if( up != null && up.timestampExpired( md.getLastCheck() ) )
+ md.setExpired( true );
+ }
+
+ return md;
+ }
+ catch( Exception e )
+ {
+ throw new MetadataCorruptionException( e.getMessage() );
+ }
+ finally
+ {
+ if( lock != null ) lock.release();
+ }
}
- private File getGADir( ArtifactBasicMetadata bmd )
+ public void updateGA( String repoGuid, RepositoryGAMetadata gam )
+ throws MetadataCacheException
+ {
+ FileLockBundle lock = null;
+ try
+ {
+ File gaDir = getGADir( gam.getGA() );
+
+ lock = FileUtil.lockDir( gaDir.getCanonicalPath(), 500L, 5L );
+
+ File gamF = getGAFile( gaDir, repoGuid );
+
+ CachedGAMetadata md = new CachedGAMetadata( gam );
+
+ md.cm.save( gamF );
+ }
+ catch( Exception e )
+ {
+ throw new MetadataCacheException( e.getMessage() );
+ }
+ finally
+ {
+ if( lock != null ) lock.release();
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.maven.mercury.repository.api.RepositoryMetadataCache#updateGAV(java.lang.String, org.apache.maven.mercury.repository.api.RepositoryGAVMetadata)
+ */
+ public void updateGAV( String repoGuid, RepositoryGAVMetadata gavm )
+ throws MetadataCacheException
{
- File dir = new File( root, bmd.getGroupId()+FileUtil.SEP+bmd.getArtifactId() );
+ try
+ {
+ File gavDir = getGAVDir( gavm.getGAV() );
+
+ File gavmF = getGAVFile( gavDir, repoGuid );
+
+ CachedGAVMetadata md = new CachedGAVMetadata( gavm );
+
+ md.cm.save( gavmF );
+ }
+ catch( Exception e )
+ {
+ throw new MetadataCacheException( e.getMessage() );
+ }
+ }
+
+ public byte[] findRaw( ArtifactBasicMetadata bmd )
+ throws MetadataCacheException
+ {
+ try
+ {
+ // locking is provided by underlying OS, don't waste the effort
+ File f = new File( getGAVDir( bmd.getEffectiveCoordinates() )
+ , bmd.getArtifactId()+FileUtil.DASH+bmd.getVersion()+"."+bmd.getType()
+ );
+
+ if( ! f.exists() )
+ return null;
+
+ return FileUtil.readRawData( f );
+ }
+ catch( IOException e )
+ {
+ throw new MetadataCacheException( e.getMessage() );
+ }
+ }
+
+ public void saveRaw( ArtifactBasicMetadata bmd, byte[] rawBytes )
+ throws MetadataCacheException
+ {
+ // locking is provided by underlying OS, don't waste the effort
+ try
+ {
+ File f = new File( getGAVDir( bmd.getEffectiveCoordinates() )
+ , bmd.getArtifactId()+FileUtil.DASH+bmd.getVersion()+"."+bmd.getType()
+ );
+
+ FileUtil.writeRawData( f, rawBytes );
+ }
+ catch( IOException e )
+ {
+ throw new MetadataCacheException( e.getMessage() );
+ }
+ }
+
+ private File getGADir( ArtifactCoordinates coord )
+ {
+ File dir = new File( root, coord.getGroupId()+FileUtil.SEP+coord.getArtifactId() );
if( ! dir.exists() )
dir.mkdirs();
@@ -94,23 +238,24 @@
return dir;
}
- private String getGAFileName( RemoteRepository repo )
+ private File getGAFile( File gaDir, String repoGuid )
{
- return "";
+ return new File( gaDir, "meta-ga-"+repoGuid+".xml" );
}
- private File getGAVDir( ArtifactBasicMetadata bmd )
+ private File getGAVDir( ArtifactCoordinates coord )
{
- String version = bmd.getVersion();
+ String version = coord.getVersion();
Quality q = new Quality( version );
if( q.compareTo( Quality.SNAPSHOT_TS_QUALITY ) == 0 )
{
- version = Artifact.SNAPSHOT_VERSION;
+ DefaultArtifactVersion dav = new DefaultArtifactVersion(version);
+ version = dav.getBase()+"-"+ Artifact.SNAPSHOT_VERSION;
}
- File dir = new File( getGADir( bmd ), bmd.getArtifactId()+FileUtil.DASH+version );
+ File dir = new File( getGADir( coord ), coord.getArtifactId()+FileUtil.DASH+version );
if( ! dir.exists() )
dir.mkdirs();
@@ -118,4 +263,9 @@
return dir;
}
+ private File getGAVFile( File gavDir, String repoGuid )
+ {
+ return new File( gavDir, "meta-gav-"+repoGuid+".xml" );
+ }
+
}
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGATest.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGATest.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGATest.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGATest.java Mon Oct 13 18:46:46 2008
@@ -41,7 +41,7 @@
omd = MetadataBuilder.getMetadata( mdBytes );
- gam = new CachedGAMetadata( mdBytes );
+ gam = new CachedGAMetadata( new RepositoryGAMetadata(omd) );
}
public void testData()
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVTest.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVTest.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVTest.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/test/java/org/apache/maven/mercury/repository/cache/fs/CachedGAVTest.java Mon Oct 13 18:46:46 2008
@@ -8,6 +8,7 @@
import org.apache.maven.mercury.artifact.ArtifactCoordinates;
import org.apache.maven.mercury.repository.api.RepositoryGAMetadata;
+import org.apache.maven.mercury.repository.api.RepositoryGAVMetadata;
import org.apache.maven.mercury.repository.metadata.Metadata;
import org.apache.maven.mercury.repository.metadata.MetadataBuilder;
import org.apache.maven.mercury.util.FileUtil;
@@ -41,7 +42,7 @@
omd = MetadataBuilder.getMetadata( mdBytes );
- gam = new CachedGAVMetadata( mdBytes );
+ gam = new CachedGAVMetadata( new RepositoryGAVMetadata(omd) );
}
public void testData()
Copied: maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/Messages.properties (from r704227, maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/resources/org/apache/maven/mercury/repository/remote/m2/Messages.properties)
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/Messages.properties?p2=maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/Messages.properties&p1=maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/resources/org/apache/maven/mercury/repository/remote/m2/Messages.properties&r1=704227&r2=704292&rev=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/resources/org/apache/maven/mercury/repository/remote/m2/Messages.properties (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/Messages.properties Mon Oct 13 18:46:46 2008
@@ -21,4 +21,7 @@
read.raw.exceptions=Ignoring exceptions reading {0}. Exceptions: {1}
null.artifact=artifact cannot be null
-bad.artifact.file=artifact {0} file {1} does not exist
\ No newline at end of file
+bad.artifact.file=artifact {0} file {1} does not exist
+
+cached.data.problem=problem {0} reading cached data for {1}. Moving on ..
+cached.metadata.reading.exception=problem {0} reading cached data for {1}, server {2}
\ No newline at end of file
Propchange: maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/Messages.properties
------------------------------------------------------------------------------
svn:mergeinfo =
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryM2.java Mon Oct 13 18:46:46 2008
@@ -7,6 +7,8 @@
import org.apache.maven.mercury.repository.api.RemoteRepository;
import org.apache.maven.mercury.repository.api.RepositoryException;
import org.apache.maven.mercury.repository.api.RepositoryReader;
+import org.apache.maven.mercury.repository.api.RepositoryUpdateIntervalPolicy;
+import org.apache.maven.mercury.repository.api.RepositoryUpdatePolicy;
import org.apache.maven.mercury.repository.api.RepositoryWriter;
import org.apache.maven.mercury.transport.api.Server;
@@ -16,6 +18,10 @@
implements RemoteRepository
{
private Server _server;
+
+ /** default update policy */
+ private RepositoryUpdatePolicy _updatePolicy = new RepositoryUpdateIntervalPolicy( RepositoryUpdateIntervalPolicy.DEFAULT_UPDATE_POLICY );
+
//----------------------------------------------------------------------------------
public RemoteRepositoryM2( String id, Server server )
{
@@ -68,6 +74,17 @@
return DEFAULT_REPOSITORY_TYPE;
}
//----------------------------------------------------------------------------------
+
+ public RepositoryUpdatePolicy getUpdatePolicy()
+ {
+ return _updatePolicy;
+ }
+
+ public void setUpdatePolicy( RepositoryUpdatePolicy updatePolicy )
+ {
+ this._updatePolicy = updatePolicy;
+ }
+
//----------------------------------------------------------------------------------
/* (non-Javadoc)
* @see org.apache.maven.mercury.repository.api.RemoteRepository#addLocalRepository(org.apache.maven.mercury.repository.api.LocalRepository)
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-remote-m2/src/main/java/org/apache/maven/mercury/repository/remote/m2/RemoteRepositoryReaderM2.java Mon Oct 13 18:46:46 2008
@@ -7,11 +7,13 @@
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import org.apache.maven.mercury.artifact.Artifact;
import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.artifact.ArtifactCoordinates;
import org.apache.maven.mercury.artifact.DefaultArtifact;
import org.apache.maven.mercury.artifact.Quality;
import org.apache.maven.mercury.artifact.version.DefaultArtifactVersion;
@@ -26,9 +28,13 @@
import org.apache.maven.mercury.repository.api.ArtifactBasicResults;
import org.apache.maven.mercury.repository.api.ArtifactResults;
import org.apache.maven.mercury.repository.api.LocalRepository;
+import org.apache.maven.mercury.repository.api.MetadataCacheException;
+import org.apache.maven.mercury.repository.api.MetadataCorruptionException;
import org.apache.maven.mercury.repository.api.RemoteRepository;
import org.apache.maven.mercury.repository.api.Repository;
import org.apache.maven.mercury.repository.api.RepositoryException;
+import org.apache.maven.mercury.repository.api.RepositoryGAMetadata;
+import org.apache.maven.mercury.repository.api.RepositoryGAVMetadata;
import org.apache.maven.mercury.repository.api.RepositoryReader;
import org.apache.maven.mercury.repository.local.m2.ArtifactLocation;
import org.apache.maven.mercury.repository.local.m2.LocalRepositoryM2;
@@ -42,6 +48,7 @@
import org.apache.maven.mercury.transport.api.Binding;
import org.apache.maven.mercury.transport.api.Server;
import org.apache.maven.mercury.util.FileUtil;
+import org.apache.maven.mercury.util.Util;
import org.codehaus.plexus.lang.DefaultLanguage;
import org.codehaus.plexus.lang.Language;
/**
@@ -138,20 +145,22 @@
return _repo;
}
//---------------------------------------------------------------------------------------------------------------
- private final ArtifactLocation calculateLocation( String root, ArtifactBasicMetadata bmd, AbstractRepOpResult res ) throws RepositoryException, MetadataReaderException, MetadataException
+ private final ArtifactLocation calculateLocation( String root, ArtifactBasicMetadata bmd, AbstractRepOpResult res )
+ throws RepositoryException, MetadataReaderException, MetadataException
{
ArtifactLocation loc = new ArtifactLocation( root, bmd );
+
+ Collection<String> versions = null;
+ try
+ {
+ versions = getCachedVersions( loc, bmd );
+ }
+ catch( MetadataCacheException e )
+ {
+ throw new MetadataException( e );
+ }
- byte [] mdBytes = readRawData( loc.getGaPath()+FileUtil.SEP+ _repo.getMetadataName() );
- if( mdBytes == null )
- throw new RepositoryException( _lang.getMessage( "no.group.md", _repo.getServer().getURL().toString(), loc.getGaPath() ) );
-
- Metadata groupMd = MetadataBuilder.read( new ByteArrayInputStream(mdBytes) );
- if( groupMd == null || groupMd.getVersioning() == null )
- throw new RepositoryException( _lang.getMessage( "group.md.no.versions", _repo.getServer().getURL().toString(), loc.getGaPath() ) );
-
- List<String> versions = groupMd.getVersioning().getVersions();
- if( versions == null || versions.size() < 1 )
+ if( Util.isEmpty( versions ) )
throw new RepositoryException( _lang.getMessage( "group.md.no.versions", _repo.getServer().getURL().toString(), loc.getGaPath() ) );
Quality vq = new Quality( loc.getVersion() );
@@ -199,32 +208,75 @@
return loc;
}
//---------------------------------------------------------------------------------------------------------------
- private boolean findLatestSnapshot( ArtifactBasicMetadata bmd, ArtifactLocation loc, AbstractRepOpResult res )
- throws MetadataReaderException, MetadataException, RemoteRepositoryM2OperationException
- {
- DefaultArtifactVersion dav = new DefaultArtifactVersion( loc.getVersion() );
+ private Collection<String> getCachedSnapshots( ArtifactBasicMetadata bmd, ArtifactLocation loc )
+ throws MetadataCacheException, RepositoryException, MetadataReaderException, MetadataException
+ {
+ RepositoryGAVMetadata gavm = null;
+ ArtifactCoordinates coord = null;
- String mdPath = loc.getGavPath()+'/'+_repo.getMetadataName();
+ if( _mdCache != null )
+ {
+ try
+ {
+ coord = bmd.getEffectiveCoordinates();
+ coord.setVersion( loc.getVersion() );
+ gavm = _mdCache.findGAV( _repo.getId(), _repo.getUpdatePolicy(), coord );
+ if( gavm != null )
+ return gavm.getSnapshots();
+ }
+ catch( MetadataCorruptionException e )
+ {
+ // bad cached data - let's overwrite it
+ _log.error( _lang.getMessage( "cached.data.problem", e.getMessage(), bmd.toString() ) );
+ }
+ }
+ String mdPath = loc.getGavPath()+'/'+_repo.getMetadataName();
+
byte [] mdBytes = readRawData( mdPath );
if( mdBytes == null )
{
- res.addError( bmd, new RepositoryException( _lang.getMessage( "no.gav.md", _repo.getServer().getURL().toString(), mdPath ) ) );
- return false;
+ throw new RepositoryException( _lang.getMessage( "no.gav.md", _repo.getServer().getURL().toString(), mdPath ) ) ;
}
-
+
Metadata gavMd = MetadataBuilder.read( new ByteArrayInputStream(mdBytes) );
- if( gavMd == null || gavMd.getVersioning() == null )
+ if( gavMd == null )
{
- res.addError( bmd, new RepositoryException( _lang.getMessage( "gav.md.no.versions", _repo.getServer().getURL().toString(), mdPath ) ) );
- return false;
+ throw new RepositoryException( _lang.getMessage( "gav.md.no.versions", _repo.getServer().getURL().toString(), mdPath ) );
}
+
+ gavm = new RepositoryGAVMetadata( gavMd );
+
+ if( _mdCache != null )
+ {
+ _mdCache.updateGAV( _repo.getId(), gavm );
+ }
+
+ if( Util.isEmpty( gavm.getSnapshots() ) )
+ {
+ throw new RepositoryException( _lang.getMessage( "gav.md.no.versions", _repo.getServer().getURL().toString(), mdPath ) );
+ }
+
+ return gavm.getSnapshots();
- List<String> versions = gavMd.getVersioning().getVersions();
- if( versions == null || versions.size() < 1 )
+ }
+ //---------------------------------------------------------------------------------------------------------------
+ private boolean findLatestSnapshot( ArtifactBasicMetadata bmd, ArtifactLocation loc, AbstractRepOpResult res )
+ throws MetadataReaderException, MetadataException, RemoteRepositoryM2OperationException
+ {
+ DefaultArtifactVersion dav = new DefaultArtifactVersion( loc.getVersion() );
+
+
+ Collection<String> versions = null;
+
+ try
+ {
+ versions = getCachedSnapshots( bmd, loc );
+ }
+ catch( Exception e )
{
- res.addError( bmd, new RepositoryException( _lang.getMessage( "gav.md.no.versions", _repo.getServer().getURL().toString(), mdPath ) ) );
+ res.addError( bmd, new RepositoryException( _lang.getMessage( "cached.metadata.reading.exception", e.getMessage(), bmd.toString(), _repo.getServer().getURL().toString() ) ) );
return false;
}
@@ -239,7 +291,7 @@
if( ver == null )
{
- res.addError( bmd, new RepositoryException( _lang.getMessage( "snapshot.not.found", _repo.getServer().getURL().toString(), mdPath ) ) );
+ res.addError( bmd, new RepositoryException( _lang.getMessage( "snapshot.not.found", _repo.getServer().getURL().toString(), bmd.toString() ) ) );
return false;
}
@@ -359,6 +411,62 @@
return ror;
}
//---------------------------------------------------------------------------------------------------------------
+ private Collection<String> getCachedVersions( ArtifactLocation loc, ArtifactBasicMetadata bmd )
+ throws MetadataException, MetadataReaderException, MetadataCacheException
+ {
+ RepositoryGAMetadata gam = null;
+ ArtifactCoordinates coord = null;
+
+ // check the cache first
+ if( _mdCache != null )
+ {
+ try
+ {
+ coord = bmd.getEffectiveCoordinates();
+ coord.setVersion( loc.getVersion() );
+
+ gam = _mdCache.findGA( _repo.getId(), _repo.getUpdatePolicy(), coord );
+ if( gam != null && !gam.isExpired() )
+ return gam.getVersions();
+ }
+ catch( MetadataCorruptionException e )
+ {
+ // bad cached data - let's overwrite it
+ _log.error( _lang.getMessage( "cached.data.problem", e.getMessage(), bmd.toString() ) );
+ }
+ }
+
+ // no cached data, or it expired - move on
+ byte[] mavenMetadata = readRawData( loc.getGaPath()+FileUtil.SEP+_repo.getMetadataName() );
+
+ if( mavenMetadata == null )
+ throw new MetadataReaderException();
+
+ Metadata mmd = MetadataBuilder.getMetadata( mavenMetadata );
+
+ if( mmd == null || mmd.getVersioning() == null )
+ {
+ _log.warn( _lang.getMessage( "maven.bad.metadata", loc.getGaPath()+FileUtil.SEP+_repo.getMetadataName(), _repo.getId() ) );
+ return null;
+ }
+
+ gam = new RepositoryGAMetadata( mmd );
+
+ if( gam == null || Util.isEmpty( gam.getVersions() ) )
+ {
+ _log.warn( _lang.getMessage( "maven.metadata.no.versions", loc.getGaPath()+FileUtil.SEP+_repo.getMetadataName(), _repo.getId() ) );
+ return null;
+ }
+
+ // cache it
+ if( _mdCache != null )
+ {
+ _mdCache.updateGA( _repo.getId(), gam );
+ }
+
+ return gam.getVersions();
+ }
+ //---------------------------------------------------------------------------------------------------------------
/**
* direct disk search, no redirects, first attempt
*/
@@ -377,41 +485,18 @@
{
ArtifactLocation loc = new ArtifactLocation( root, bmd );
- byte[] mavenMetadata;
- try
- {
- mavenMetadata = readRawData( loc.getGaPath()+FileUtil.SEP+_repo.getMetadataName() );
- }
- catch( MetadataReaderException e )
- {
- continue;
- }
-
- if( mavenMetadata == null )
- continue;
+ Collection<String> versions = null;
- Metadata mmd;
try
{
- mmd = MetadataBuilder.getMetadata( mavenMetadata );
- }
- catch( MetadataException e1 )
- {
- res.addError( bmd, e1 );
- continue;
- }
-
- if( mmd == null || mmd.getVersioning() == null )
- {
- _log.warn( _lang.getMessage( "maven.bad.metadata", loc.getGaPath()+FileUtil.SEP+_repo.getMetadataName(), _repo.getId() ) );
- continue;
+ versions = getCachedVersions( loc, bmd );
+
+ if( Util.isEmpty( versions ) )
+ continue;
}
-
- List<String> versions = mmd.getVersioning().getVersions();
-
- if( mmd == null || mmd.getVersioning() == null )
+ catch( Exception e )
{
- _log.warn( _lang.getMessage( "maven.metadata.no.versions", loc.getGaPath()+FileUtil.SEP+_repo.getMetadataName(), _repo.getId() ) );
+ res.addError( bmd, e );
continue;
}
@@ -487,6 +572,32 @@
public byte[] readRawData( ArtifactBasicMetadata bmd, String classifier, String type )
throws MetadataReaderException
{
+ byte [] res = null;
+ ArtifactBasicMetadata mod = null;
+
+ // only cache poms at the moment
+ if( _mdCache != null && "pom".equals( type ) )
+ {
+ mod = new ArtifactBasicMetadata();
+ mod.setGroupId( bmd.getGroupId() );
+ mod.setArtifactId( bmd.getArtifactId() );
+ mod.setVersion( bmd.getVersion() );
+ mod.setClassifier( classifier );
+ mod.setType( type );
+
+ try
+ {
+ res = _mdCache.findRaw( mod );
+ if( res != null )
+ return res;
+ }
+ catch( MetadataCacheException e )
+ {
+ // problems with the cache - move on
+ _log.error( _lang.getMessage( "cached.data.problem", e.getMessage(), bmd.toString() ) );
+ }
+ }
+
String bmdPath = bmd.getGroupId().replace( '.', '/' )
+ '/'+bmd.getArtifactId()
+ '/'+bmd.getVersion()
@@ -494,7 +605,21 @@
+ '.' + (type == null ? bmd.getType() : type )
;
- return readRawData( bmdPath );
+ res = readRawData( bmdPath );
+
+ if( _mdCache != null && res != null && mod != null )
+ {
+ try
+ {
+ _mdCache.saveRaw( mod, res );
+ }
+ catch( MetadataCacheException e )
+ {
+ throw new MetadataReaderException(e);
+ }
+ }
+
+ return res;
}
//---------------------------------------------------------------------------------------------------------------
public byte[] readRawData( String path )
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-virtual/pom.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-virtual/pom.xml?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-virtual/pom.xml (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-virtual/pom.xml Mon Oct 13 18:46:46 2008
@@ -12,7 +12,7 @@
<dependencies>
<dependency>
<groupId>org.apache.maven.mercury</groupId>
- <artifactId>mercury-repo-api</artifactId>
+ <artifactId>mercury-repo-cache-fs</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
Modified: maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java Mon Oct 13 18:46:46 2008
@@ -1,5 +1,7 @@
package org.apache.maven.mercury.repository.virtual;
+import java.io.File;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -19,6 +21,7 @@
import org.apache.maven.mercury.repository.api.RepositoryException;
import org.apache.maven.mercury.repository.api.RepositoryMetadataCache;
import org.apache.maven.mercury.repository.api.RepositoryReader;
+import org.apache.maven.mercury.repository.cache.fs.MetadataCacheFs;
/**
* this helper class hides the necessity to talk to localRepo and a bunch of remoteRepos.
@@ -31,6 +34,8 @@
public class VirtualRepositoryReader
implements MetadataReader
{
+ public static final String METADATA_CACHE_DIR = ".cache";
+
//----------------------------------------------------------------------------------------------------------------------------
private List<Repository> _repositories = new ArrayList<Repository>(8);
@@ -47,10 +52,9 @@
private boolean _initialized = false;
//----------------------------------------------------------------------------------------------------------------------------
public VirtualRepositoryReader(
- LocalRepository localRepository
+ LocalRepository localRepository
, List<RemoteRepository> remoteRepositories
- , DependencyProcessor processor
- , RepositoryMetadataCache mdCache
+ , DependencyProcessor processor
)
throws RepositoryException
{
@@ -59,6 +63,7 @@
if( processor == null )
throw new RepositoryException( "null metadata processor" );
+
this._processor = processor;
this._localRepository = localRepository;
@@ -67,11 +72,9 @@
if( remoteRepositories != null && remoteRepositories.size() > 0 )
this._repositories.addAll( remoteRepositories );
-
- this._mdCache = mdCache;
}
//----------------------------------------------------------------------------------------------------------------------------
- public VirtualRepositoryReader( List<Repository> repositories, DependencyProcessor processor, RepositoryMetadataCache mdCache )
+ public VirtualRepositoryReader( List<Repository> repositories, DependencyProcessor processor )
throws RepositoryException
{
if( processor == null )
@@ -80,8 +83,6 @@
if( repositories != null && repositories.size() > 0 )
this._repositories.addAll( repositories );
-
- this._mdCache = mdCache;
}
//----------------------------------------------------------------------------------------------------------------------------
public VirtualRepositoryReader( Repository... repositories )
@@ -92,6 +93,14 @@
this._repositories.add( r );
}
//----------------------------------------------------------------------------------------------------------------------------
+ public static final RepositoryMetadataCache getCache( File localRepositoryRoot )
+ throws IOException
+ {
+ // TODO: 2008-10-13 og: man - I miss plexus! Badly want an IOC container. This
+ // should be configured, not hardcoded
+ return MetadataCacheFs.getCache( new File(localRepositoryRoot, METADATA_CACHE_DIR) );
+ }
+ //----------------------------------------------------------------------------------------------------------------------------
public void addRepository( Repository repo )
throws RepositoryException
{
@@ -106,15 +115,16 @@
_processors = processors;
}
//----------------------------------------------------------------------------------------------------------------------------
+ /**
+ * very important call - makes VRR sort out all the information it collected so far
+ */
public void init()
throws RepositoryException
{
if( _initialized )
return;
- int repositoryCount = _repositories.size();
-
- _repositoryReaders = new RepositoryReader[ repositoryCount ];
+ _repositoryReaders = new RepositoryReader[ _repositories.size() ];
// move local repo's upfront - they are faster!
int i = 0;
@@ -125,38 +135,38 @@
_repositoryReaders[ i++ ] = r.getReader(_processor);
if( ! r.isReadOnly() )
+ {
_localRepository = (LocalRepository)r.getReader(_processor).getRepository();
+ if( _mdCache == null )
+ {
+ try
+ {
+ _mdCache = getCache( _localRepository.getDirectory() );
+ }
+ catch( IOException e )
+ {
+ throw new RepositoryException( e.getMessage() );
+ }
+ }
+ }
}
- // the rest
+ // remote ones
for( Repository r : _repositories )
{
if( r.isLocal() )
continue;
+
+ RepositoryReader rr = r.getReader(_processor);
+
+ if( _mdCache != null )
+ rr.setMetadataCache( _mdCache );
- _repositoryReaders[ i++ ] = r.getReader(_processor);
+ _repositoryReaders[ i++ ] = rr;
}
_initialized = true;
}
//----------------------------------------------------------------------------------------------------------------------------
- /**
- *
- *
- * @param query
- * @param reader
- * @param res
- * @return
- */
- private List<ArtifactBasicMetadata> applyScanPolicy(
- List<ArtifactBasicMetadata> query
- , RepositoryReader reader
- , AbstractRepOpResult res
- )
- {
- // TODO 2008-08-26 og: implement real policy
- return query;
- }
- //----------------------------------------------------------------------------------------------------------------------------
public ArtifactBasicResults readVersions( List<ArtifactBasicMetadata> query )
throws IllegalArgumentException, RepositoryException
{
@@ -170,9 +180,7 @@
for( RepositoryReader rr : _repositoryReaders )
{
- List<ArtifactBasicMetadata> leftOvers = applyScanPolicy( query, rr, res );
-
- ArtifactBasicResults repoRes = rr.readVersions( leftOvers );
+ ArtifactBasicResults repoRes = rr.readVersions( query );
if( repoRes != null && repoRes.hasResults() )
for( ArtifactBasicMetadata key : repoRes.getResults().keySet() )
Modified: maven/mercury/trunk/mercury-repo/pom.xml
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/pom.xml?rev=704292&r1=704291&r2=704292&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/pom.xml (original)
+++ maven/mercury/trunk/mercury-repo/pom.xml Mon Oct 13 18:46:46 2008
@@ -16,6 +16,7 @@
<module>mercury-repo-local-m2</module>
<module>mercury-repo-remote-m2</module>
<module>mercury-repo-cache-fs</module>
+ <module>mercury-repo-virtual</module>
</modules>
</project>
\ No newline at end of file