]> source.dussan.org Git - archiva.git/commitdiff
[MRM-789]
authorMaria Odea B. Ching <oching@apache.org>
Tue, 3 Jun 2008 06:22:36 +0000 (06:22 +0000)
committerMaria Odea B. Ching <oching@apache.org>
Tue, 3 Jun 2008 06:22:36 +0000 (06:22 +0000)
-check if the repo location is referenced as a system property before deleting the contents of the repo

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@662662 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryAction.java
archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/DeleteManagedRepositoryActionTest.java

index 4380313209a00b680974f4a15347ae87aeb45c9b..14e62d4e6448e60f2c47845e1591503e529ba046 100644 (file)
@@ -42,6 +42,7 @@ import org.codehaus.plexus.redback.role.RoleManagerException;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 
 /**
  * DeleteManagedRepositoryAction
@@ -93,7 +94,7 @@ public class DeleteManagedRepositoryAction
     }
 
     private String deleteRepository( boolean deleteContents )
-    {
+    {   
         ManagedRepositoryConfiguration existingRepository = repository;
         if ( existingRepository == null )
         {
@@ -101,6 +102,20 @@ public class DeleteManagedRepositoryAction
             return ERROR;
         }
 
+        if( deleteContents )
+        {
+            // [MRM-789] Archiva may delete your app server installation
+            Properties props = System.getProperties();
+            for( Object value : props.values() )
+            {
+                if( StringUtils.equalsIgnoreCase( ( (String) value ).trim(), existingRepository.getLocation().trim() ) )
+                {
+                    addActionError( "Unable to delete repository. The location is being referenced in the system properties." );
+                    return ERROR;
+                }
+            }
+        }
+        
         String result = SUCCESS;
 
         try
index 41536c1c726cb62dd18f1c2ff37095e657914a67..4cb35ab7190c225d8e8ca1b3eb5865971216331b 100644 (file)
@@ -214,6 +214,26 @@ public class DeleteManagedRepositoryActionTest
 
         assertFalse( location.exists() );
     }
+    
+    public void testDeleteRepositoryLocationReferencedInSysPropertiesError()
+        throws Exception
+    {
+        System.setProperty( "test.property", getTestFile( "target/test/location" ).getAbsolutePath() );
+        
+        prepareRoleManagerMock();
+        
+        Configuration configuration = prepDeletionTest( createRepository(), 4 );              
+        
+        String status = action.deleteContents();
+        
+        assertEquals( Action.ERROR, status );
+
+        assertFalse( configuration.getManagedRepositories().isEmpty() );
+
+        assertTrue( location.exists() );
+        
+        System.clearProperty( "test.property" );
+    }
 
     private Configuration prepDeletionTest( ManagedRepositoryConfiguration originalRepository, int expectCountGetConfig )
         throws RegistryException, IndeterminateConfigurationException