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

bbende pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 6ed8a18131 NIFI-13955 - Filter out .directories in Git Registry 
clients (#9477)
6ed8a18131 is described below

commit 6ed8a18131e10db90b9decd44efa95fa24bec94e
Author: Pierre Villard <[email protected]>
AuthorDate: Mon Nov 4 18:36:10 2024 +0100

    NIFI-13955 - Filter out .directories in Git Registry clients (#9477)
    
    * NIFI-13955 - Filter out .directories in Git Registry clients
    * Added a filter property and added a unit test
---
 .../registry/flow/git/AbstractGitFlowRegistryClient.java   | 14 ++++++++++++++
 .../apache/nifi/github/GitHubFlowRegistryClientTest.java   | 13 ++++++++++++-
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git 
a/nifi-extension-bundles/nifi-extension-utils/nifi-git-flow-registry/src/main/java/org/apache/nifi/registry/flow/git/AbstractGitFlowRegistryClient.java
 
b/nifi-extension-bundles/nifi-extension-utils/nifi-git-flow-registry/src/main/java/org/apache/nifi/registry/flow/git/AbstractGitFlowRegistryClient.java
index ac36714786..ad2c25cc61 100644
--- 
a/nifi-extension-bundles/nifi-extension-utils/nifi-git-flow-registry/src/main/java/org/apache/nifi/registry/flow/git/AbstractGitFlowRegistryClient.java
+++ 
b/nifi-extension-bundles/nifi-extension-utils/nifi-git-flow-registry/src/main/java/org/apache/nifi/registry/flow/git/AbstractGitFlowRegistryClient.java
@@ -60,6 +60,7 @@ import java.util.List;
 import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 /**
@@ -83,6 +84,15 @@ public abstract class AbstractGitFlowRegistryClient extends 
AbstractFlowRegistry
             .required(false)
             .build();
 
+    public static final PropertyDescriptor DIRECTORY_FILTER_EXCLUDE = new 
PropertyDescriptor.Builder()
+            .name("Directory Filter Exclusion")
+            .description("Directories whose names match the given regular 
expression will be ignored "
+                    + "when listing buckets.")
+            .defaultValue("[.].*")
+            .addValidator(StandardValidators.REGULAR_EXPRESSION_VALIDATOR)
+            .required(true)
+            .build();
+
     static final String DEFAULT_BUCKET_NAME = "default";
     static final String DEFAULT_BUCKET_KEEP_FILE_PATH = DEFAULT_BUCKET_NAME + 
"/.keep";
     static final String DEFAULT_BUCKET_KEEP_FILE_CONTENT = "Do Not Delete";
@@ -98,6 +108,7 @@ public abstract class AbstractGitFlowRegistryClient extends 
AbstractFlowRegistry
 
     private volatile FlowSnapshotSerializer flowSnapshotSerializer;
     private volatile GitRepositoryClient repositoryClient;
+    private volatile Pattern directoryExclusionPattern;
     private final AtomicBoolean clientInitialized = new AtomicBoolean(false);
 
     private volatile List<PropertyDescriptor> propertyDescriptors;
@@ -109,6 +120,7 @@ public abstract class AbstractGitFlowRegistryClient extends 
AbstractFlowRegistry
         final List<PropertyDescriptor> combinedPropertyDescriptors = new 
ArrayList<>(createPropertyDescriptors());
         combinedPropertyDescriptors.add(REPOSITORY_BRANCH);
         combinedPropertyDescriptors.add(REPOSITORY_PATH);
+        combinedPropertyDescriptors.add(DIRECTORY_FILTER_EXCLUDE);
         propertyDescriptors = 
Collections.unmodifiableList(combinedPropertyDescriptors);
 
         flowSnapshotSerializer = createFlowSnapshotSerializer();
@@ -174,6 +186,7 @@ public abstract class AbstractGitFlowRegistryClient extends 
AbstractFlowRegistry
         verifyReadPermissions(repositoryClient);
 
         final Set<FlowRegistryBucket> buckets = 
repositoryClient.getTopLevelDirectoryNames(branch).stream()
+                .filter(bucketName -> 
!directoryExclusionPattern.matcher(bucketName).matches())
                 .map(bucketName -> createFlowRegistryBucket(repositoryClient, 
bucketName))
                 .collect(Collectors.toSet());
 
@@ -568,6 +581,7 @@ public abstract class AbstractGitFlowRegistryClient extends 
AbstractFlowRegistry
             repositoryClient = createRepositoryClient(context);
             clientInitialized.set(true);
             initializeDefaultBucket(context);
+            directoryExclusionPattern = 
Pattern.compile(context.getProperty(DIRECTORY_FILTER_EXCLUDE).getValue());
         }
         return repositoryClient;
     }
diff --git 
a/nifi-extension-bundles/nifi-github-bundle/nifi-github-extensions/src/test/java/org/apache/nifi/github/GitHubFlowRegistryClientTest.java
 
b/nifi-extension-bundles/nifi-github-bundle/nifi-github-extensions/src/test/java/org/apache/nifi/github/GitHubFlowRegistryClientTest.java
index 32a624ff08..79958c9458 100644
--- 
a/nifi-extension-bundles/nifi-github-bundle/nifi-github-extensions/src/test/java/org/apache/nifi/github/GitHubFlowRegistryClientTest.java
+++ 
b/nifi-extension-bundles/nifi-github-bundle/nifi-github-extensions/src/test/java/org/apache/nifi/github/GitHubFlowRegistryClientTest.java
@@ -52,6 +52,7 @@ public class GitHubFlowRegistryClientTest {
 
     static final String DEFAULT_REPO_PATH = "some-path";
     static final String DEFAULT_REPO_BRANCH = "some-branch";
+    static final String DEFAULT_FILTER = "[.].*";
 
     private GitHubRepositoryClient repositoryClient;
     private FlowSnapshotSerializer flowSnapshotSerializer;
@@ -74,7 +75,14 @@ public class GitHubFlowRegistryClientTest {
 
         when(repositoryClient.hasReadPermission()).thenReturn(true);
         when(repositoryClient.hasWritePermission()).thenReturn(true);
-        
when(repositoryClient.getTopLevelDirectoryNames(anyString())).thenReturn(Set.of("existing-bucket"));
+        
when(repositoryClient.getTopLevelDirectoryNames(anyString())).thenReturn(Set.of("existing-bucket",
 ".github"));
+    }
+
+    @Test
+    public void testDirExclusion() throws IOException, FlowRegistryException {
+        setupClientConfigurationContextWithDefaults();
+        final Set<FlowRegistryBucket> buckets = 
flowRegistryClient.getBuckets(clientConfigurationContext, DEFAULT_REPO_BRANCH);
+        assertEquals(buckets.stream().filter(b -> 
b.getName().equals(".github")).count(), 0);
     }
 
     @Test
@@ -169,6 +177,9 @@ public class GitHubFlowRegistryClientTest {
 
         final PropertyValue branchPropertyValue = 
createMockPropertyValue(branch);
         
when(clientConfigurationContext.getProperty(GitHubFlowRegistryClient.REPOSITORY_BRANCH)).thenReturn(branchPropertyValue);
+
+        final PropertyValue filterPropertyValue = 
createMockPropertyValue(DEFAULT_FILTER);
+        
when(clientConfigurationContext.getProperty(GitHubFlowRegistryClient.DIRECTORY_FILTER_EXCLUDE)).thenReturn(filterPropertyValue);
     }
 
     private void setupClientConfigurationContextWithDefaults() {

Reply via email to