Author: oching
Date: Mon Nov  5 22:16:12 2007
New Revision: 592297

URL: http://svn.apache.org/viewvc?rev=592297&view=rev
Log:
[MRM-556]
- respect set retention count when purging by number of days old (used same 
logic for purging by retention count)
- updated edit managed repository validation for the number of days old minimum 
range
- adjusted DaysOldRepositoryPurgeTest for the changes

Modified:
    
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/RepositoryPurgeConsumer.java
    
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
    
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/stubs/LuceneRepositoryContentIndexStub.java
    
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction-validation.xml

Modified: 
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?rev=592297&r1=592296&r2=592297&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurge.java
 (original)
+++ 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurge.java
 Mon Nov  5 22:16:12 2007
@@ -20,10 +20,12 @@
 */
 
 import org.apache.commons.lang.time.DateUtils;
+import org.apache.maven.archiva.common.utils.VersionComparator;
 import org.apache.maven.archiva.common.utils.VersionUtil;
 import org.apache.maven.archiva.database.ArtifactDAO;
 import org.apache.maven.archiva.indexer.RepositoryContentIndex;
 import org.apache.maven.archiva.model.ArtifactReference;
+import org.apache.maven.archiva.model.VersionedReference;
 import org.apache.maven.archiva.repository.ContentNotFoundException;
 import org.apache.maven.archiva.repository.ManagedRepositoryContent;
 import org.apache.maven.archiva.repository.layout.LayoutException;
@@ -31,8 +33,11 @@
 import java.io.File;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Calendar;
+import java.util.Collections;
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.regex.Matcher;
@@ -49,11 +54,14 @@
 
     private int daysOlder;
     
+    private int retentionCount;
+    
     public DaysOldRepositoryPurge( ManagedRepositoryContent repository, 
ArtifactDAO artifactDao,
-                                   int daysOlder, Map<String, 
RepositoryContentIndex> indices )
+                                   int daysOlder, int retentionCount, 
Map<String, RepositoryContentIndex> indices )
     {
         super( repository, artifactDao, indices );
         this.daysOlder = daysOlder;
+        this.retentionCount = retentionCount;
         timestampParser = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
         timestampParser.setTimeZone( DateUtils.UTC_TIME_ZONE );
     }
@@ -75,12 +83,29 @@
             Calendar olderThanThisDate = Calendar.getInstance( 
DateUtils.UTC_TIME_ZONE );
             olderThanThisDate.add( Calendar.DATE, -daysOlder );
 
+            // respect retention count
+            VersionedReference reference = new VersionedReference();
+            reference.setGroupId( artifact.getGroupId() );
+            reference.setArtifactId( artifact.getArtifactId() );
+            reference.setVersion( artifact.getVersion() );
+
+            List<String> versions = new ArrayList<String>( 
repository.getVersions( reference ) );
+
+            Collections.sort( versions, VersionComparator.getInstance() );
+            
+            
             // Is this a generic snapshot "1.0-SNAPSHOT" ?
             if ( VersionUtil.isGenericSnapshot( artifact.getVersion() ) )
             {
                 if ( artifactFile.lastModified() < 
olderThanThisDate.getTimeInMillis() )
-                {
-                    doPurgeAllRelated( artifactFile );
+                {                    
+                    if ( retentionCount > versions.size() )
+                    {
+                        // Done. nothing to do here. skip it.
+                        return;
+                    }
+                                        
+                    purgeArtifact( versions, artifactFile );
                 }
             }
             // Is this a timestamp snapshot "1.0-20070822.123456-42" ?
@@ -89,12 +114,25 @@
                 Calendar timestampCal = uniqueSnapshotToCalendar( 
artifact.getVersion() );
 
                 if ( timestampCal.getTimeInMillis() < 
olderThanThisDate.getTimeInMillis() )
-                {
-                    doPurgeAllRelated( artifactFile );
+                {                    
+                    if ( retentionCount > versions.size() )
+                    {
+                        // Done. nothing to do here. skip it.
+                        return;
+                    }
+                    
+                    purgeArtifact( versions, artifactFile );                   
 
                 }
                 else if ( artifactFile.lastModified() < 
olderThanThisDate.getTimeInMillis() )
-                {
-                    doPurgeAllRelated( artifactFile );
+                {                    
+
+                    if ( retentionCount > versions.size() )
+                    {
+                        // Done. nothing to do here. skip it.
+                        return;
+                    }
+                    
+                    purgeArtifact( versions, artifactFile );                   
 
                 }
             }
         }
@@ -102,6 +140,10 @@
         {
             throw new RepositoryPurgeException( le.getMessage() );
         }
+        catch ( ContentNotFoundException e )
+        {
+            throw new RepositoryPurgeException( e.getMessage() );
+        }
     }
 
     private Calendar uniqueSnapshotToCalendar( String version )
@@ -150,6 +192,21 @@
         {
             // Nothing to do here.
             // TODO: Log this?
+        }
+    }
+    
+    private void purgeArtifact( List<String> versions, File artifactFile )
+        throws LayoutException
+    {
+        int countToPurge = versions.size() - retentionCount;
+
+        while( versions.iterator().hasNext() )
+        {
+            if ( countToPurge-- <= 0 )
+            {
+                break;
+            }
+            doPurgeAllRelated( artifactFile );
         }
     }
 }

Modified: 
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?rev=592297&r1=592296&r2=592297&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumer.java
 (original)
+++ 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/RepositoryPurgeConsumer.java
 Mon Nov  5 22:16:12 2007
@@ -149,7 +149,7 @@
             if ( repository.getDaysOlder() != 0 )
             {
                 repoPurge = new DaysOldRepositoryPurge( repositoryContent, 
dao.getArtifactDAO(), repository
-                    .getDaysOlder(), indices );
+                    .getDaysOlder(), repository.getRetentionCount(), indices );
             }
             else
             {

Modified: 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java?rev=592297&r1=592296&r2=592297&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
 (original)
+++ 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
 Mon Nov  5 22:16:12 2007
@@ -35,18 +35,18 @@
     extends AbstractRepositoryPurgeTest
 {
 
+    private Map<String, RepositoryContentIndex> map;
+    
     protected void setUp()
         throws Exception
     {
         super.setUp();
 
-        Map<String, RepositoryContentIndex> map = new HashMap<String, 
RepositoryContentIndex>();
+        map = new HashMap<String, RepositoryContentIndex>();
         map.put( "filecontent", new LuceneRepositoryContentIndexStub() );
         map.put( "hashcodes", new LuceneRepositoryContentIndexStub() );
-        map.put( "bytecode", new LuceneRepositoryContentIndexStub() );
+        map.put( "bytecode", new LuceneRepositoryContentIndexStub() );        
         
-        repoPurge =
-            new DaysOldRepositoryPurge( getRepository(), dao, 
getRepoConfiguration().getDaysOlder(), map );
     }
 
     private void setLastModified( String dirPath )
@@ -61,7 +61,11 @@
 
     public void testByLastModified()
         throws Exception
-    {
+    {        
+        repoPurge =
+            new DaysOldRepositoryPurge( getRepository(), dao, 
getRepoConfiguration().getDaysOlder(), 
+                            1, map );
+        
         populateDbForTestByLastModified();
 
         String repoRoot = prepareTestRepo();
@@ -83,6 +87,10 @@
     public void testMetadataDrivenSnapshots()
         throws Exception
     {
+        repoPurge =
+            new DaysOldRepositoryPurge( getRepository(), dao, 
getRepoConfiguration().getDaysOlder(), 
+                            getRepoConfiguration().getRetentionCount(), map );
+        
         populateDbForTestMetadataDrivenSnapshots();
 
         String repoRoot = prepareTestRepo();

Modified: 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/stubs/LuceneRepositoryContentIndexStub.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/stubs/LuceneRepositoryContentIndexStub.java?rev=592297&r1=592296&r2=592297&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/stubs/LuceneRepositoryContentIndexStub.java
 (original)
+++ 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/maven/archiva/consumers/core/repository/stubs/LuceneRepositoryContentIndexStub.java
 Mon Nov  5 22:16:12 2007
@@ -46,7 +46,10 @@
         throws RepositoryIndexException
     {
         // TODO Auto-generated method stub
-        Assert.assertEquals( 2, records.size() );
+        if( records.size() != 0 )
+        {
+            Assert.assertEquals( 2, records.size() );
+        }
     }
 
     public boolean exists()

Modified: 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction-validation.xml
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction-validation.xml?rev=592297&r1=592296&r2=592297&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction-validation.xml
 (original)
+++ 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/org/apache/maven/archiva/web/action/admin/repositories/EditManagedRepositoryAction-validation.xml
 Mon Nov  5 22:16:12 2007
@@ -46,7 +46,7 @@
   </field>
    <field name="repository.daysOlder">
        <field-validator type="int">
-       <param name="min">1</param>
+       <param name="min">0</param>
         <param name="max">1000</param>
                <message>Repository Purge By Days Older Than needs to be 
between ${min} and ${max}.</message>
        </field-validator>    


Reply via email to