You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2022/06/21 21:23:55 UTC

[nifi] branch main updated: NIFI-9996 - ListFile does not list root directory when Recurse Subdirectories is active and Path Filter is specified (#6110)

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

markap14 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 f9beb507fd NIFI-9996 - ListFile does not list root directory when Recurse Subdirectories is active and Path Filter is specified (#6110)
f9beb507fd is described below

commit f9beb507fdbde55c62170949393aeb542fe23b39
Author: greyp9 <gr...@users.noreply.github.com>
AuthorDate: Tue Jun 21 17:23:49 2022 -0400

    NIFI-9996 - ListFile does not list root directory when Recurse Subdirectories is active and Path Filter is specified (#6110)
---
 .../apache/nifi/processors/standard/ListFile.java  | 15 ++++------
 .../nifi/processors/standard/TestListFile.java     | 34 ++++++++++++++++++++++
 2 files changed, 39 insertions(+), 10 deletions(-)

diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFile.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFile.java
index 9cae320a70..28a4694911 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFile.java
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFile.java
@@ -692,21 +692,16 @@ public class ListFile extends AbstractListProcessor<FileInfo> {
                 return false;
             }
 
-            final Path relativePath = basePath.relativize(path).getParent();
-            final String relativeDir = relativePath == null ? "" : relativePath.toString();
+            final Path relativePath = basePath.relativize(path);
+            final Path relativePathParent = relativePath.getParent();
+            final String relativeDir = relativePathParent == null ? "" : relativePathParent.toString();
             final String filename = path.getFileName().toString();
             final TimingInfo timingInfo = performanceTracker.getTimingInfo(relativeDir, filename);
 
             final File file = path.toFile();
 
-            if (pathPattern != null) {
-                if (relativePath == null || relativePath.toString().isEmpty()) {
-                    return false;
-                }
-
-                if (!pathPattern.matcher(relativePath.toString()).matches()) {
-                    return false;
-                }
+            if ((pathPattern != null) && (!pathPattern.matcher(relativeDir).matches())) {
+                return false;
             }
 
             final boolean matchesFilter = filePattern.matcher(filename).matches();
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListFile.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListFile.java
index 88a7189bdb..e10d23cd2c 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListFile.java
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListFile.java
@@ -694,6 +694,40 @@ public class TestListFile {
         assertEquals(1, successFiles3.size());
     }
 
+    @Test
+    public void testFilterPathPatternNegative() throws Exception {
+        final long now = getTestModifiedTime();
+
+        final File subdirA = new File(TESTDIR + "/AAA");
+        assertTrue(subdirA.mkdirs());
+
+        final File subdirL = new File(TESTDIR + "/LOG");
+        assertTrue(subdirL.mkdirs());
+
+        final File file1 = new File(TESTDIR + "/file1.txt");
+        assertTrue(file1.createNewFile());
+        assertTrue(file1.setLastModified(now));
+
+        final File file2 = new File(TESTDIR + "/AAA/file2.txt");
+        assertTrue(file2.createNewFile());
+        assertTrue(file2.setLastModified(now));
+
+        final File file3 = new File(TESTDIR + "/LOG/file3.txt");
+        assertTrue(file3.createNewFile());
+        assertTrue(file3.setLastModified(now));
+
+        runner.setProperty(ListFile.DIRECTORY, testDir.getAbsolutePath());
+        runner.setProperty(ListFile.FILE_FILTER, ListFile.FILE_FILTER.getDefaultValue());
+        runner.setProperty(ListFile.PATH_FILTER, "^((?!LOG).)*$");
+        runner.setProperty(ListFile.RECURSE, "true");
+        assertVerificationOutcome(Outcome.SUCCESSFUL, "Successfully listed .* Found 3 objects.  Of those, 2 match the filter.");
+        runNext();
+
+        runner.assertAllFlowFilesTransferred(ListFile.REL_SUCCESS);
+        final List<MockFlowFile> successFiles1 = runner.getFlowFilesForRelationship(ListFile.REL_SUCCESS);
+        assertEquals(2, successFiles1.size());
+    }
+
     @Test
     public void testRecurse() throws Exception {
         final long now = getTestModifiedTime();