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

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-io.git


The following commit(s) were added to refs/heads/master by this push:
     new a463f1e  FileUtils.listFiles() does not list matching files if File 
parameter is a symbolic link.
a463f1e is described below

commit a463f1e85d7481d71ffe7ff3671cb1798a462296
Author: Gary Gregory <gardgreg...@gmail.com>
AuthorDate: Tue Sep 21 17:07:47 2021 -0400

    FileUtils.listFiles() does not list matching files if File parameter is
    a symbolic link.
---
 src/changes/changes.xml                            |  3 +++
 src/main/java/org/apache/commons/io/FileUtils.java | 12 ++++++++----
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 9d7378a..d30350d 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -77,6 +77,9 @@ The <action> type attribute can be add,update,fix,remove.
       <action issue="IO-726" dev="ggregory" type="fix" due-to="shollander, 
Gary Gregory">
         Add MemoryMappedInputStream. #215.
       </action>
+      <action issue="IO-749" dev="ggregory" type="fix" due-to="haihuiyang, 
Gary Gregory">
+        FileUtils.listFiles() does not list matching files if File parameter 
is a symbolic link.
+      </action>
       <!-- ADD -->
       <action dev="ggregory" type="add" due-to="Gary Gregory">
         Add BrokenReader.INSTANCE.
diff --git a/src/main/java/org/apache/commons/io/FileUtils.java 
b/src/main/java/org/apache/commons/io/FileUtils.java
index 7cd7e9a..ab48520 100644
--- a/src/main/java/org/apache/commons/io/FileUtils.java
+++ b/src/main/java/org/apache/commons/io/FileUtils.java
@@ -55,9 +55,11 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import java.util.zip.CRC32;
@@ -2175,13 +2177,15 @@ public class FileUtils {
     }
 
     private static AccumulatorPathVisitor listAccumulate(final File directory, 
final IOFileFilter fileFilter,
-        final IOFileFilter dirFilter) throws IOException {
+        final IOFileFilter dirFilter, FileVisitOption... options) throws 
IOException {
         final boolean isDirFilterSet = dirFilter != null;
         final FileEqualsFileFilter rootDirFilter = new 
FileEqualsFileFilter(directory);
         final PathFilter dirPathFilter = isDirFilterSet ? 
rootDirFilter.or(dirFilter) : rootDirFilter;
         final AccumulatorPathVisitor visitor = new 
AccumulatorPathVisitor(Counters.noopPathCounters(), fileFilter,
             dirPathFilter);
-        Files.walkFileTree(directory.toPath(), Collections.emptySet(), 
toMaxDepth(isDirFilterSet), visitor);
+        Set<FileVisitOption> optionSet = new HashSet<>();
+        Collections.addAll(optionSet, options);
+        Files.walkFileTree(directory.toPath(), optionSet, 
toMaxDepth(isDirFilterSet), visitor);
         return visitor;
     }
 
@@ -2237,7 +2241,7 @@ public class FileUtils {
     public static Collection<File> listFiles(
         final File directory, final IOFileFilter fileFilter, final 
IOFileFilter dirFilter) {
         try {
-            final AccumulatorPathVisitor visitor = listAccumulate(directory, 
fileFilter, dirFilter);
+            final AccumulatorPathVisitor visitor = listAccumulate(directory, 
fileFilter, dirFilter, FileVisitOption.FOLLOW_LINKS);
             return 
visitor.getFileList().stream().map(Path::toFile).collect(Collectors.toList());
         } catch (final IOException e) {
             throw UncheckedIOExceptions.create(directory, e);
@@ -2284,7 +2288,7 @@ public class FileUtils {
     public static Collection<File> listFilesAndDirs(
         final File directory, final IOFileFilter fileFilter, final 
IOFileFilter dirFilter) {
         try {
-            final AccumulatorPathVisitor visitor = listAccumulate(directory, 
fileFilter, dirFilter);
+            final AccumulatorPathVisitor visitor = listAccumulate(directory, 
fileFilter, dirFilter, FileVisitOption.FOLLOW_LINKS);
             final List<Path> list = visitor.getFileList();
             list.addAll(visitor.getDirList());
             return 
list.stream().map(Path::toFile).collect(Collectors.toList());

Reply via email to