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/16 03:06:36 UTC

svn commit: r705112 - in /maven/mercury/trunk: mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/ mercury-it/src/test/resources/repoVr/ mercury-it/src/test/resources/rep...

Author: ogusakov
Date: Wed Oct 15 18:06:35 2008
New Revision: 705112

URL: http://svn.apache.org/viewvc?rev=705112&view=rev
Log:
stabilizing virtual repo reader, added cache expiration integration test

Added:
    maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/THelper.java
    maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/VirtualRepositoryReaderIntegratedTest.java
    maven/mercury/trunk/mercury-it/src/test/resources/repoVr/
    maven/mercury/trunk/mercury-it/src/test/resources/repoVr/a/
    maven/mercury/trunk/mercury-it/src/test/resources/repoVr/a/a/
    maven/mercury/trunk/mercury-it/src/test/resources/repoVr/a/a/1/
    maven/mercury/trunk/mercury-it/src/test/resources/repoVr/a/a/2/
    maven/mercury/trunk/mercury-it/src/test/resources/repoVr/a/a/3/
    maven/mercury/trunk/mercury-it/src/test/resources/repoVr/a/a/4/
    maven/mercury/trunk/mercury-it/src/test/resources/repoVr/a/a/5-SNAPSHOT/
Modified:
    maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactCoordinates.java
    maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryWriterM2Test.java
    maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryCachingReaderM2Test.java
    maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryReaderM2Test.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/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-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.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-virtual/src/test/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReaderTest.java
    maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/TimeUtil.java

Modified: maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactCoordinates.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactCoordinates.java?rev=705112&r1=705111&r2=705112&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactCoordinates.java (original)
+++ maven/mercury/trunk/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ArtifactCoordinates.java Wed Oct 15 18:06:35 2008
@@ -40,8 +40,7 @@
     return groupId;
   }
 
-  public void setGroupId(
-      String groupId )
+  public void setGroupId( String groupId )
   {
     this.groupId = groupId;
   }
@@ -51,8 +50,7 @@
     return artifactId;
   }
 
-  public void setArtifactId(
-      String artifactId )
+  public void setArtifactId( String artifactId )
   {
     this.artifactId = artifactId;
   }
@@ -62,9 +60,17 @@
     return version;
   }
 
-  public void setVersion(
-      String version )
+  public void setVersion( String version )
   {
     this.version = version;
   }
+  
+  /* (non-Javadoc)
+   * @see java.lang.Object#toString()
+   */
+  @Override
+  public String toString()
+  {
+    return groupId+":"+artifactId+":"+version;
+  }
 }

Modified: maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryWriterM2Test.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryWriterM2Test.java?rev=705112&r1=705111&r2=705112&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryWriterM2Test.java (original)
+++ maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/AbstractRepositoryWriterM2Test.java Wed Oct 15 18:06:35 2008
@@ -19,12 +19,10 @@
 import org.apache.maven.mercury.repository.api.RepositoryWriter;
 import org.apache.maven.mercury.repository.metadata.Metadata;
 import org.apache.maven.mercury.repository.metadata.MetadataBuilder;
-import org.apache.maven.mercury.repository.remote.m2.RemoteRepositoryWriterM2;
 import org.apache.maven.mercury.transport.api.Server;
 import org.apache.maven.mercury.util.FileUtil;
 import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.PlexusTestCase;
-import org.mortbay.log.Log;
 
 /**
  *

Modified: 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=705112&r1=705111&r2=705112&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryCachingReaderM2Test.java (original)
+++ maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/RemoteRepositoryCachingReaderM2Test.java Wed Oct 15 18:06:35 2008
@@ -7,7 +7,6 @@
 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;
@@ -24,9 +23,7 @@
 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;
 

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=705112&r1=705111&r2=705112&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 Wed Oct 15 18:06:35 2008
@@ -13,12 +13,10 @@
 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;
@@ -31,30 +29,18 @@
 extends AbstractRepositoryReaderM2Test
 {
   MetadataXpp3Reader _reader;
-  File _testBase = new File("./target/test-classes/repo");
+  File _testBase;
   DefaultRetriever _retriever;
   public String _port;
   HttpTestServer _server;
   DefaultRetrievalRequest _request;
-  
-//  List<ArtifactBasicMetadata> query;
-//  MetadataProcessor mdProcessor;
-//  ArtifactBasicMetadata bmd;
-//
-//  Server server;
-//  RemoteRepositoryM2 repo;
-//  
-//  RepositoryReader reader;
-//  
-//  // setting this to true will add aonatype nexus tests
-//  String nexusUrl = System.getProperty( "mercury.nexus.url", null );
-//
 
   //-------------------------------------------------------------------------
   @Override
   protected void setUp()
   throws Exception
   {
+    _testBase = new File("./target/test-classes/repo");
     _retriever = new DefaultRetriever();
     _server = new HttpTestServer( _testBase, "/repo" );
     _server.start();

Added: maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/THelper.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/THelper.java?rev=705112&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/THelper.java (added)
+++ maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/THelper.java Wed Oct 15 18:06:35 2008
@@ -0,0 +1,22 @@
+package org.apache.maven.mercury.repository.tests;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class THelper
+{
+  public static List<ArtifactBasicMetadata> toList( ArtifactBasicMetadata... bmds)
+  {
+    return Arrays.asList( bmds );
+  }
+}

Added: maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/VirtualRepositoryReaderIntegratedTest.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/VirtualRepositoryReaderIntegratedTest.java?rev=705112&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/VirtualRepositoryReaderIntegratedTest.java (added)
+++ maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/repository/tests/VirtualRepositoryReaderIntegratedTest.java Wed Oct 15 18:06:35 2008
@@ -0,0 +1,165 @@
+package org.apache.maven.mercury.repository.tests;
+
+import java.io.File;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
+import org.apache.maven.mercury.builder.api.DependencyProcessor;
+import org.apache.maven.mercury.repository.api.ArtifactBasicResults;
+import org.apache.maven.mercury.repository.api.Repository;
+import org.apache.maven.mercury.repository.api.RepositoryUpdateIntervalPolicy;
+import org.apache.maven.mercury.repository.local.m2.LocalRepositoryM2;
+import org.apache.maven.mercury.repository.local.m2.MetadataProcessorMock;
+import org.apache.maven.mercury.repository.metadata.AddVersionOperation;
+import org.apache.maven.mercury.repository.metadata.Metadata;
+import org.apache.maven.mercury.repository.metadata.MetadataBuilder;
+import org.apache.maven.mercury.repository.metadata.StringOperand;
+import org.apache.maven.mercury.repository.remote.m2.RemoteRepositoryM2;
+import org.apache.maven.mercury.repository.virtual.VirtualRepositoryReader;
+import org.apache.maven.mercury.spi.http.server.HttpTestServer;
+import org.apache.maven.mercury.transport.api.Server;
+import org.apache.maven.mercury.util.FileUtil;
+
+public class VirtualRepositoryReaderIntegratedTest
+extends TestCase
+{
+  File _testBase;
+  File _localRepoBase;
+  
+  public String _port;
+  HttpTestServer _server;
+  
+  List<ArtifactBasicMetadata> _query;
+  
+  RemoteRepositoryM2 _remoteRepo;
+  LocalRepositoryM2  _localRepo;
+  
+  
+  VirtualRepositoryReader _vr;
+
+  //-------------------------------------------------------------------------
+  @Override
+  protected void setUp()
+  throws Exception
+  {
+    _testBase = new File("./target/test-classes/repoVr");
+    _localRepoBase = new File("./target/localRepo");
+    
+    FileUtil.delete( _localRepoBase );
+    _localRepoBase.mkdirs();
+    
+    _server = new HttpTestServer( _testBase, "/repo" );
+    _server.start();
+    _port = String.valueOf( _server.getPort() );
+
+    _query = new ArrayList<ArtifactBasicMetadata>();
+
+    Server server = new Server( "testRemoteRepo", new URL("http://localhost:"+_port+"/repo") );
+    _remoteRepo = new RemoteRepositoryM2( server );
+    _remoteRepo.setUpdatePolicy( new RepositoryUpdateIntervalPolicy("interval2").setInterval( 2000L ) );
+    
+    _localRepo = new LocalRepositoryM2( "testLocalRepo", _localRepoBase );
+    
+    List<Repository> reps = new ArrayList<Repository>();
+    reps.add( _remoteRepo );
+    reps.add( _localRepo );
+    
+    DependencyProcessor mdProcessor = new MetadataProcessorMock();
+
+    _vr = new VirtualRepositoryReader( reps, mdProcessor );
+  }
+  //-------------------------------------------------------------------------
+  @Override
+  protected void tearDown()
+  throws Exception
+  {
+    super.tearDown();
+    _server.stop();
+    _server.destroy();
+  }
+  //-------------------------------------------------------------------------
+  public void testReadArtifact()
+  throws Exception
+  {
+    try
+    {
+    ArtifactBasicMetadata bmd = new ArtifactBasicMetadata("a:a:1");
+    List<ArtifactBasicMetadata> q = THelper.toList( bmd );
+    
+    ArtifactBasicResults vres = _vr.readVersions( q );
+     
+    assertNotNull( vres );
+     
+    assertFalse( vres.hasExceptions() );
+    
+    assertTrue( vres.hasResults() );
+    
+    assertTrue( vres.hasResults(bmd) );
+    
+    List<ArtifactBasicMetadata> versions = vres.getResult( bmd );
+    
+    assertNotNull( versions );
+    
+    assertEquals( 5, versions.size() );
+    
+    // add version 6 to GA metadata
+    File mdf = new File( _testBase, "a/a/maven-metadata.xml");
+    Metadata md = MetadataBuilder.getMetadata( FileUtil.readRawData( mdf ) );
+    
+    byte [] newBytes = MetadataBuilder.changeMetadata( md, new AddVersionOperation(new StringOperand("6")) );
+    
+    FileUtil.writeRawData( mdf, newBytes );
+    
+    // repository policy is 2 sec, this should be still 5 versions
+    vres = _vr.readVersions( q );
+    
+    assertNotNull( vres );
+     
+    assertFalse( vres.hasExceptions() );
+    
+    assertTrue( vres.hasResults() );
+    
+    assertTrue( vres.hasResults(bmd) );
+    
+    versions = vres.getResult( bmd );
+    
+    assertNotNull( versions );
+    
+    assertEquals( 5, versions.size() );
+
+    Thread.sleep( 3000L );
+    
+    // repository policy is 2 sec, this should cause VR to re-read metadata
+    // should now have 6 versions
+    vres = _vr.readVersions( q );
+    
+    assertNotNull( vres );
+     
+    assertFalse( vres.hasExceptions() );
+    
+    assertTrue( vres.hasResults() );
+    
+    assertTrue( vres.hasResults(bmd) );
+    
+    versions = vres.getResult( bmd );
+    
+    assertNotNull( versions );
+    
+    assertEquals( 6, versions.size() );
+    
+    }
+    finally
+    {
+      File mdf = new File( _testBase, "a/a/maven-metadata.xml");
+      InputStream in = VirtualRepositoryReaderIntegratedTest.class.getResourceAsStream( "/repoVr/a.a-maven-metadata.xml" );
+      FileUtil.writeRawData( mdf, in );
+    }
+  }
+  //-------------------------------------------------------------------------
+  //-------------------------------------------------------------------------
+}

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=705112&r1=705111&r2=705112&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 Wed Oct 15 18:06:35 2008
@@ -1,5 +1,6 @@
 package org.apache.maven.mercury.repository.api;
 
+import java.text.ParseException;
 import java.util.Collection;
 import java.util.List;
 import java.util.TreeSet;
@@ -104,11 +105,17 @@
     return versions;
   }
 
-  public long getLastCheck()
+  public long getLastCheckTs()
   {
     return lastCheck;
   }
   
+  public long getLastCheckMillis()
+  throws ParseException
+  {
+    return TimeUtil.toMillis(  lastCheck );
+  }
+  
   public void update( Collection<String> versions )
   {
     this.versions.addAll( versions );

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=705112&r1=705111&r2=705112&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 Wed Oct 15 18:06:35 2008
@@ -1,6 +1,8 @@
 package org.apache.maven.mercury.repository.api;
 
-import org.apache.maven.mercury.artifact.version.VersionComparator;
+import java.text.ParseException;
+
+import org.apache.maven.mercury.util.TimeUtil;
 import org.apache.maven.mercury.util.Util;
 import org.codehaus.plexus.lang.DefaultLanguage;
 import org.codehaus.plexus.lang.Language;
@@ -43,6 +45,17 @@
   {
     init( policy );
   }
+  
+  /**
+   * used mostly for testing as it's too much waiting for a minute to test expiration
+   * 
+   * @param interval
+   */
+  public RepositoryUpdateIntervalPolicy setInterval( long interval )
+  {
+    this.interval = interval;
+    return this;
+  }
 
   public void init( String policy )
   {
@@ -67,13 +80,32 @@
        throw new IllegalArgumentException( _lang.getMessage( "bad.policy", policy ));
   }
 
-  public boolean timestampExpired( long lastUpdate )
+  public boolean timestampExpired( long lastUpdateMillis )
   {
-    long now =System.currentTimeMillis();
+    if( interval == NEVER )
+      return false;
+    
+    long now;
+    try
+    {
+      now = TimeUtil.toMillis( TimeUtil.getUTCTimestamp() );
+    }
+    catch( ParseException e )
+    {
+      throw new IllegalArgumentException( e );
+    }
     
-    boolean res = now - lastUpdate > interval; 
+    boolean res = ( (now - lastUpdateMillis) > interval); 
     
     return res;
   }
+  
+  public static void main(
+      String[] args )
+  {
+    RepositoryUpdateIntervalPolicy up = new RepositoryUpdateIntervalPolicy("interval2");
+    
+    System.out.println("Interval is "+up.interval);
+  }
 
 }

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=705112&r1=705111&r2=705112&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 Wed Oct 15 18:06:35 2008
@@ -19,8 +19,8 @@
   /**
    * perform the calculation and decide if it's time to update
    * 
-   * @param timestamp - UTC-based timestamp
+   * @param timestamp - UTC-based timestamp as long milliseconds
    * @return
    */
-  boolean timestampExpired( long timestamp );
+  boolean timestampExpired( long timestampMillis );
 }

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=705112&r1=705111&r2=705112&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 Wed Oct 15 18:06:35 2008
@@ -1,7 +1,6 @@
 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;
@@ -14,16 +13,15 @@
 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.apache.maven.mercury.util.TimeUtil;
 import org.codehaus.plexus.lang.DefaultLanguage;
 import org.codehaus.plexus.lang.Language;
-import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 /**
  *
@@ -35,6 +33,7 @@
 public class MetadataCacheFs
 implements RepositoryMetadataCache
 {
+  private static final org.slf4j.Logger _log = org.slf4j.LoggerFactory.getLogger( MetadataCacheFs.class ); 
   private static final Language _lang = new DefaultLanguage( RepositoryGAVMetadata.class );
   
   static volatile Map<String, MetadataCacheFs> fsCaches = Collections.synchronizedMap( new HashMap<String, MetadataCacheFs>(2) ); 
@@ -95,8 +94,12 @@
       {
           md = new CachedGAMetadata( gamF );
           
-          if( up != null && up.timestampExpired( md.getLastCheck() ) )
+          long lastCheckMillis = md.getLastCheckMillis();
+          
+          if( up != null && up.timestampExpired( lastCheckMillis ) )
+          {
             md.setExpired( true );
+          }
       }
       
       return md;

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=705112&r1=705111&r2=705112&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 Wed Oct 15 18:06:35 2008
@@ -23,6 +23,11 @@
     private RepositoryUpdatePolicy _updatePolicy = new RepositoryUpdateIntervalPolicy( RepositoryUpdateIntervalPolicy.DEFAULT_UPDATE_POLICY );
     
     //----------------------------------------------------------------------------------
+    public RemoteRepositoryM2( Server server  )
+    {
+      this( server.getId(), server );
+    }
+    //----------------------------------------------------------------------------------
     public RemoteRepositoryM2( String id, Server server  )
     {
         super( id, DEFAULT_REPOSITORY_TYPE );

Modified: maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/test/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReaderTest.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/test/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReaderTest.java?rev=705112&r1=705111&r2=705112&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/test/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReaderTest.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/test/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReaderTest.java Wed Oct 15 18:06:35 2008
@@ -1,11 +1,12 @@
 package org.apache.maven.mercury.repository.virtual;
 
-import java.util.List;
-import java.util.Map;
 import java.io.File;
-import java.io.IOException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
 
 import org.apache.maven.mercury.artifact.Artifact;
 import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
@@ -20,8 +21,6 @@
 import org.apache.maven.mercury.transport.api.Server;
 import org.apache.maven.mercury.util.FileUtil;
 
-import junit.framework.TestCase;
-
 /**
  *
  *
@@ -48,7 +47,7 @@
   throws Exception
   {
     _testBase = new File( "./target/repo" );
-    _testBase.delete();
+    FileUtil.delete( _testBase );
     _testBase.mkdirs();
     
     if( !_testBase.exists() || !_testBase.isDirectory() )

Modified: maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/TimeUtil.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/TimeUtil.java?rev=705112&r1=705111&r2=705112&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/TimeUtil.java (original)
+++ maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/TimeUtil.java Wed Oct 15 18:06:35 2008
@@ -1,5 +1,6 @@
 package org.apache.maven.mercury.util;
 
+import java.text.ParseException;
 import java.util.Date;
 
 /**
@@ -11,6 +12,13 @@
  */
 public class TimeUtil
 {
+  public static final java.util.TimeZone TS_TZ = java.util.TimeZone.getTimeZone( "UTC" );
+  public static final java.text.DateFormat TS_FORMAT = new java.text.SimpleDateFormat( "yyyyMMddHHmmss" );
+  
+  static
+  {
+    TS_FORMAT.setTimeZone( TS_TZ );
+  }
 
   /**
    * 
@@ -32,15 +40,48 @@
 
   /**
    * 
+   * @return current UTC timestamp by yyyyMMddHHmmss mask as a long int
+   */
+  public static long getUTCTimestampAsMillis( )
+  {
+    return Long.parseLong( getUTCTimestamp( new Date() ) );
+  }
+  /**
+   * 
    * @param date
    * @return current date converted to UTC timestamp by yyyyMMddHHmmss mask
    */
   public static String getUTCTimestamp( Date date )
   {
-      java.util.TimeZone timezone = java.util.TimeZone.getTimeZone( "UTC" );
-      java.text.DateFormat fmt = new java.text.SimpleDateFormat( "yyyyMMddHHmmss" );
-      fmt.setTimeZone( timezone );
-      return fmt.format( date );
+      return TS_FORMAT.format( date );
+  }
+
+  /**
+   * convert timestamp to millis
+   * 
+   * @param ts timestamp to convert. Presumed to be a long of form yyyyMMddHHmmss
+   * @return millis, corresponding to the supplied TS
+   * @throws ParseException is long does not follow the format
+   */
+  public static long toMillis( long ts )
+  throws ParseException
+  {
+    return toMillis(  ""+ts );
+  }
+
+  /**
+   * convert timestamp to millis
+   * 
+   * @param ts timestamp to convert. Presumed to be a string of form yyyyMMddHHmmss
+   * @return millis, corresponding to the supplied TS
+   * @throws ParseException is long does not follow the format
+   */
+  public static long toMillis( String ts )
+  throws ParseException
+  {
+    Date dts =TS_FORMAT.parse( ts );
+    
+    return dts.getTime();
   }
 
 }