You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sj...@apache.org on 2022/09/11 11:11:54 UTC

[maven-enforcer] 01/02: [MENFORCER-430] Allow one of many files in RequireFiles rules to pass

This is an automated email from the ASF dual-hosted git repository.

sjaranowski pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-enforcer.git

commit da61e445be7546b9cf1053bf59306576f2ba6a76
Author: Björn Raupach <ra...@me.com>
AuthorDate: Sun Sep 4 11:55:02 2022 +0200

    [MENFORCER-430] Allow one of many files in RequireFiles rules to pass
---
 .../plugins/enforcer/AbstractRequireFiles.java     | 65 +++++++++++++++-------
 .../enforcer/TestRequireFilesDontExist.java        | 28 ++++++++++
 .../plugins/enforcer/TestRequireFilesExist.java    | 29 ++++++++++
 .../plugins/enforcer/TestRequireFilesSize.java     | 27 +++++++++
 4 files changed, 130 insertions(+), 19 deletions(-)

diff --git a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractRequireFiles.java b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractRequireFiles.java
index 6b1de74..0d40987 100644
--- a/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractRequireFiles.java
+++ b/enforcer-rules/src/main/java/org/apache/maven/plugins/enforcer/AbstractRequireFiles.java
@@ -42,6 +42,9 @@ public abstract class AbstractRequireFiles
     /** if null file handles should be allowed. If they are allowed, it means treat it as a success. */
     private boolean allowNulls = false;
 
+    /** Allow that a single one of the files can make the rule to pass. */
+    private boolean satisfyAny;
+
     // check the file for the specific condition
     /**
      * Check one file.
@@ -82,32 +85,46 @@ public abstract class AbstractRequireFiles
             }
         }
 
-        // if anything was found, log it with the optional message.
-        if ( !failures.isEmpty() )
+        if ( satisfyAny )
         {
-            String message = getMessage();
-            
-            StringBuilder buf = new StringBuilder();
-            if ( message != null )
+            int passed = files.length - failures.size();
+            if ( passed == 0 )
             {
-                buf.append( message + System.lineSeparator() );
+                fail( failures );
             }
-            buf.append( getErrorMsg() );
+        }
+        // if anything was found, log it with the optional message.
+        else if ( !failures.isEmpty() )
+        {
+            fail( failures );
+        }
+    }
+
+    private void fail( List<File> failures )
+            throws EnforcerRuleException
+    {
+        String message = getMessage();
+
+        StringBuilder buf = new StringBuilder();
+        if ( message != null )
+        {
+            buf.append( message + System.lineSeparator() );
+        }
+        buf.append( getErrorMsg() );
 
-            for ( File file : failures )
+        for ( File file : failures )
+        {
+            if ( file != null )
             {
-                if ( file != null )
-                {
-                    buf.append( file.getAbsolutePath() + System.lineSeparator() );
-                }
-                else
-                {
-                    buf.append( "(an empty filename was given and allowNulls is false)" + System.lineSeparator() );
-                }
+                buf.append( file.getAbsolutePath() + System.lineSeparator() );
+            }
+            else
+            {
+                buf.append( "(an empty filename was given and allowNulls is false)" + System.lineSeparator() );
             }
-
-            throw new EnforcerRuleException( buf.toString() );
         }
+
+        throw new EnforcerRuleException( buf.toString() );
     }
 
     @Override
@@ -168,4 +185,14 @@ public abstract class AbstractRequireFiles
     {
         this.allowNulls = allowNulls;
     }
+
+    public boolean isSatisfyAny()
+    {
+        return satisfyAny;
+    }
+
+    public void setSatisfyAny( boolean satisfyAny )
+    {
+        this.satisfyAny = satisfyAny;
+    }
 }
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesDontExist.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesDontExist.java
index 3ddd941..2cbe663 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesDontExist.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesDontExist.java
@@ -136,6 +136,34 @@ public class TestRequireFilesDontExist
         rule.execute( EnforcerTestUtils.getHelper() );
     }
 
+    @Test
+    public void testFileDoesNotExistSatisfyAny()
+            throws IOException
+    {
+        File f = File.createTempFile( "junit", null, temporaryFolder );
+        f.delete();
+
+        assertFalse( f.exists() );
+
+        File g = File.createTempFile( "junit", null, temporaryFolder );
+
+        assertTrue( g.exists() );
+
+        rule.setFiles( new File[] { f, g.getCanonicalFile() } );
+        rule.setSatisfyAny(true);
+
+        try
+        {
+            rule.execute( EnforcerTestUtils.getHelper() );
+        }
+        catch ( EnforcerRuleException e )
+        {
+            fail( "Unexpected Exception:" + e.getLocalizedMessage() );
+        }
+
+        g.delete();
+    }
+
     /**
      * Test id.
      */
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesExist.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesExist.java
index 3a35a73..91a386b 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesExist.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesExist.java
@@ -22,6 +22,7 @@ package org.apache.maven.plugins.enforcer;
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.io.File;
+import java.io.IOException;
 
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
 import org.junit.jupiter.api.Test;
@@ -121,6 +122,34 @@ public class TestRequireFilesExist
 
     }
 
+    @Test
+    public void testFileExistsSatisfyAny()
+            throws IOException
+    {
+        File f = File.createTempFile( "junit", null, temporaryFolder );
+        f.delete();
+
+        assertFalse( f.exists() );
+
+        File g = File.createTempFile( "junit", null, temporaryFolder );
+
+        assertTrue( g.exists() );
+
+        rule.setFiles( new File[] { f, g.getCanonicalFile() } );
+        rule.setSatisfyAny(true);
+
+        try
+        {
+            rule.execute( EnforcerTestUtils.getHelper() );
+        }
+        catch ( EnforcerRuleException e )
+        {
+            fail( "Unexpected Exception:" + e.getLocalizedMessage() );
+        }
+
+        g.delete();
+    }
+
     /**
      * Test id.
      */
diff --git a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesSize.java b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesSize.java
index 83e9184..a19383e 100644
--- a/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesSize.java
+++ b/enforcer-rules/src/test/java/org/apache/maven/plugins/enforcer/TestRequireFilesSize.java
@@ -165,6 +165,33 @@ public class TestRequireFilesSize
         }
     }
 
+    @Test
+    public void testRequireFilesSizeSatisfyAny()
+            throws IOException
+    {
+        File f = File.createTempFile( "junit", null, temporaryFolder );
+        try ( BufferedWriter out = new BufferedWriter( new FileWriter( f ) ) )
+        {
+            out.write( "123456789101112131415" );
+        }
+        assertTrue( f.length() > 10 );
+
+        File g = File.createTempFile( "junit", null, temporaryFolder );
+
+        rule.setFiles( new File[] { f, g } );
+        rule.setMaxsize( 10 );
+        rule.setSatisfyAny(true);
+
+        try
+        {
+            rule.execute( EnforcerTestUtils.getHelper() );
+        }
+        catch ( EnforcerRuleException e )
+        {
+            fail( "Unexpected Exception:" + e.getLocalizedMessage() );
+        }
+    }
+
     /**
      * Test id.
      */