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 <[email protected]>
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();