</dependency>
<!-- test dependencies -->
- <!--dependency>
+ <dependency>
<groupId>hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>test</scope>
- </dependency-->
+ </dependency>
</dependencies>
</project>
if ( !dir.isDirectory() )
{
- throw new RepositoryPurgeException( "Parent file " + dir.getPath() + " is not a directory." );
+ System.out.println( "File is not a directory." );
}
File[] files = dir.listFiles( filter );
throws RepositoryIndexException
{
List records = new ArrayList();
-
+
for ( int i = 0; i < artifactFiles.length; i++ )
{
artifactFiles[i].delete();
ArchivaArtifact queriedArtifact = artifactDao.getArtifact( artifact.getGroupId(), artifact.getArtifactId(),
artifact.getVersion(), artifact.getClassifier(),
artifact.getType() );
-
+
artifactDao.deleteArtifact( queriedArtifact );
}
catch ( ArchivaDatabaseException ae )
}
}
- protected void updateMetadata()
- {
-
- }
-
/**
* Get the artifactId, version, extension and classifier from the path parameter
*
{
try
{
+ File artifactFile = new File( getRepository().getUrl().getPath(), path );
+
+ if( !artifactFile.exists() )
+ {
+ return;
+ }
+
FilenameParts parts = getFilenameParts( path );
if ( VersionUtil.isSnapshot( parts.version ) )
Calendar olderThanThisDate = new GregorianCalendar();
olderThanThisDate.add( Calendar.DATE, ( -1 * repoConfig.getDaysOlder() ) );
- File artifactFile = new File( getRepository().getUrl().getPath(), path );
-
if ( artifactFile.lastModified() < olderThanThisDate.getTimeInMillis() )
{
String[] fileParts = artifactFile.getName().split( "." + parts.extension );
throw new RepositoryPurgeException( re.getMessage() );
}
}
-
+
}
--- /dev/null
+package org.apache.maven.archiva.consumers.core.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.model.ArchivaRepositoryMetadata;
+import org.apache.maven.archiva.repository.layout.FilenameParts;
+import org.apache.maven.archiva.repository.layout.LayoutException;
+import org.apache.maven.archiva.repository.metadata.RepositoryMetadataReader;
+import org.apache.maven.archiva.repository.metadata.RepositoryMetadataWriter;
+import org.apache.maven.archiva.repository.metadata.RepositoryMetadataException;
+import org.apache.maven.archiva.indexer.RepositoryIndexException;
+import org.apache.maven.archiva.common.utils.VersionUtil;
+import org.apache.maven.archiva.common.utils.VersionComparator;
+import org.apache.commons.io.FileUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Date;
+
+/**
+ * M2 implementation for cleaning up the released snapshots.
+ *
+ * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
+ */
+public class DefaultCleanupReleasedSnapshots
+ extends AbstractRepositoryPurge
+{
+ public static final String SNAPSHOT = "-SNAPSHOT";
+
+ private RepositoryMetadataReader metadataReader;
+
+ public DefaultCleanupReleasedSnapshots()
+ {
+ metadataReader = new RepositoryMetadataReader();
+ }
+
+ public void process( String path, Configuration configuration )
+ throws RepositoryPurgeException
+ {
+ try
+ {
+ File artifactFile = new File( getRepository().getUrl().getPath(), path );
+
+ if ( !artifactFile.exists() )
+ {
+ return;
+ }
+
+ FilenameParts parts = getFilenameParts( path );
+
+ if ( VersionUtil.isSnapshot( parts.version ) )
+ {
+ // version
+ File versionDir = artifactFile.getParentFile();
+
+ // artifactID - scan for other versions
+ File artifactIdDir = versionDir.getParentFile();
+
+ boolean updated = false;
+
+ List versions = getVersionsInDir( artifactIdDir );
+ Collections.sort( versions, VersionComparator.getInstance() );
+ for ( int j = 0; j < versions.size(); j++ )
+ {
+ String version = (String) versions.get( j );
+
+ if ( VersionComparator.getInstance().compare( version, versionDir.getName() ) > 0 )
+ {
+ purge( versionDir.listFiles() );
+
+ FileUtils.deleteDirectory( versionDir );
+
+ updated = true;
+
+ break;
+ }
+ }
+
+ if ( updated )
+ {
+ updateMetadata( artifactIdDir );
+ }
+ }
+ }
+ catch ( LayoutException le )
+ {
+ throw new RepositoryPurgeException( le.getMessage() );
+ }
+ catch ( IOException ie )
+ {
+ throw new RepositoryPurgeException( ie.getMessage() );
+ }
+ catch ( RepositoryIndexException re )
+ {
+ throw new RepositoryPurgeException( re.getMessage() );
+ }
+ }
+
+ private void updateMetadata( File artifactIdDir )
+ throws RepositoryPurgeException
+ {
+
+ File[] metadataFiles = getFiles( artifactIdDir, "maven-metadata" );
+ List availableVersions = getVersionsInDir( artifactIdDir );
+
+ Collections.sort( availableVersions );
+
+ String latestReleased = getLatestReleased( availableVersions );
+ for ( int i = 0; i < metadataFiles.length; i++ )
+ {
+ if ( !( metadataFiles[i].getName().toUpperCase() ).endsWith( "SHA1" ) &&
+ !( metadataFiles[i].getName().toUpperCase() ).endsWith( "MD5" ) )
+ {
+ try
+ {
+ Date lastUpdated = new Date();
+ ArchivaRepositoryMetadata metadata = metadataReader.read( metadataFiles[i] );
+ metadata.setAvailableVersions( availableVersions );
+ metadata.setLatestVersion( (String) availableVersions.get( availableVersions.size() - 1 ) );
+ metadata.setReleasedVersion( latestReleased );
+ metadata.setLastUpdatedTimestamp( lastUpdated );
+ metadata.setLastUpdated( Long.toString( lastUpdated.getTime() ) );
+
+ RepositoryMetadataWriter.write( metadata, metadataFiles[i] );
+ }
+ catch ( RepositoryMetadataException rme )
+ {
+ System.out.println( "Error updating metadata " + metadataFiles[i].getAbsoluteFile() );
+ }
+ }
+ }
+ }
+
+ private String getLatestReleased( List availableVersions )
+ {
+ List reversedOrder = new ArrayList( availableVersions );
+ Collections.reverse( reversedOrder );
+ String latestReleased = "";
+
+ for ( Iterator iter = reversedOrder.iterator(); iter.hasNext(); )
+ {
+ String version = (String) iter.next();
+ if ( !VersionUtil.getBaseVersion( version ).endsWith( SNAPSHOT ) )
+ {
+ latestReleased = version;
+ return latestReleased;
+ }
+ }
+
+ return latestReleased;
+ }
+
+ private List getVersionsInDir( File artifactIdDir )
+ {
+ String[] versionsAndMore = artifactIdDir.list();
+ List versions = new ArrayList();
+ for ( int j = 0; j < versionsAndMore.length; j++ )
+ {
+ if ( VersionUtil.isVersion( versionsAndMore[j] ) )
+ {
+ versions.add( versionsAndMore[j] );
+ }
+ }
+
+ return versions;
+ }
+
+}
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.FileTypes;
+import org.apache.maven.archiva.configuration.RepositoryConfiguration;
import org.apache.maven.archiva.database.ArchivaDAO;
import org.apache.maven.archiva.indexer.RepositoryContentIndexFactory;
import org.apache.maven.archiva.indexer.RepositoryContentIndex;
*/
private BidirectionalRepositoryLayoutFactory layoutFactory;
- private ArchivaRepository repository;
-
- private BidirectionalRepositoryLayout repositoryLayout;
-
- private List includes = new ArrayList();
-
- private List propertyNameTriggers = new ArrayList();
-
- private RepositoryPurge repoPurge;
-
- private RepositoryContentIndex index;
-
/**
* @plexus.requirement role-hint="lucene"
*/
*/
private FileTypes filetypes;
+ private ArchivaRepository repository;
+
+ private BidirectionalRepositoryLayout repositoryLayout;
+
+ private List includes = new ArrayList();
+
+ private List propertyNameTriggers = new ArrayList();
+
+ private RepositoryPurge repoPurge;
+
+ private RepositoryContentIndex index;
+
+ private RepositoryPurge cleanUp;
+
public String getId()
{
return this.id;
"Unable to initialize consumer due to unknown repository layout: " + e.getMessage(), e );
}
- // @todo check the repo configuration first which purge was set by the user
- // temporarily default to DaysOldRepositoryPurge
- repoPurge = new DaysOldRepositoryPurge();
+ // @todo handle better injection of RepositoryPurge
+ RepositoryConfiguration repoConfig = configuration.getConfiguration().findRepositoryById( repository.getId() );
+ if ( repoConfig.getDaysOlder() != 0 )
+ {
+ repoPurge = new DaysOldRepositoryPurge();
+ }
+ else
+ {
+ repoPurge = new RetentionCountRepositoryPurge();
+ }
+
repoPurge.setLayout( repositoryLayout );
repoPurge.setRepository( repository );
repoPurge.setIndex( index );
repoPurge.setArtifactDao( dao.getArtifactDAO() );
+
+ cleanUp = new DefaultCleanupReleasedSnapshots();
+ cleanUp.setRepository( repository );
+ cleanUp.setLayout( repositoryLayout );
+ cleanUp.setArtifactDao( dao.getArtifactDAO() );
+ cleanUp.setIndex( index );
}
public void processFile( String path )
{
try
{
- repoPurge.process( path, configuration.getConfiguration() );
+ cleanUp.process( path, configuration.getConfiguration() );
+ repoPurge.process( path, configuration.getConfiguration() );
}
catch ( RepositoryPurgeException rpe )
{
throws RepositoryPurgeException
{
try
- {
+ {
+ File artifactFile = new File( getRepository().getUrl().getPath(), path );
+
+ if( !artifactFile.exists() )
+ {
+ return;
+ }
+
FilenameParts parts = getFilenameParts( path );
if ( VersionUtil.isSnapshot( parts.version ) )
{
- RepositoryConfiguration repoConfig = configuration.findRepositoryById( getRepository().getId() );
- File artifactFile = new File( getRepository().getUrl().getPath(), path );
+ RepositoryConfiguration repoConfig = configuration.findRepositoryById( getRepository().getId() );
File parentDir = artifactFile.getParentFile();
if ( parentDir.isDirectory() )
--- /dev/null
+package org.apache.maven.archiva.consumers.core.repository;
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.jdo.DefaultConfigurableJdoFactory;
+import org.codehaus.plexus.jdo.JdoFactory;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.model.ArchivaRepository;
+import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
+import org.apache.maven.archiva.repository.layout.LayoutException;
+import org.apache.maven.archiva.repository.layout.DefaultBidirectionalRepositoryLayout;
+import org.apache.maven.archiva.database.ArchivaDAO;
+import org.apache.maven.archiva.database.ArtifactDAO;
+import org.jpox.SchemaTool;
+
+import javax.jdo.PersistenceManagerFactory;
+import javax.jdo.PersistenceManager;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Properties;
+import java.util.Iterator;
+import java.util.Map;
+import java.net.URL;
+import java.io.File;
+
+/**
+ * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
+ */
+public class AbstractRepositoryPurgeTest
+ extends PlexusTestCase
+{
+ public static final String TEST_REPO_ID = "test-repo";
+
+ public static final String TEST_REPO_NAME = "Test Repository";
+
+ public static final String TEST_REPO_URL = "file://" + getBasedir() + "/target/test-classes/test-repo/";
+
+ public static final int TEST_RETENTION_COUNT = 2;
+
+ public static final int TEST_DAYS_OLDER = 30;
+
+ private Configuration config;
+
+ private ArchivaRepository repo;
+
+ private BidirectionalRepositoryLayout layout;
+
+ protected ArtifactDAO dao;
+
+ protected RepositoryPurge repoPurge;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ DefaultConfigurableJdoFactory jdoFactory = (DefaultConfigurableJdoFactory) lookup( JdoFactory.ROLE, "archiva" );
+ assertEquals( DefaultConfigurableJdoFactory.class.getName(), jdoFactory.getClass().getName() );
+
+ jdoFactory.setPersistenceManagerFactoryClass( "org.jpox.PersistenceManagerFactoryImpl" );
+
+ jdoFactory.setDriverName( System.getProperty( "jdo.test.driver", "org.hsqldb.jdbcDriver" ) );
+ jdoFactory.setUrl( System.getProperty( "jdo.test.url", "jdbc:hsqldb:mem:testdb" ) );
+
+ jdoFactory.setUserName( System.getProperty( "jdo.test.user", "sa" ) );
+
+ jdoFactory.setPassword( System.getProperty( "jdo.test.pass", "" ) );
+
+ jdoFactory.setProperty( "org.jpox.transactionIsolation", "READ_COMMITTED" );
+
+ jdoFactory.setProperty( "org.jpox.poid.transactionIsolation", "READ_COMMITTED" );
+
+ jdoFactory.setProperty( "org.jpox.autoCreateSchema", "true" );
+
+ jdoFactory.setProperty( "javax.jdo.option.RetainValues", "true" );
+
+ jdoFactory.setProperty( "javax.jdo.option.RestoreValues", "true" );
+
+ // jdoFactory.setProperty( "org.jpox.autoCreateColumns", "true" );
+
+ jdoFactory.setProperty( "org.jpox.validateTables", "true" );
+
+ jdoFactory.setProperty( "org.jpox.validateColumns", "true" );
+
+ jdoFactory.setProperty( "org.jpox.validateConstraints", "true" );
+
+ Properties properties = jdoFactory.getProperties();
+
+ for ( Iterator it = properties.entrySet().iterator(); it.hasNext(); )
+ {
+ Map.Entry entry = (Map.Entry) it.next();
+
+ System.setProperty( (String) entry.getKey(), (String) entry.getValue() );
+ }
+
+ URL jdoFileUrls[] = new URL[]{getClass().getResource( "/org/apache/maven/archiva/model/package.jdo" )};
+
+ if ( ( jdoFileUrls == null ) || ( jdoFileUrls[0] == null ) )
+ {
+ fail( "Unable to process test " + getName() + " - missing package.jdo." );
+ }
+
+ File propsFile = null; // intentional
+ boolean verbose = true;
+
+ SchemaTool.deleteSchemaTables( jdoFileUrls, new URL[]{}, propsFile, verbose );
+ SchemaTool.createSchemaTables( jdoFileUrls, new URL[]{}, propsFile, verbose, null );
+
+ PersistenceManagerFactory pmf = jdoFactory.getPersistenceManagerFactory();
+
+ assertNotNull( pmf );
+
+ PersistenceManager pm = pmf.getPersistenceManager();
+
+ pm.close();
+
+ dao = (ArtifactDAO) lookup( ArtifactDAO.class.getName(), "jdo" );
+ }
+
+ public void lookupRepositoryPurge( String role )
+ throws Exception
+ {
+ repoPurge = (RepositoryPurge) lookup( RepositoryPurge.class.getName(), role );
+
+ repoPurge.setArtifactDao( dao );
+
+ repoPurge.setRepository( getRepository() );
+
+ repoPurge.setLayout( getLayout() );
+ }
+
+ public Configuration getRepoConfiguration()
+ {
+ if ( config == null )
+ {
+ config = new Configuration();
+ }
+
+ RepositoryConfiguration repoConfig = new RepositoryConfiguration();
+ repoConfig.setId( TEST_REPO_ID );
+ repoConfig.setName( TEST_REPO_NAME );
+ repoConfig.setDaysOlder( TEST_DAYS_OLDER );
+ repoConfig.setUrl( TEST_REPO_URL );
+ repoConfig.setReleases( true );
+ repoConfig.setSnapshots( true );
+ repoConfig.setRetentionCount( TEST_RETENTION_COUNT );
+
+ List repos = new ArrayList();
+ repos.add( repoConfig );
+
+ config.setRepositories( repos );
+
+ return config;
+ }
+
+ public ArchivaRepository getRepository()
+ {
+ if ( repo == null )
+ {
+ repo = new ArchivaRepository( TEST_REPO_ID, TEST_REPO_NAME, TEST_REPO_URL );
+ }
+
+ return repo;
+ }
+
+ public BidirectionalRepositoryLayout getLayout()
+ throws LayoutException
+ {
+ if ( layout == null )
+ {
+ layout = new DefaultBidirectionalRepositoryLayout();
+ }
+
+ return layout;
+ }
+}
--- /dev/null
+package org.apache.maven.archiva.consumers.core.repository;
+
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.jdo.DefaultConfigurableJdoFactory;
+import org.codehaus.plexus.jdo.JdoFactory;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.model.ArchivaRepository;
+import org.apache.maven.archiva.model.ArchivaArtifactModel;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.database.ArtifactDAO;
+import org.apache.maven.archiva.database.ArchivaDAO;
+import org.apache.maven.archiva.database.jdo.JdoAccess;
+
+import javax.jdo.JDOFatalUserException;
+import javax.jdo.JDOHelper;
+import javax.jdo.spi.JDOImplHelper;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Date;
+import java.io.File;
+
+
+/**
+ * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
+ */
+public class DaysOldRepositoryPurgeTest
+ extends AbstractRepositoryPurgeTest
+{
+ public static final String PATH_TO_BY_DAYS_OLD_ARTIFACT =
+ "org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-SNAPSHOT.jar";
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ lookupRepositoryPurge( "days-old" );
+ }
+
+ private void setLastModified()
+ {
+ File dir =
+ new File( "target/test-classes/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/" );
+ File[] contents = dir.listFiles();
+ for ( int i = 0; i < contents.length; i++ )
+ {
+ contents[i].setLastModified( 1179382029 );
+ }
+ }
+
+ public void testIfAJarIsFound()
+ throws Exception
+ {
+ // Create it
+ ArchivaArtifact artifact =
+ dao.createArtifact( "org.apache.maven.plugins", "maven-install-plugin", "2.2-SNAPSHOT", "", "jar" );
+ assertNotNull( artifact );
+
+ artifact.getModel().setLastModified( new Date() );
+ artifact.getModel().setOrigin( "test" );
+
+ // Save it.
+ ArchivaArtifact savedArtifact = dao.saveArtifact( artifact );
+ assertNotNull( savedArtifact );
+
+ setLastModified();
+
+ repoPurge.process( PATH_TO_BY_DAYS_OLD_ARTIFACT, getRepoConfiguration() );
+
+ assertTrue( true );
+
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-SNAPSHOT.jar" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-SNAPSHOT.jar.md5" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-SNAPSHOT.jar.sha1" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-SNAPSHOT.pom" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-SNAPSHOT.pom.md5" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-SNAPSHOT.pom.sha1" ).exists() );
+ }
+
+ protected void tearDown()
+ throws Exception
+ {
+ super.tearDown();
+ repoPurge = null;
+ }
+}
--- /dev/null
+package org.apache.maven.archiva.consumers.core.repository;
+
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+
+import org.apache.maven.archiva.model.ArchivaArtifact;
+
+import java.io.File;
+import java.util.Date;
+
+/**
+ * Test RetentionsCountRepositoryPurgeTest
+ *
+ * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
+ */
+public class RetentionCountRepositoryPurgeTest
+ extends AbstractRepositoryPurgeTest
+{
+
+ public static final String PATH_TO_BY_RETENTION_COUNT_ARTIFACT =
+ "org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.153317-1.jar";
+
+ public static final String PATH_TO_BY_RETENTION_COUNT_POM =
+ "org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2.pom";
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ lookupRepositoryPurge( "retention-count" );
+ }
+
+ /**
+ * Test if the artifact to be processed was a jar.
+ *
+ * @throws Exception
+ */
+ public void testIfAJarWasFound()
+ throws Exception
+ {
+ // Create it
+ ArchivaArtifact artifact =
+ dao.createArtifact( "org.jruby.plugins", "jruby-rake-plugin", "1.0RC1-20070504.153317-1", "", "jar" );
+ assertNotNull( artifact );
+
+ artifact.getModel().setLastModified( new Date() );
+ artifact.getModel().setOrigin( "test" );
+
+ // Save it.
+ ArchivaArtifact savedArtifact = dao.saveArtifact( artifact );
+ assertNotNull( savedArtifact );
+
+ //POM
+ artifact =
+ dao.createArtifact( "org.jruby.plugins", "jruby-rake-plugin", "1.0RC1-20070504.153317-1", "", "pom" );
+ assertNotNull( artifact );
+ artifact.getModel().setLastModified( new Date() );
+ artifact.getModel().setOrigin( "test" );
+ savedArtifact = dao.saveArtifact( artifact );
+ assertNotNull( savedArtifact );
+
+ //JAR
+ artifact =
+ dao.createArtifact( "org.jruby.plugins", "jruby-rake-plugin", "1.0RC1-20070504.160758-2", "", "jar" );
+ assertNotNull( artifact );
+ artifact.getModel().setLastModified( new Date() );
+ artifact.getModel().setOrigin( "test" );
+ savedArtifact = dao.saveArtifact( artifact );
+ assertNotNull( savedArtifact );
+
+ //POM
+ artifact =
+ dao.createArtifact( "org.jruby.plugins", "jruby-rake-plugin", "1.0RC1-20070504.160758-2", "", "pom" );
+ assertNotNull( artifact );
+ artifact.getModel().setLastModified( new Date() );
+ artifact.getModel().setOrigin( "test" );
+ savedArtifact = dao.saveArtifact( artifact );
+ assertNotNull( savedArtifact );
+
+ //JAR
+ artifact =
+ dao.createArtifact( "org.jruby.plugins", "jruby-rake-plugin", "1.0RC1-20070505.090015-3", "", "jar" );
+ assertNotNull( artifact );
+ artifact.getModel().setLastModified( new Date() );
+ artifact.getModel().setOrigin( "test" );
+ savedArtifact = dao.saveArtifact( artifact );
+ assertNotNull( savedArtifact );
+
+ //POM
+ artifact =
+ dao.createArtifact( "org.jruby.plugins", "jruby-rake-plugin", "1.0RC1-20070505.090015-3", "", "pom" );
+ assertNotNull( artifact );
+ artifact.getModel().setLastModified( new Date() );
+ artifact.getModel().setOrigin( "test" );
+ savedArtifact = dao.saveArtifact( artifact );
+ assertNotNull( savedArtifact );
+
+ //JAR
+ artifact =
+ dao.createArtifact( "org.jruby.plugins", "jruby-rake-plugin", "1.0RC1-20070506.090132-4", "", "jar" );
+ assertNotNull( artifact );
+ artifact.getModel().setLastModified( new Date() );
+ artifact.getModel().setOrigin( "test" );
+ savedArtifact = dao.saveArtifact( artifact );
+ assertNotNull( savedArtifact );
+
+ //POM
+ artifact =
+ dao.createArtifact( "org.jruby.plugins", "jruby-rake-plugin", "1.0RC1-20070506.090132-4", "", "pom" );
+ assertNotNull( artifact );
+ artifact.getModel().setLastModified( new Date() );
+ artifact.getModel().setOrigin( "test" );
+ savedArtifact = dao.saveArtifact( artifact );
+ assertNotNull( savedArtifact );
+
+ repoPurge.process( PATH_TO_BY_RETENTION_COUNT_ARTIFACT, getRepoConfiguration() );
+
+ // assert if removed from repo
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.153317-1.jar" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.153317-1.jar.md5" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.153317-1.jar.sha1" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.153317-1.pom" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.153317-1.pom.md5" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.153317-1.pom.sha1" ).exists() );
+
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.160758-2.jar" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.160758-2.jar.md5" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.160758-2.jar.sha1" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.160758-2.pom" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.160758-2.pom.md5" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.160758-2.pom.sha1" ).exists() );
+
+ // assert if not removed from repo
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070505.090015-3.jar" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070505.090015-3.jar.md5" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070505.090015-3.jar.sha1" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070505.090015-3.pom" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070505.090015-3.pom.md5" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070505.090015-3.pom.sha1" ).exists() );
+
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070506.090132-4.jar" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070506.090132-4.jar.md5" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070506.090132-4.jar.sha1" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070506.090132-4.pom" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070506.090132-4.pom.md5" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070506.090132-4.pom.sha1" ).exists() );
+ }
+
+ /**
+ * Test if the artifact to be processed is a pom
+ *
+ * @throws Exception
+ */
+ public void testIfAPomWasFound()
+ throws Exception
+ {
+ // Create it
+ ArchivaArtifact artifact =
+ dao.createArtifact( "org.codehaus.castor", "castor-anttasks", "1.1.2-20070427.065136-1", "", "jar" );
+ assertNotNull( artifact );
+ artifact.getModel().setLastModified( new Date() );
+ artifact.getModel().setOrigin( "test" );
+ ArchivaArtifact savedArtifact = dao.saveArtifact( artifact );
+ assertNotNull( savedArtifact );
+
+ //POM
+ artifact = dao.createArtifact( "org.codehaus.castor", "castor-anttasks", "1.1.2-20070427.065136-1", "", "pom" );
+ assertNotNull( artifact );
+ artifact.getModel().setLastModified( new Date() );
+ artifact.getModel().setOrigin( "test" );
+ savedArtifact = dao.saveArtifact( artifact );
+ assertNotNull( savedArtifact );
+
+ //JAR
+ artifact = dao.createArtifact( "org.codehaus.castor", "castor-anttasks", "1.1.2-20070615.105019-3", "", "jar" );
+ assertNotNull( artifact );
+ artifact.getModel().setLastModified( new Date() );
+ artifact.getModel().setOrigin( "test" );
+ savedArtifact = dao.saveArtifact( artifact );
+ assertNotNull( savedArtifact );
+
+ //POM
+ artifact = dao.createArtifact( "org.codehaus.castor", "castor-anttasks", "1.1.2-20070615.105019-3", "", "pom" );
+ assertNotNull( artifact );
+ artifact.getModel().setLastModified( new Date() );
+ artifact.getModel().setOrigin( "test" );
+ savedArtifact = dao.saveArtifact( artifact );
+ assertNotNull( savedArtifact );
+
+ //JAR
+ artifact = dao.createArtifact( "org.codehaus.castor", "castor-anttasks", "1.1.2-20070506.163513-2", "", "jar" );
+ assertNotNull( artifact );
+ artifact.getModel().setLastModified( new Date() );
+ artifact.getModel().setOrigin( "test" );
+
+ savedArtifact = dao.saveArtifact( artifact );
+ assertNotNull( savedArtifact );
+
+ //POM
+ artifact = dao.createArtifact( "org.codehaus.castor", "castor-anttasks", "1.1.2-20070506.163513-2", "", "pom" );
+ assertNotNull( artifact );
+ artifact.getModel().setLastModified( new Date() );
+ artifact.getModel().setOrigin( "test" );
+ savedArtifact = dao.saveArtifact( artifact );
+ assertNotNull( savedArtifact );
+
+ repoPurge.process( PATH_TO_BY_RETENTION_COUNT_POM, getRepoConfiguration() );
+
+ // assert if removed from repo
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070427.065136-1.jar" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070427.065136-1.jar.md5" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070427.065136-1.jar.sha1" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070427.065136-1.pom" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070427.065136-1.pom.md5" ).exists() );
+ assertFalse( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070427.065136-1.pom.sha1" ).exists() );
+
+ // assert if not removed from repo
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3.pom" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3.pom.md5" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3.pom.sha1" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3.jar" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3.jar.md5" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3.jar.sha1" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3-sources.jar" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3-sources.jar.md5" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3-sources.jar.sha1" ).exists() );
+
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2.pom" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2.pom.md5" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2.pom.sha1" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2.jar" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2.jar.md5" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2.jar.sha1" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2-sources.jar" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2-sources.jar.md5" ).exists() );
+ assertTrue( new File(
+ "target/test-classes/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2-sources.jar.sha1" ).exists() );
+ }
+}
<role>org.apache.maven.archiva.consumers.core.repository.RepositoryPurge</role>
<role-hint>days-old</role-hint>
<implementation>org.apache.maven.archiva.consumers.core.repository.DaysOldRepositoryPurge</implementation>
- <requirements>
+ <!--requirements>
<requirement>
<role>org.apache.maven.archiva.database.ArchivaDAO</role>
<role-hint>jdo</role-hint>
<role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
<role-hint>lucene</role-hint>
</requirement>
- </requirements>
+ </requirements-->
</component>
<!-- LuceneRepositoryContentIndexFactory -->
<role>org.apache.maven.archiva.consumers.core.repository.RepositoryPurge</role>
<role-hint>retention-count</role-hint>
<implementation>org.apache.maven.archiva.consumers.core.repository.RetentionCountRepositoryPurge</implementation>
- <requirements>
+ <!--requirements>
<requirement>
<role>org.apache.maven.archiva.database.ArchivaDAO</role>
<role-hint>jdo</role-hint>
<role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
<role-hint>lucene</role-hint>
</requirement>
- </requirements>
+ </requirements-->
</component>
<!-- LuceneRepositoryContentIndexFactory -->