You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2008/03/03 18:33:31 UTC
svn commit: r633190 - in /maven/artifact/trunk/src:
main/java/org/apache/maven/artifact/manager/
test/java/org/apache/maven/artifact/manager/
test/java/org/apache/maven/artifact/repository/metadata/
Author: jdcasey
Date: Mon Mar 3 09:33:29 2008
New Revision: 633190
URL: http://svn.apache.org/viewvc?rev=633190&view=rev
Log:
[MNG-3421] Applying another patch, to track artifacts separately instead of grouping by artifactId, and remove tracking files for artifacts that become available.
Submitted by: Igor Fedorenko
Modified:
maven/artifact/trunk/src/main/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManager.java
maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManagerTest.java
maven/artifact/trunk/src/test/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManagerTest.java
Modified: maven/artifact/trunk/src/main/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManager.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManager.java?rev=633190&r1=633189&r2=633190&view=diff
==============================================================================
--- maven/artifact/trunk/src/main/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManager.java (original)
+++ maven/artifact/trunk/src/main/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManager.java Mon Mar 3 09:33:29 2008
@@ -38,7 +38,7 @@
public static final String LAST_UPDATE_TAG = ".lastUpdated";
- public static final String TOUCHFILE_NAME = "resolver-status.properties";
+ private static final String TOUCHFILE_NAME = "resolver-status.properties";
public boolean isUpdateRequired( Artifact artifact, ArtifactRepository repository )
{
@@ -65,7 +65,8 @@
}
else
{
- lastCheckDate = getLastModifiedFromTouchfile( file, repository.getId() );
+ File touchfile = getTouchfile( artifact );
+ lastCheckDate = readLastUpdated( touchfile, repository.getId() );
}
return lastCheckDate == null || policy.checkOutOfDate( lastCheckDate );
@@ -86,35 +87,58 @@
return true;
}
- Date lastCheckDate = getLastModifiedFromTouchfile( file, repository.getId() );
+ Date lastCheckDate = readLastUpdated( metadata, repository, file );
return lastCheckDate == null || policy.checkOutOfDate( lastCheckDate );
}
+ public Date readLastUpdated( RepositoryMetadata metadata, ArtifactRepository repository, File file )
+ {
+ File touchfile = getTouchfile( metadata, file );
+
+ String key = getMetadataKey( repository, file );
+
+ return readLastUpdated( touchfile, key );
+ }
+
public void touch( Artifact artifact, ArtifactRepository repository )
{
File file = artifact.getFile();
- touch( file, repository, false );
+ File touchfile = getTouchfile( artifact );
+
+ if ( file.exists() )
+ {
+ touchfile.delete();
+ }
+ else
+ {
+ writeLastUpdated( touchfile, repository.getId() );
+ }
+
}
public void touch( RepositoryMetadata metadata, ArtifactRepository repository, File file )
{
- touch( file, repository, true );
+ File touchfile = getTouchfile( metadata, file );
+
+ String key = getMetadataKey( repository, file );
+
+ writeLastUpdated( touchfile, key );
}
- private void touch( File file, ArtifactRepository repository, boolean forceTouchFile )
+ public String getMetadataKey( ArtifactRepository repository, File file )
{
- String name = file.getName();
-
- File touchfile = getTouchfile( file );
+ return repository.getId() + "." + file.getName() + LAST_UPDATE_TAG;
+ }
+ private void writeLastUpdated( File touchfile, String key )
+ {
synchronized ( touchfile.getAbsolutePath().intern() )
{
if ( !touchfile.getParentFile().exists() && !touchfile.getParentFile().mkdirs() )
{
- getLogger().debug(
- "Failed to create directory: " + touchfile.getParent() +
+ getLogger().debug( "Failed to create directory: " + touchfile.getParent() +
" for tracking artifact metadata resolution." );
return;
}
@@ -140,42 +164,25 @@
props.load( stream );
}
- String key = getKey( name, repository.getId() );
+ props.setProperty( key, Long.toString( System.currentTimeMillis() ) );
- boolean modified = false;
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
- if ( !forceTouchFile && file.exists() )
- {
- modified = props.remove( key ) != null;
- }
- else
- {
- props.setProperty( key, Long.toString( System.currentTimeMillis() ) );
+ getLogger().debug( "Writing resolution-state to: " + touchfile );
+ props.store( stream, "Last modified on: " + new Date() );
- modified = true;
- }
-
- if ( modified )
- {
- ByteArrayOutputStream stream = new ByteArrayOutputStream();
+ byte[] data = stream.toByteArray();
+ ByteBuffer buffer = ByteBuffer.allocate( data.length );
+ buffer.put( data );
+ buffer.flip();
- getLogger().debug( "Writing resolution-state to: " + touchfile );
- props.store( stream, "Last modified on: " + new Date() );
-
- byte[] data = stream.toByteArray();
- ByteBuffer buffer = ByteBuffer.allocate( data.length );
- buffer.put( data );
- buffer.flip();
-
- channel.position( 0 );
- channel.write( buffer );
- }
+ channel.position( 0 );
+ channel.write( buffer );
}
catch ( IOException e )
{
- getLogger().debug(
- "Failed to record lastUpdated information for metadata resolution.\nMetadata type: " +
- name, e );
+ getLogger().debug( "Failed to record lastUpdated information for metadata resolution.\nMetadata type: " +
+ touchfile.toString() + "; key: " + key, e );
}
finally
{
@@ -187,8 +194,7 @@
}
catch ( IOException e )
{
- getLogger().debug(
- "Error releasing exclusive lock for metadata resolution tracking file: " +
+ getLogger().debug( "Error releasing exclusive lock for metadata resolution tracking file: " +
touchfile, e );
}
}
@@ -201,8 +207,7 @@
}
catch ( IOException e )
{
- getLogger().debug(
- "Error closing FileChannel for metadata resolution tracking file: " +
+ getLogger().debug( "Error closing FileChannel for metadata resolution tracking file: " +
touchfile, e );
}
}
@@ -210,26 +215,15 @@
}
}
- private String getKey( String name, String repositoryId )
- {
- return repositoryId + "." + name + LAST_UPDATE_TAG;
- }
-
- public Date getLastModifiedFromTouchfile( File file, String repositoryId )
+ public Date readLastUpdated( File touchfile, String key )
{
- File touchfile = getTouchfile( file );
-
if ( !touchfile.canRead() )
{
return null;
}
- String name = file.getName();
-
synchronized ( touchfile.getAbsolutePath().intern() )
{
- String key = getKey( name, repositoryId );
-
getLogger().debug( "Searching for: " + key + " in touchfile." );
Date result = null;
@@ -239,35 +233,31 @@
{
Properties props = new Properties();
- if ( touchfile.exists() )
- {
- stream = new FileInputStream( touchfile );
- FileChannel channel = stream.getChannel();
- lock = channel.lock( 0, channel.size(), true );
+ stream = new FileInputStream( touchfile );
+ FileChannel channel = stream.getChannel();
+ lock = channel.lock( 0, channel.size(), true );
- getLogger().debug( "Reading resolution-state from: " + touchfile );
- props.load( stream );
+ getLogger().debug( "Reading resolution-state from: " + touchfile );
+ props.load( stream );
- String rawVal = props.getProperty( key );
- if ( rawVal != null )
+ String rawVal = props.getProperty( key );
+ if ( rawVal != null )
+ {
+ try
{
- try
- {
- result = new Date( Long.parseLong( rawVal ) );
- }
- catch ( NumberFormatException e )
- {
- getLogger().debug( "Cannot parse lastUpdated date: \'" + rawVal + "\'. Ignoring.", e );
- result = null;
- }
+ result = new Date( Long.parseLong( rawVal ) );
+ }
+ catch ( NumberFormatException e )
+ {
+ getLogger().debug( "Cannot parse lastUpdated date: \'" + rawVal + "\'. Ignoring.", e );
+ result = null;
}
}
}
catch ( IOException e )
{
- getLogger().debug(
- "Failed to read lastUpdated information for metadata resolution.\nMetadata type: " +
- name, e );
+ getLogger().debug( "Failed to read lastUpdated information.\nFile: " +
+ touchfile.toString() + "; key: " + key, e );
}
finally
{
@@ -279,8 +269,7 @@
}
catch ( IOException e )
{
- getLogger().debug(
- "Error releasing shared lock for metadata resolution tracking file: " +
+ getLogger().debug( "Error releasing shared lock for metadata resolution tracking file: " +
touchfile, e );
}
}
@@ -292,8 +281,23 @@
}
}
- private File getTouchfile( File file )
+ public File getTouchfile( Artifact artifact )
+ {
+ StringBuffer sb = new StringBuffer();
+ sb.append( artifact.getArtifactId() );
+ sb.append( '-' ).append( artifact.getBaseVersion() );
+ if ( artifact.getClassifier() != null )
+ {
+ sb.append( '-' ).append( artifact.getClassifier() );
+ }
+ sb.append( '.' ).append( artifact.getType() ).append( LAST_UPDATE_TAG );
+ File touchfile = new File( artifact.getFile().getParentFile(), sb.toString() );
+ return touchfile;
+ }
+
+ public File getTouchfile( RepositoryMetadata metadata, File file )
{
return new File( file.getParent(), TOUCHFILE_NAME );
}
+
}
Modified: maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManagerTest.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManagerTest.java?rev=633190&r1=633189&r2=633190&view=diff
==============================================================================
--- maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManagerTest.java (original)
+++ maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/DefaultUpdateCheckManagerTest.java Mon Mar 3 09:33:29 2008
@@ -4,6 +4,7 @@
import org.apache.maven.artifact.AbstractArtifactComponentTestCase;
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
@@ -43,7 +44,7 @@
file.delete();
a.setFile( file );
- File touchFile = new File ( file.getParent(), DefaultUpdateCheckManager.TOUCHFILE_NAME );
+ File touchFile = updateCheckManager.getTouchfile( a );
touchFile.delete();
assertTrue( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
@@ -54,7 +55,9 @@
assertFalse( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
- assertNull( updateCheckManager.getLastModifiedFromTouchfile( file, remoteRepository.getId() ) );
+ assertNull( updateCheckManager.readLastUpdated( touchFile, remoteRepository.getId() ) );
+
+ assertFalse( updateCheckManager.getTouchfile( a ).exists() );
}
public void testMissingArtifact()
@@ -70,7 +73,7 @@
file.delete();
a.setFile( file );
- File touchFile = new File ( file.getParent(), DefaultUpdateCheckManager.TOUCHFILE_NAME );
+ File touchFile = updateCheckManager.getTouchfile( a );
touchFile.delete();
assertTrue( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
@@ -80,7 +83,7 @@
assertFalse( updateCheckManager.isUpdateRequired( a, remoteRepository ) );
assertFalse( file.exists() );
- assertNotNull( updateCheckManager.getLastModifiedFromTouchfile( file, remoteRepository.getId() ) );
+ assertNotNull( updateCheckManager.readLastUpdated( touchFile, remoteRepository.getId() ) );
}
public void testMetadata() throws Exception
@@ -96,7 +99,7 @@
localRepository.pathOfLocalRepositoryMetadata( metadata, localRepository ) );
file.delete();
- File touchFile = new File ( file.getParent(), DefaultUpdateCheckManager.TOUCHFILE_NAME );
+ File touchFile = updateCheckManager.getTouchfile( metadata, file );
touchFile.delete();
assertTrue( updateCheckManager.isUpdateRequired( metadata, remoteRepository, file ) );
@@ -107,7 +110,7 @@
assertFalse( updateCheckManager.isUpdateRequired( metadata, remoteRepository, file ) );
- assertNotNull( updateCheckManager.getLastModifiedFromTouchfile( file, remoteRepository.getId() ) );
+ assertNotNull( updateCheckManager.readLastUpdated( touchFile, updateCheckManager.getMetadataKey( remoteRepository, file ) ) );
}
public void testMissingMetadata() throws Exception
@@ -123,7 +126,7 @@
localRepository.pathOfLocalRepositoryMetadata( metadata, localRepository ) );
file.delete();
- File touchFile = new File ( file.getParent(), DefaultUpdateCheckManager.TOUCHFILE_NAME );
+ File touchFile = updateCheckManager.getTouchfile( metadata, file );
touchFile.delete();
assertTrue( updateCheckManager.isUpdateRequired( metadata, remoteRepository, file ) );
@@ -132,7 +135,28 @@
assertFalse( updateCheckManager.isUpdateRequired( metadata, remoteRepository, file ) );
- assertNotNull( updateCheckManager.getLastModifiedFromTouchfile( file, remoteRepository.getId() ) );
+ assertNotNull( updateCheckManager.readLastUpdated( touchFile, updateCheckManager.getMetadataKey( remoteRepository, file ) ) );
+ }
+
+ public void testArtifactTouchFileName() throws Exception
+ {
+ ArtifactFactory artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
+
+ ArtifactRepository localRepository = localRepository();
+
+ Artifact a = artifactFactory.createArtifactWithClassifier( "groupdId", "a", "0.0.1-SNAPSHOT", "jar", null );
+ File file = new File( localRepository.getBasedir(),
+ localRepository.pathOf( a ) );
+ a.setFile( file );
+
+ assertEquals( "a-0.0.1-SNAPSHOT.jar.lastUpdated", updateCheckManager.getTouchfile( a ).getName() );
+
+ a = artifactFactory.createArtifactWithClassifier( "groupdId", "a", "0.0.1-SNAPSHOT", "jar", "classifier" );
+ file = new File( localRepository.getBasedir(),
+ localRepository.pathOf( a ) );
+ a.setFile( file );
+
+ assertEquals( "a-0.0.1-SNAPSHOT-classifier.jar.lastUpdated", updateCheckManager.getTouchfile( a ).getName() );
}
}
Modified: maven/artifact/trunk/src/test/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManagerTest.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/test/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManagerTest.java?rev=633190&r1=633189&r2=633190&view=diff
==============================================================================
--- maven/artifact/trunk/src/test/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManagerTest.java (original)
+++ maven/artifact/trunk/src/test/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManagerTest.java Mon Mar 3 09:33:29 2008
@@ -138,7 +138,7 @@
Date end = new Date();
- Date checkDate = updateCheckManager.getLastModifiedFromTouchfile( new File( dir, path ), localRepo.getId() );
+ Date checkDate = updateCheckManager.readLastUpdated( metadata, localRepo, new File( dir, path ) );
assertNotNull( checkDate );
assertTrue( checkDate.after( start ) );
@@ -228,7 +228,7 @@
Date end = new Date();
- Date checkDate = updateCheckManager.getLastModifiedFromTouchfile( new File( dir, path ), localRepo.getId() );
+ Date checkDate = updateCheckManager.readLastUpdated( metadata, localRepo, new File( dir, path ) );
assertNotNull( checkDate );
assertTrue( checkDate.after( start ) );
@@ -315,7 +315,7 @@
Date end = new Date();
- Date checkDate = updateCheckManager.getLastModifiedFromTouchfile( new File( dir, path ), localRepo.getId() );
+ Date checkDate = updateCheckManager.readLastUpdated( metadata, localRepo, new File( dir, path ) );
assertNotNull( checkDate );
assertTrue( checkDate.after( start ) );
@@ -426,13 +426,13 @@
RepositoryMetadataManager mgr = new DefaultRepositoryMetadataManager( wagonManager, updateCheckManager, logger );
mgr.resolve( metadata, Collections.singletonList( remoteRepo ), localRepo );
- Date checkDate = updateCheckManager.getLastModifiedFromTouchfile( new File( dir, path ), remoteRepo.getId() );
+ Date checkDate = updateCheckManager.readLastUpdated( metadata, remoteRepo, new File( dir, path ) );
assertNotNull( checkDate );
mgr.resolve( metadata, Collections.singletonList( remoteRepo ), localRepo );
- checkDate = updateCheckManager.getLastModifiedFromTouchfile( new File( dir, path ), remoteRepo.getId() );
+ checkDate = updateCheckManager.readLastUpdated( metadata, remoteRepo, new File( dir, path ) );
assertNotNull( checkDate );