You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by oc...@apache.org on 2007/08/04 23:46:36 UTC

svn commit: r562766 [1/3] - in /maven/archiva/trunk/archiva-base: archiva-configuration/src/main/mdo/ archiva-configuration/src/main/resources/org/apache/maven/archiva/configuration/ archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven...

Author: oching
Date: Sat Aug  4 14:46:32 2007
New Revision: 562766

URL: http://svn.apache.org/viewvc?view=rev&rev=562766
Log:
[MRM-294] Repository purge
- Added RepositoryPurgeConsumer
- Added these other classes used in repo purge: DaysOldRepositoryPurge, RetentionCountRepositoryPurge, ArtifactFilenameFilter and 
RepositoryPurgeException
- Added tests and test data
- Added new fields in configuration.mdo (daysOlder and retentionCount)
- Added repository-purge as a consumer in default-archiva.xml (but currently commented out)


Added:
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/AbstractRepositoryPurge.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/ArtifactFilenameFilter.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurge.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurge.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumer.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeException.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurge.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/conf/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/conf/repository-manager.xml
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.xml
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.xml
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.jar   (with props)
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.jar.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.jar.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.pom
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.pom.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.pom.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20070513.034619-5.jar   (with props)
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20070513.034619-5.jar.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20070513.034619-5.jar.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20070513.034619-5.pom
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20070513.034619-5.pom.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20070513.034619-5.pom.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-SNAPSHOT.jar   (with props)
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-SNAPSHOT.jar.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-SNAPSHOT.jar.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-SNAPSHOT.pom
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-SNAPSHOT.pom.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-SNAPSHOT.pom.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-metadata-local.xml
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070427.065136-1.jar   (with props)
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070427.065136-1.jar.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070427.065136-1.jar.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070427.065136-1.pom
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070427.065136-1.pom.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070427.065136-1.pom.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2-sources.jar   (with props)
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2-sources.jar.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2-sources.jar.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2.jar   (with props)
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2.jar.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2.jar.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2.pom
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2.pom.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070506.163513-2.pom.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3-sources.jar   (with props)
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3-sources.jar.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3-sources.jar.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3.jar   (with props)
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3.jar.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3.jar.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3.pom
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3.pom.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/codehaus/castor/castor-anttasks/1.1.2-SNAPSHOT/castor-anttasks-1.1.2-20070615.105019-3.pom.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.153317-1.jar   (with props)
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.153317-1.jar.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.153317-1.jar.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.153317-1.pom
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.153317-1.pom.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.153317-1.pom.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.160758-2.jar   (with props)
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.160758-2.jar.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.160758-2.jar.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.160758-2.pom
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.160758-2.pom.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070504.160758-2.pom.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070505.090015-3.jar   (with props)
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070505.090015-3.jar.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070505.090015-3.jar.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070505.090015-3.pom
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070505.090015-3.pom.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070505.090015-3.pom.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070506.090132-4.jar   (with props)
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070506.090132-4.jar.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070506.090132-4.jar.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070506.090132-4.pom
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070506.090132-4.pom.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/jruby-rake-plugin-1.0RC1-20070506.090132-4.pom.sha1
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/maven-metadata.xml
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/maven-metadata.xml.md5
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/jruby/plugins/jruby-rake-plugin/1.0RC1-SNAPSHOT/maven-metadata.xml.sha1
Modified:
    maven/archiva/trunk/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
    maven/archiva/trunk/archiva-base/archiva-configuration/src/main/resources/org/apache/maven/archiva/configuration/default-archiva.xml
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/RepositoryContentConsumer.java
    maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml

Modified: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo?view=diff&rev=562766&r1=562765&r2=562766
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo (original)
+++ maven/archiva/trunk/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo Sat Aug  4 14:46:32 2007
@@ -268,6 +268,24 @@
           </description>
           <defaultValue>0 0 * * * ?</defaultValue>
         </field>
+        <field>
+          <name>retentionCount</name>
+          <version>1.0.0+</version>
+          <type>int</type>
+          <description>
+          	The total count of the artifact to be retained for each snapshot.
+          </description>
+          <defaultValue>2</defaultValue>
+        </field>
+        <field>
+          <name>daysOlder</name>
+          <version>1.0.0+</version>
+          <type>int</type>
+          <description>
+          	The number of days old which will be the basis for removing a snapshot.
+          </description>
+          <defaultValue>100</defaultValue>
+        </field>
       </fields>
       <codeSegments>
         <codeSegment>

Modified: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/resources/org/apache/maven/archiva/configuration/default-archiva.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-configuration/src/main/resources/org/apache/maven/archiva/configuration/default-archiva.xml?view=diff&rev=562766&r1=562765&r2=562766
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-configuration/src/main/resources/org/apache/maven/archiva/configuration/default-archiva.xml (original)
+++ maven/archiva/trunk/archiva-base/archiva-configuration/src/main/resources/org/apache/maven/archiva/configuration/default-archiva.xml Sat Aug  4 14:46:32 2007
@@ -11,6 +11,7 @@
       <snapshots>false</snapshots>
       <indexed>true</indexed>
       <refreshCronExpression>0 0 0 * * ?</refreshCronExpression>
+      <daysOlder>30</daysOlder>
     </repository>
     <repository>
       <id>snapshots</id>
@@ -21,6 +22,7 @@
       <snapshots>true</snapshots>
       <indexed>true</indexed>
       <refreshCronExpression>0 0,30 0 * * ?</refreshCronExpression>
+      <daysOlder>30</daysOlder>
     </repository>
     <repository>
       <id>central</id>
@@ -136,6 +138,7 @@
       <knownContentConsumer>index-content</knownContentConsumer>
       <knownContentConsumer>auto-remove</knownContentConsumer>
       <knownContentConsumer>auto-rename</knownContentConsumer>
+      <!--knownContentConsumer>repository-purge</knownContentConsumer-->
     </knownContentConsumers>
     <invalidContentConsumers>
       <invalidContentConsumer>update-db-bad-content</invalidContentConsumer>

Modified: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/RepositoryContentConsumer.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/RepositoryContentConsumer.java?view=diff&rev=562766&r1=562765&r2=562766
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/RepositoryContentConsumer.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/RepositoryContentConsumer.java Sat Aug  4 14:46:32 2007
@@ -83,7 +83,7 @@
      * </p>
      * 
      * <p>
-     * NOTE: If the consumer opted to batch up processing requests in the {@link #processFile(BaseFile)} event
+     * NOTE: If the consumer opted to batch up processing requests in the {@link #processFile(String)} event
      * this would be the last opportunity to drain any processing queue's.
      * </p>
      */

Modified: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml?view=diff&rev=562766&r1=562765&r2=562766
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml (original)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml Sat Aug  4 14:46:32 2007
@@ -31,6 +31,14 @@
   <dependencies>
     <dependency>
       <groupId>org.apache.maven.archiva</groupId>
+      <artifactId>archiva-database</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.archiva</groupId>
+      <artifactId>archiva-indexer</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.archiva</groupId>
       <artifactId>archiva-configuration</artifactId>
     </dependency>
     <dependency>
@@ -45,5 +53,12 @@
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-digest</artifactId>
     </dependency>
+
+    <!-- test dependencies -->
+    <!--dependency>
+      <groupId>hsqldb</groupId>
+      <artifactId>hsqldb</artifactId>
+      <scope>test</scope>
+    </dependency-->
   </dependencies>
 </project>

Added: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/AbstractRepositoryPurge.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/AbstractRepositoryPurge.java?view=auto&rev=562766
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/AbstractRepositoryPurge.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/AbstractRepositoryPurge.java Sat Aug  4 14:46:32 2007
@@ -0,0 +1,185 @@
+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.ArchivaRepository;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.repository.layout.FilenameParts;
+import org.apache.maven.archiva.repository.layout.RepositoryLayoutUtils;
+import org.apache.maven.archiva.repository.layout.LayoutException;
+import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
+import org.apache.maven.archiva.database.ArchivaDatabaseException;
+import org.apache.maven.archiva.database.ArtifactDAO;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
+import org.apache.maven.archiva.indexer.RepositoryIndexException;
+import org.apache.maven.archiva.indexer.filecontent.FileContentRecord;
+import org.apache.commons.lang.StringUtils;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
+ */
+public abstract class AbstractRepositoryPurge
+    implements RepositoryPurge
+{
+    private ArchivaRepository repository;
+
+    private BidirectionalRepositoryLayout layout;
+
+    private RepositoryContentIndex index;
+
+    private ArtifactDAO artifactDao;
+
+    /**
+     * Get all files from the directory that matches the specified filename.
+     *
+     * @param dir      the directory to be scanned
+     * @param filename the filename to be matched
+     * @return
+     */
+    protected File[] getFiles( File dir, String filename )
+        throws RepositoryPurgeException
+    {
+        FilenameFilter filter = new ArtifactFilenameFilter( filename );
+
+        if ( !dir.isDirectory() )
+        {
+            throw new RepositoryPurgeException( "Parent file " + dir.getPath() + " is not a directory." );
+        }
+
+        File[] files = dir.listFiles( filter );
+
+        return files;
+    }
+
+    public abstract void process( String path, Configuration configuration )
+        throws RepositoryPurgeException;
+
+    /**
+     * Purge the repo. Update db and index of removed artifacts.
+     *
+     * @param artifactFiles
+     * @throws RepositoryIndexException
+     */
+    protected void purge( File[] artifactFiles )
+        throws RepositoryIndexException
+    {
+        List records = new ArrayList();
+
+        for ( int i = 0; i < artifactFiles.length; i++ )
+        {
+            artifactFiles[i].delete();
+
+            String[] artifactPathParts = artifactFiles[i].getAbsolutePath().split( getRepository().getUrl().getPath() );
+            String artifactPath = artifactPathParts[artifactPathParts.length - 1];
+            if ( !artifactPath.toUpperCase().endsWith( "SHA1" ) && !artifactPath.toUpperCase().endsWith( "MD5" ) )
+            {
+                updateDatabase( artifactPath );
+            }
+
+            FileContentRecord record = new FileContentRecord();
+            record.setRepositoryId( this.repository.getId() );
+            record.setFilename( artifactPath );
+            records.add( record );
+        }
+
+        //index.deleteRecords( records );
+    }
+
+    private void updateDatabase( String path )
+    {
+        try
+        {
+            ArchivaArtifact artifact = layout.toArtifact( path );
+            ArchivaArtifact queriedArtifact = artifactDao.getArtifact( artifact.getGroupId(), artifact.getArtifactId(),
+                                                                       artifact.getVersion(), artifact.getClassifier(),
+                                                                       artifact.getType() );
+
+            artifactDao.deleteArtifact( queriedArtifact );
+        }
+        catch ( ArchivaDatabaseException ae )
+        {
+
+        }
+        catch ( LayoutException le )
+        {
+
+        }
+    }
+
+    protected void updateMetadata()
+    {
+
+    }
+
+    /**
+     * Get the artifactId, version, extension and classifier from the path parameter
+     *
+     * @param path
+     * @return
+     * @throws LayoutException
+     */
+    protected FilenameParts getFilenameParts( String path )
+        throws LayoutException
+    {
+        String normalizedPath = StringUtils.replace( path, "\\", "/" );
+        String pathParts[] = StringUtils.split( normalizedPath, '/' );
+
+        FilenameParts parts = RepositoryLayoutUtils.splitFilename( pathParts[pathParts.length - 1], null );
+
+        return parts;
+    }
+
+    public void setRepository( ArchivaRepository repository )
+    {
+        this.repository = repository;
+    }
+
+    public void setLayout( BidirectionalRepositoryLayout layout )
+    {
+        this.layout = layout;
+    }
+
+    public void setIndex( RepositoryContentIndex index )
+    {
+        this.index = index;
+    }
+
+    public void setArtifactDao( ArtifactDAO artifactDao )
+    {
+        this.artifactDao = artifactDao;
+    }
+
+    protected ArchivaRepository getRepository()
+    {
+        return repository;
+    }
+
+    protected BidirectionalRepositoryLayout getLayout()
+    {
+        return layout;
+    }
+
+}

Added: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/ArtifactFilenameFilter.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/ArtifactFilenameFilter.java?view=auto&rev=562766
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/ArtifactFilenameFilter.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/ArtifactFilenameFilter.java Sat Aug  4 14:46:32 2007
@@ -0,0 +1,50 @@
+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 java.io.FilenameFilter;
+import java.io.File;
+
+/**
+ * Filename filter for getting all the files related to a specific artifact.
+ *
+ * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
+ */
+public class ArtifactFilenameFilter
+    implements FilenameFilter
+{
+    private String filename;
+
+    public ArtifactFilenameFilter()
+    {
+
+    }
+
+    public ArtifactFilenameFilter( String filename )
+    {
+        this.filename = filename;
+    }
+
+    public boolean accept( File dir, String name )
+    {
+        return ( name.startsWith( filename ) );
+    }
+
+}

Added: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurge.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurge.java?view=auto&rev=562766
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurge.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurge.java Sat Aug  4 14:46:32 2007
@@ -0,0 +1,79 @@
+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.repository.layout.FilenameParts;
+import org.apache.maven.archiva.repository.layout.LayoutException;
+import org.apache.maven.archiva.common.utils.VersionUtil;
+import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.indexer.RepositoryIndexException;
+
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+import java.io.File;
+
+/**
+ * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
+ * @plexus.component role="org.apache.maven.archiva.consumers.core.repository.RepositoryPurge"
+ * role-hint="days-old"
+ * instantiation-strategy="per-lookup"
+ */
+public class DaysOldRepositoryPurge
+    extends AbstractRepositoryPurge
+{
+
+    public void process( String path, Configuration configuration )
+        throws RepositoryPurgeException
+    {
+        try
+        {
+            FilenameParts parts = getFilenameParts( path );
+
+            if ( VersionUtil.isSnapshot( parts.version ) )
+            {
+                RepositoryConfiguration repoConfig = configuration.findRepositoryById( getRepository().getId() );
+
+                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 );
+
+                    File[] artifactFiles = getFiles( artifactFile.getParentFile(), fileParts[0] );
+
+                    purge( artifactFiles );
+                }
+            }
+        }
+        catch ( LayoutException le )
+        {
+            throw new RepositoryPurgeException( le.getMessage() );
+        }
+        catch ( RepositoryIndexException re )
+        {
+            throw new RepositoryPurgeException( re.getMessage() );
+        }
+    }
+
+}

Added: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurge.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurge.java?view=auto&rev=562766
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurge.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurge.java Sat Aug  4 14:46:32 2007
@@ -0,0 +1,73 @@
+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.ArchivaRepository;
+import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
+import org.apache.maven.archiva.database.ArchivaDAO;
+import org.apache.maven.archiva.database.ArtifactDAO;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
+
+/**
+ *
+ * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
+ * @version
+ */
+public interface RepositoryPurge
+{
+    /**
+     * Perform checking on artifact for repository purge
+     *
+     * @param path          path to the scanned artifact
+     * @param configuration the configuration for the repository currently being scanned
+     */
+    public void process( String path, Configuration configuration )
+        throws RepositoryPurgeException;
+
+    /**
+     * Set the repository to be purged
+     *
+     * @param repository
+     */
+    public void setRepository( ArchivaRepository repository );
+
+    /**
+     * Set the layout of the repository to be purged
+     *
+     * @param layout
+     */
+    public void setLayout( BidirectionalRepositoryLayout layout );
+
+    /**
+     * Set the index of the repository 
+     *
+     * @param index
+     */
+    public void setIndex( RepositoryContentIndex index );
+
+    /**
+     * Set the artifact dao used for updating the database of the changes in the repo
+     *
+     * @param artifactDao
+     */
+    public void setArtifactDao( ArtifactDAO artifactDao );
+
+}

Added: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumer.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumer.java?view=auto&rev=562766
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumer.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumer.java Sat Aug  4 14:46:32 2007
@@ -0,0 +1,211 @@
+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.consumers.KnownRepositoryContentConsumer;
+import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
+import org.apache.maven.archiva.model.ArchivaRepository;
+import org.apache.maven.archiva.repository.layout.LayoutException;
+import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
+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.database.ArchivaDAO;
+import org.apache.maven.archiva.indexer.RepositoryContentIndexFactory;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
+import org.codehaus.plexus.registry.RegistryListener;
+import org.codehaus.plexus.registry.Registry;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * Consumer for removing old snapshots in the repository based on the criteria
+ * specified by the user.
+ *
+ * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
+ * @plexus.component role="org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer"
+ * role-hint="repository-purge"
+ * instantiation-strategy="per-lookup
+ */
+public class RepositoryPurgeConsumer
+    extends AbstractMonitoredConsumer
+    implements KnownRepositoryContentConsumer, RegistryListener, Initializable
+{
+    /**
+     * @plexus.configuration default-value="repository-purge"
+     */
+    private String id;
+
+    /**
+     * @plexus.configuration default-value="Purge repository of old snapshots"
+     */
+    private String description;
+
+    /**
+     * @plexus.requirement
+     */
+    private ArchivaConfiguration configuration;
+
+    /**
+     * @plexus.requirement
+     */
+    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 RepositoryContentIndexFactory indexFactory;
+
+    /**
+     * @plexus.requirement role-hint="jdo"
+     */
+    private ArchivaDAO dao;
+
+    /**
+     * @plexus.requirement
+     */
+    private FileTypes filetypes;
+
+    public String getId()
+    {
+        return this.id;
+    }
+
+    public String getDescription()
+    {
+        return this.description;
+    }
+
+    public boolean isPermanent()
+    {
+        return false;
+    }
+
+    public List getExcludes()
+    {
+        return null;
+    }
+
+    public List getIncludes()
+    {
+        return this.includes;
+    }
+
+    public void beginScan( ArchivaRepository repository )
+        throws ConsumerException
+    {
+        if ( !repository.isManaged() )
+        {
+            throw new ConsumerException( "Consumer requires managed repository." );
+        }
+
+        this.repository = repository;
+        this.index = indexFactory.createFileContentIndex( repository );
+
+        try
+        {
+            this.repositoryLayout = layoutFactory.getLayout( this.repository.getLayoutType() );
+        }
+        catch ( LayoutException e )
+        {
+            throw new ConsumerException(
+                "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();
+        repoPurge.setLayout( repositoryLayout );
+        repoPurge.setRepository( repository );
+        repoPurge.setIndex( index );
+        repoPurge.setArtifactDao( dao.getArtifactDAO() );
+    }
+
+    public void processFile( String path )
+        throws ConsumerException
+    {
+        try
+        {
+            repoPurge.process( path, configuration.getConfiguration() );
+
+        }
+        catch ( RepositoryPurgeException rpe )
+        {
+            throw new ConsumerException( rpe.getMessage() );
+        }
+    }
+
+    public void completeScan()
+    {
+        /* do nothing */
+    }
+
+    public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
+    {
+        if ( propertyNameTriggers.contains( propertyName ) )
+        {
+            initIncludes();
+        }
+    }
+
+    public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
+    {
+        /* do nothing */
+    }
+
+    private void initIncludes()
+    {
+        includes.clear();
+
+        includes.addAll( filetypes.getFileTypePatterns( FileTypes.ARTIFACTS ) );
+    }
+
+    public void initialize()
+        throws InitializationException
+    {
+        propertyNameTriggers = new ArrayList();
+        propertyNameTriggers.add( "repositoryScanning" );
+        propertyNameTriggers.add( "fileTypes" );
+        propertyNameTriggers.add( "fileType" );
+        propertyNameTriggers.add( "patterns" );
+        propertyNameTriggers.add( "pattern" );
+
+        configuration.addChangeListener( this );
+
+        initIncludes();
+    }
+
+}

Added: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeException.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeException.java?view=auto&rev=562766
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeException.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeException.java Sat Aug  4 14:46:32 2007
@@ -0,0 +1,49 @@
+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.
+*/
+
+/**
+ *
+ * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
+ * @version
+ */
+public class RepositoryPurgeException
+    extends Exception
+{
+    public RepositoryPurgeException()
+    {
+        super();
+    }
+
+    public RepositoryPurgeException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+    public RepositoryPurgeException( String message )
+    {
+        super( message );
+    }
+
+    public RepositoryPurgeException( Throwable cause )
+    {
+        super( cause );
+    }
+}

Added: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurge.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurge.java?view=auto&rev=562766
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurge.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurge.java Sat Aug  4 14:46:32 2007
@@ -0,0 +1,121 @@
+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.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.repository.layout.FilenameParts;
+import org.apache.maven.archiva.repository.layout.LayoutException;
+import org.apache.maven.archiva.common.utils.VersionUtil;
+import org.apache.maven.archiva.indexer.RepositoryIndexException;
+
+import java.io.File;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Collections;
+
+/**
+ * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
+ * @plexus.component role="org.apache.maven.archiva.consumers.core.repository.RepositoryPurge"
+ * role-hint="retention-count"
+ * instantiation-strategy="per-lookup"
+ */
+public class RetentionCountRepositoryPurge
+    extends AbstractRepositoryPurge
+{
+    public void process( String path, Configuration configuration )
+        throws RepositoryPurgeException
+    {
+        try
+        {
+            FilenameParts parts = getFilenameParts( path );
+
+            if ( VersionUtil.isSnapshot( parts.version ) )
+            {
+                RepositoryConfiguration repoConfig = configuration.findRepositoryById( getRepository().getId() );
+                File artifactFile = new File( getRepository().getUrl().getPath(), path );
+                File parentDir = artifactFile.getParentFile();
+
+                if ( parentDir.isDirectory() )
+                {
+                    File[] files = parentDir.listFiles();
+                    List uniqueVersionFilenames = getUniqueVersions( files );
+                    Collections.sort( uniqueVersionFilenames );
+
+                    if ( uniqueVersionFilenames.size() > repoConfig.getRetentionCount() )
+                    {
+                        int count = uniqueVersionFilenames.size();
+                        for ( Iterator iter = uniqueVersionFilenames.iterator(); iter.hasNext(); )
+                        {
+                            String filename = (String) iter.next();
+                            if ( count > repoConfig.getRetentionCount() )
+                            {
+                                File[] artifactFiles = getFiles( parentDir, filename );
+                                purge( artifactFiles );
+                                count--;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        catch ( LayoutException le )
+        {
+            throw new RepositoryPurgeException( le.getMessage() );
+        }
+        catch ( RepositoryIndexException re )
+        {
+            throw new RepositoryPurgeException( re.getMessage() );
+        }
+    }
+
+    private List getUniqueVersions( File[] files )
+    {
+        List uniqueVersions = new ArrayList();
+
+        for ( int i = 0; i < files.length; i++ )
+        {
+            if ( !( files[i].getName().toUpperCase() ).endsWith( "SHA1" ) &&
+                !( files[i].getName().toUpperCase() ).endsWith( "MD5" ) )
+            {
+                FilenameParts filenameParts = null;
+
+                // skip those files that have layout exception (no artifact id/no version/no extension)
+                try
+                {
+                    filenameParts = getFilenameParts( files[i].getAbsolutePath() );
+                }
+                catch ( LayoutException le )
+                {
+
+                }
+
+                if ( filenameParts != null &&
+                    !uniqueVersions.contains( filenameParts.artifactId + "-" + filenameParts.version ) )
+                {
+                    uniqueVersions.add( filenameParts.artifactId + "-" + filenameParts.version );
+                }
+            }
+        }
+
+        return uniqueVersions;
+    }
+}

Added: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/conf/repository-manager.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/conf/repository-manager.xml?view=auto&rev=562766
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/conf/repository-manager.xml (added)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/conf/repository-manager.xml Sat Aug  4 14:46:32 2007
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  ~ 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.
+  -->
+
+<configuration>
+  <version>1</version>
+  <repositories>
+    <repository>
+      <id>internal</id>
+      <name>Archiva Managed Internal Repository</name>
+      <url>file://${appserver.base}/repositories/internal</url>
+      <layout>default</layout>
+      <releases>true</releases>
+      <snapshots>false</snapshots>
+      <indexed>true</indexed>
+      <refreshCronExpression>0 0 * * ?</refreshCronExpression>
+    </repository>
+    <repository>
+      <id>snapshots</id>
+      <name>Archiva Managed Snapshot Repository</name>
+      <url>file://${appserver.base}/repositories/internal</url>
+      <layout>default</layout>
+      <releases>false</releases>
+      <snapshots>true</snapshots>
+      <indexed>true</indexed>
+      <refreshCronExpression>0 0,30 * * ?</refreshCronExpression>
+    </repository>
+    <repository>
+      <id>central</id>
+      <name>Central Repository</name>
+      <url>http://repo1.maven.org/maven2</url>
+      <layout>default</layout>
+      <releases>true</releases>
+      <snapshots>false</snapshots>
+      <indexed>false</indexed>
+    </repository>
+    <repository>
+      <id>maven2-repository.dev.java.net</id>
+      <name>Java.net Repository for Maven 2</name>
+      <url>https://maven2-repository.dev.java.net/nonav/repository</url>
+      <layout>default</layout>
+      <releases>true</releases>
+      <snapshots>false</snapshots>
+      <indexed>false</indexed>
+    </repository>
+    <repository>
+      <id>test-repo</id>
+      <name>Test Repository</name>
+      <url>file://${appserver.base}/repositories/test-repo</url>
+      <layout>default</layout>
+      <releases>true</releases>
+      <snapshots>true</snapshots>
+      <indexed>true</indexed>
+      <refreshCronExpression>0 0 * * ?</refreshCronExpression>
+      <retentionCount>2</retentionCount>
+    </repository>
+  </repositories>
+
+  <proxyConnectors>
+    <proxyConnector>
+      <sourceRepoId>internal</sourceRepoId>
+      <targetRepoId>central</targetRepoId>
+      <proxyId/>
+      <snapshotsPolicy>disabled</snapshotsPolicy>
+      <releasePolicy>never</releasePolicy>
+      <failurePolicy>not-found</failurePolicy>
+    </proxyConnector>
+    <proxyConnector>
+      <sourceRepoId>internal</sourceRepoId>
+      <targetRepoId>maven2-repository.dev.java.net</targetRepoId>
+      <proxyId/>
+      <snapshotsPolicy>disabled</snapshotsPolicy>
+      <releasePolicy>never</releasePolicy>
+      <failurePolicy>not-found</failurePolicy>
+      <whiteListPatterns>
+        <whiteListPattern>javax/**</whiteListPattern>
+      </whiteListPatterns>
+    </proxyConnector>
+  </proxyConnectors>
+
+  <networkProxies>
+    <networkProxy>
+      <id>example</id>
+      <protocol>http</protocol>
+      <host>proxy.mycompany.com</host>
+      <port>8080</port>
+      <username>myself</username>
+      <password>mypass</password>
+    </networkProxy>
+  </networkProxies>
+
+  <repositoryScanning>
+    <fileTypes>
+      <fileType>
+        <id>artifacts</id>
+        <patterns>
+          <pattern>**/*.pom</pattern>
+          <pattern>**/*.jar</pattern>
+          <pattern>**/*.ear</pattern>
+          <pattern>**/*.war</pattern>
+          <pattern>**/*.car</pattern>
+          <pattern>**/*.sar</pattern>
+          <pattern>**/*.mar</pattern>
+          <pattern>**/*.rar</pattern>
+          <pattern>**/*.dtd</pattern>
+          <pattern>**/*.tld</pattern>
+          <pattern>**/*.tar.gz</pattern>
+          <pattern>**/*.tar.bz2</pattern>
+          <pattern>**/*.zip</pattern>
+        </patterns>
+      </fileType>
+      <fileType>
+        <id>indexable-content</id>
+        <patterns>
+          <pattern>**/*.txt</pattern>
+          <pattern>**/*.TXT</pattern>
+          <pattern>**/*.block</pattern>
+          <pattern>**/*.config</pattern>
+          <pattern>**/*.pom</pattern>
+          <pattern>**/*.xml</pattern>
+          <pattern>**/*.xsd</pattern>
+          <pattern>**/*.dtd</pattern>
+          <pattern>**/*.tld</pattern>
+        </patterns>
+      </fileType>
+      <fileType>
+        <id>auto-remove</id>
+        <patterns>
+          <pattern>**/*.bak</pattern>
+          <pattern>**/*~</pattern>
+          <pattern>**/*-</pattern>
+        </patterns>
+      </fileType>
+      <fileType>
+        <id>ignored</id>
+        <patterns>
+          <pattern>**/.htaccess</pattern>
+          <pattern>**/KEYS</pattern>
+          <pattern>**/*.rb</pattern>
+          <pattern>**/*.sh</pattern>
+          <pattern>**/.svn/**</pattern>
+          <pattern>**/.DAV/**</pattern>
+        </patterns>
+      </fileType>
+    </fileTypes>
+    <knownContentConsumers>
+      <knownContentConsumer>update-db-artifact</knownContentConsumer>
+      <knownContentConsumer>create-missing-checksums</knownContentConsumer>
+      <knownContentConsumer>update-db-repository-metadata</knownContentConsumer>
+      <knownContentConsumer>validate-checksum</knownContentConsumer>
+      <knownContentConsumer>validate-signature</knownContentConsumer>
+      <knownContentConsumer>index-content</knownContentConsumer>
+      <knownContentConsumer>auto-remove</knownContentConsumer>
+      <knownContentConsumer>auto-rename</knownContentConsumer>
+      <knownContentConsumer>repository-purge</knownContentConsumer>
+    </knownContentConsumers>
+    <invalidContentConsumers>
+      <invalidContentConsumer>update-db-bad-content</invalidContentConsumer>
+    </invalidContentConsumers>
+  </repositoryScanning>
+
+  <databaseScanning>
+    <cronExpression>0 0 * * ?</cronExpression>
+    <unprocessedConsumers>
+      <unprocessedConsumer>index-artifact</unprocessedConsumer>
+      <unprocessedConsumer>update-db-project</unprocessedConsumer>
+      <unprocessedConsumer>validate-repository-metadata</unprocessedConsumer>
+      <unprocessedConsumer>index-archive-toc</unprocessedConsumer>
+      <unprocessedConsumer>update-db-bytecode-stats</unprocessedConsumer>
+      <unprocessedConsumer>index-public-methods</unprocessedConsumer>
+    </unprocessedConsumers>
+    <cleanupConsumers>
+      <cleanupConsumer>not-present-remove-db-artifact</cleanupConsumer>
+      <cleanupConsumer>not-present-remove-db-project</cleanupConsumer>
+      <cleanupConsumer>not-present-remove-indexed</cleanupConsumer>
+    </cleanupConsumers>
+  </databaseScanning>
+
+  <webapp>
+    <ui>
+      <showFindArtifacts>true</showFindArtifacts>
+      <appletFindEnabled>true</appletFindEnabled>
+    </ui>
+  </webapp>
+
+</configuration>

Added: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.xml?view=auto&rev=562766
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.xml (added)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.xml Sat Aug  4 14:46:32 2007
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  ~ 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.
+  -->
+
+<component-set>
+  <components>
+
+    <!-- DaysOldRepositoryPurge -->
+    <component>
+      <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>
+        <requirement>
+          <role>org.apache.maven.archiva.database.ArchivaDAO</role>
+          <role-hint>jdo</role-hint>
+        </requirement>
+        <requirement>
+          <role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
+          <role-hint>lucene</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+
+    <!-- LuceneRepositoryContentIndexFactory -->
+    <component>
+      <role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
+      <role-hint>lucene</role-hint>
+      <implementation>org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentIndexFactory</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+          <role-hint></role-hint>
+        </requirement>
+      </requirements>
+    </component>
+
+    <!-- ArchivaConfiguration -->
+    <component>
+      <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+      <role-hint>test-configuration</role-hint>
+      <implementation>org.apache.maven.archiva.configuration.DefaultArchivaConfiguration</implementation>
+      <requirements>
+        <requirement>
+          <role>org.codehaus.plexus.registry.Registry</role>
+          <role-hint>configured</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+    <component>
+      <role>org.codehaus.plexus.registry.Registry</role>
+      <role-hint>configured</role-hint>
+      <implementation>org.codehaus.plexus.registry.commons.CommonsConfigurationRegistry</implementation>
+      <configuration>
+        <properties>
+          <system/>
+          <xml fileName="${basedir}/src/test/conf/repository-manager.xml"
+               config-name="org.apache.maven.archiva" config-at="org.apache.maven.archiva"/>
+        </properties>
+      </configuration>
+    </component>
+
+    <!-- ArchivaDAO -->
+    <component>
+      <role>org.apache.maven.archiva.database.ArchivaDAO</role>
+      <role-hint>jdo</role-hint>
+      <implementation>org.apache.maven.archiva.database.jdo.JdoArchivaDAO</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.archiva.database.jdo.JdoAccess</role>
+          <role-hint>archiva</role-hint>
+        </requirement>
+        <requirement>
+          <role>org.apache.maven.archiva.database.ArtifactDAO</role>
+          <role-hint>jdo</role-hint>
+        </requirement>
+        <requirement>
+          <role>org.apache.maven.archiva.database.ProjectModelDAO</role>
+          <role-hint>jdo</role-hint>
+        </requirement>
+        <requirement>
+          <role>org.apache.maven.archiva.database.RepositoryDAO</role>
+          <role-hint>jdo</role-hint>
+        </requirement>
+        <requirement>
+          <role>org.apache.maven.archiva.database.RepositoryProblemDAO</role>
+          <role-hint>jdo</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+
+    <!-- JdoAccess -->
+    <component>
+      <role>org.apache.maven.archiva.database.jdo.JdoAccess</role>
+      <role-hint>archiva</role-hint>
+      <implementation>org.apache.maven.archiva.database.jdo.JdoAccess</implementation>
+      <requirements>
+        <requirement>
+          <role>org.codehaus.plexus.jdo.JdoFactory</role>
+          <role-hint>archiva</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+
+    <!-- ArtifactDAO -->
+    <component>
+      <role>org.apache.maven.archiva.database.ArtifactDAO</role>
+      <role-hint>jdo</role-hint>
+      <implementation>org.apache.maven.archiva.database.jdo.JdoArtifactDAO</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.archiva.database.jdo.JdoAccess</role>
+          <role-hint>archiva</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+
+    <!-- ProjectModelDAO -->
+    <component>
+      <role>org.apache.maven.archiva.database.ProjectModelDAO</role>
+      <role-hint>jdo</role-hint>
+      <implementation>org.apache.maven.archiva.database.jdo.JdoProjectModelDAO</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.archiva.database.jdo.JdoAccess</role>
+          <role-hint>archiva</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+
+    <!-- RepositoryDAO -->
+    <component>
+      <role>org.apache.maven.archiva.database.RepositoryDAO</role>
+      <role-hint>jdo</role-hint>
+      <implementation>org.apache.maven.archiva.database.jdo.JdoRepositoryDAO</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.archiva.database.jdo.JdoAccess</role>
+          <role-hint>archiva</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+
+    <!-- RepositoryProblemDAO -->
+    <component>
+      <role>org.apache.maven.archiva.database.RepositoryProblemDAO</role>
+      <role-hint>jdo</role-hint>
+      <implementation>org.apache.maven.archiva.database.jdo.JdoRepositoryProblemDAO</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.archiva.database.jdo.JdoAccess</role>
+          <role-hint>archiva</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+
+    <!-- JDO Factory -->
+    <component>
+      <role>org.codehaus.plexus.jdo.JdoFactory</role>
+      <role-hint>archiva</role-hint>
+      <implementation>org.codehaus.plexus.jdo.DefaultConfigurableJdoFactory</implementation>
+      <configuration>
+        <persistenceManagerFactoryClass>org.jpox.PersistenceManagerFactoryImpl</persistenceManagerFactoryClass>
+        <driverName>org.hsqldb.jdbcDriver</driverName>
+        <userName>sa</userName>
+        <password></password>
+        <url>jdbc:hsqldb:mem:testdb</url>
+        <otherProperties>
+          <property>
+            <name>javax.jdo.PersistenceManagerFactoryClass</name>
+            <value>org.jpox.PersistenceManagerFactoryImpl</value>
+          </property>
+          <!--property>
+            <name>org.jpox.transactionIsolation</name>
+            <value>READ_COMMITTED</value>
+          </property>
+          <property>
+            <name>org.jpox.poid.transactionIsolation</name>
+            <value>READ_COMMITTED</value>
+          </property>
+          <property>
+            <name>org.jpox.autoCreateSchema</name>
+            <value>true</value>
+          </property>
+          <property>
+            <name>javax.jdo.option.RetainValues</name>
+            <value>true</value>
+          </property>
+          <property>
+            <name>javax.jdo.option.RestoreValues</name>
+            <value>true</value>
+          </property>
+          <property>
+            <name>org.jpox.validateTables</name>
+            <value>true</value>
+          </property>
+          <property>
+            <name>org.jpox.validateColumns</name>
+            <value>true</value>
+          </property>
+          <property>
+            <name>org.jpox.validateConstraints</name>
+            <value>true</value>
+          </property-->
+        </otherProperties>
+      </configuration>
+    </component>
+
+  </components>
+</component-set>

Added: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.xml?view=auto&rev=562766
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.xml (added)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/org/apache/maven/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.xml Sat Aug  4 14:46:32 2007
@@ -0,0 +1,226 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  ~ 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.
+  -->
+
+<component-set>
+  <components>   
+
+    <!-- RetentionCountRepositoryPurge -->
+    <component>
+      <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>
+        <requirement>
+          <role>org.apache.maven.archiva.database.ArchivaDAO</role>
+          <role-hint>jdo</role-hint>
+        </requirement>
+        <requirement>
+          <role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
+          <role-hint>lucene</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+
+    <!-- LuceneRepositoryContentIndexFactory -->
+    <component>
+      <role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
+      <role-hint>lucene</role-hint>
+      <implementation>org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentIndexFactory</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+          <role-hint></role-hint>
+        </requirement>
+      </requirements>
+    </component>
+
+    <!-- ArchivaConfiguration -->
+    <component>
+      <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+      <role-hint>test-configuration</role-hint>
+      <implementation>org.apache.maven.archiva.configuration.DefaultArchivaConfiguration</implementation>
+      <requirements>
+        <requirement>
+          <role>org.codehaus.plexus.registry.Registry</role>
+          <role-hint>configured</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+    <component>
+      <role>org.codehaus.plexus.registry.Registry</role>
+      <role-hint>configured</role-hint>
+      <implementation>org.codehaus.plexus.registry.commons.CommonsConfigurationRegistry</implementation>
+      <configuration>
+        <properties>
+          <system/>
+          <xml fileName="${basedir}/src/test/conf/repository-manager.xml"
+               config-name="org.apache.maven.archiva" config-at="org.apache.maven.archiva"/>
+        </properties>
+      </configuration>
+    </component>
+
+    <!-- ArchivaDAO -->
+    <component>
+      <role>org.apache.maven.archiva.database.ArchivaDAO</role>
+      <role-hint>jdo</role-hint>
+      <implementation>org.apache.maven.archiva.database.jdo.JdoArchivaDAO</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.archiva.database.jdo.JdoAccess</role>
+          <role-hint>archiva</role-hint>
+        </requirement>
+        <requirement>
+          <role>org.apache.maven.archiva.database.ArtifactDAO</role>
+          <role-hint>jdo</role-hint>
+        </requirement>
+        <requirement>
+          <role>org.apache.maven.archiva.database.ProjectModelDAO</role>
+          <role-hint>jdo</role-hint>
+        </requirement>
+        <requirement>
+          <role>org.apache.maven.archiva.database.RepositoryDAO</role>
+          <role-hint>jdo</role-hint>
+        </requirement>
+        <requirement>
+          <role>org.apache.maven.archiva.database.RepositoryProblemDAO</role>
+          <role-hint>jdo</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+
+    <!-- JdoAccess -->
+    <component>
+      <role>org.apache.maven.archiva.database.jdo.JdoAccess</role>
+      <role-hint>archiva</role-hint>
+      <implementation>org.apache.maven.archiva.database.jdo.JdoAccess</implementation>
+      <requirements>
+        <requirement>
+          <role>org.codehaus.plexus.jdo.JdoFactory</role>
+          <role-hint>archiva</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+
+    <!-- ArtifactDAO -->
+    <component>
+      <role>org.apache.maven.archiva.database.ArtifactDAO</role>
+      <role-hint>jdo</role-hint>
+      <implementation>org.apache.maven.archiva.database.jdo.JdoArtifactDAO</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.archiva.database.jdo.JdoAccess</role>
+          <role-hint>archiva</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+
+    <!-- ProjectModelDAO -->
+    <component>
+      <role>org.apache.maven.archiva.database.ProjectModelDAO</role>
+      <role-hint>jdo</role-hint>
+      <implementation>org.apache.maven.archiva.database.jdo.JdoProjectModelDAO</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.archiva.database.jdo.JdoAccess</role>
+          <role-hint>archiva</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+
+    <!-- RepositoryDAO -->
+    <component>
+      <role>org.apache.maven.archiva.database.RepositoryDAO</role>
+      <role-hint>jdo</role-hint>
+      <implementation>org.apache.maven.archiva.database.jdo.JdoRepositoryDAO</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.archiva.database.jdo.JdoAccess</role>
+          <role-hint>archiva</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+
+    <!-- RepositoryProblemDAO -->
+    <component>
+      <role>org.apache.maven.archiva.database.RepositoryProblemDAO</role>
+      <role-hint>jdo</role-hint>
+      <implementation>org.apache.maven.archiva.database.jdo.JdoRepositoryProblemDAO</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.archiva.database.jdo.JdoAccess</role>
+          <role-hint>archiva</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+
+    <!-- JDO Factory -->
+    <component>
+      <role>org.codehaus.plexus.jdo.JdoFactory</role>
+      <role-hint>archiva</role-hint>
+      <implementation>org.codehaus.plexus.jdo.DefaultConfigurableJdoFactory</implementation>
+      <configuration>
+        <persistenceManagerFactoryClass>org.jpox.PersistenceManagerFactoryImpl</persistenceManagerFactoryClass>
+        <driverName>org.hsqldb.jdbcDriver</driverName>
+        <userName>sa</userName>
+        <password></password>
+        <url>jdbc:hsqldb:mem:testdb</url>
+        <otherProperties>
+          <property>
+            <name>javax.jdo.PersistenceManagerFactoryClass</name>
+            <value>org.jpox.PersistenceManagerFactoryImpl</value>
+          </property>
+          <property>
+            <name>org.jpox.transactionIsolation</name>
+            <value>READ_COMMITTED</value>
+          </property>
+          <property>
+            <name>org.jpox.poid.transactionIsolation</name>
+            <value>READ_COMMITTED</value>
+          </property>
+          <property>
+            <name>org.jpox.autoCreateSchema</name>
+            <value>true</value>
+          </property>
+          <property>
+            <name>javax.jdo.option.RetainValues</name>
+            <value>true</value>
+          </property>
+          <property>
+            <name>javax.jdo.option.RestoreValues</name>
+            <value>true</value>
+          </property>
+          <property>
+            <name>org.jpox.validateTables</name>
+            <value>true</value>
+          </property>
+          <property>
+            <name>org.jpox.validateColumns</name>
+            <value>true</value>
+          </property>
+          <property>
+            <name>org.jpox.validateConstraints</name>
+            <value>true</value>
+          </property>
+        </otherProperties>
+      </configuration>
+    </component>
+
+  </components>
+</component-set>

Added: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.jar
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.jar?view=auto&rev=562766
==============================================================================
Binary file - no diff available.

Propchange: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.jar.md5
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.jar.md5?view=auto&rev=562766
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.jar.md5 (added)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.jar.md5 Sat Aug  4 14:46:32 2007
@@ -0,0 +1 @@
+5eecdd189751bf9fc63cacc38417c0e6  maven-install-plugin-2.2-20061118.060401-2.jar
\ No newline at end of file

Added: maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.jar.sha1
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.jar.sha1?view=auto&rev=562766
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.jar.sha1 (added)
+++ maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/resources/test-repo/org/apache/maven/plugins/maven-install-plugin/2.2-SNAPSHOT/maven-install-plugin-2.2-20061118.060401-2.jar.sha1 Sat Aug  4 14:46:32 2007
@@ -0,0 +1 @@
+39eb6de00948fbac30f0620c77b0e05114c474f5
\ No newline at end of file