Hi Elliotte,

On Mon, Jun 19, 2023 at 4:08 PM Elliotte Rusty Harold
<elh...@ibiblio.org> wrote:
>
> I'm working on a longterm project to remove a lot of duplicate code
> and assorted dependencies from Apache Maven by migrating many of our
> utilities to Apache Commons equivalents or near-equivalents. In
> particular I'd much prefer to use Apache Commons IO to handle a lot of
> file system related tasks rather than reinventing and maintaining
> those wheels ourselves. There's some common history here going back
> 20+ years where code has been copied and pasted from one project to
> the next, and then maintained and evolved with different levels of
> care in different projects.
>
> I've found JDK or Commons IO replacements for almost everything I/O
> related in our old utility library. I'm now down to the last group of
> methods. These are several variants of getFiles/getFileNames that
> return a list of the files inside a base directory as relative paths
> from the base, either as String or File objects. There's nothing
> exactly like this in commons IO.
>
> I think AccumulatorPathVisitor along with Files.walkFileTree covers a
> lot of what it does. It's not a drop-in 1:1 replacement, but it should
> suffice for most uses. The final missing piece is that the legacy
> getFiles/getFileNames methods also support Ant includes and excludes
> lists:
>
> @param includes       the Ant includes pattern, comma separated
> @param excludes       the Ant excludes pattern, comma separated
>
> (I think this code originated in ant a couple of decades ago.)
>
> I think I can make this work with AccumulatorPathVisitor using a file
> filter that accepts ant includes and excludes lists. My question is
> twofold:
>
> 1. Would the commons IO project be open to accepting a contribution of
> a file filter that is based on Ant includes and excludes patterns? No
> actual ant code, just the pattern syntax described here:

Thank you for your offer!

Yes but:

I like the general idea of adding configurable include and exclude features.

I am uncertain about baking in the Ant-specific pattern formats in
Commons IO. Allowing the include and exclude feature to be provided
through some interfaces and/or lambdas would be fine, which would then
enable Ant to pass its pattern syntax processor.

>
> https://ant.apache.org/manual/dirtasks.html#patterns
>
> 2. Would the commons IO project be open to accepting something closer
> to the existing getFiles/getFileNames methods from maven-shared-util?
> likely based on the file filter from #1
>
> https://javadoc.io/doc/org.apache.maven.shared/maven-shared-utils/latest/org/apache/maven/shared/utils/io/FileUtils.html#getFileAndDirectoryNames(java.io.File,java.lang.String,java.lang.String,boolean,boolean,boolean,boolean)
>
> The current methods are a bit of a mess with an IMHO excessive number
> of options and overloads, so it wouldn't be a pure copy of the API,
> but it would be a single method that could do something like
>
> List<File> files = Files.getFiles(directory)
> List<String> fileNames = Files.getFileNames(directory)

Anything that returns a list, as opposed to a stream, feels wrong.
We've seen plenty of cases where processing large directories and
trees using lists is almost considered a bug at best and a DOS vector
at worst. IOW, it can be a performance killer.

WRT to dealing with methods that take many optional parameters,
another option is to have a separate class with a builder. I'm not
sure this is the best solution here, I'd need to see a few examples.

Gary

>
> to return a List of files contained within a directory. I think the
> implementation would be based on AccumulatorPathVisitor and
> Files.walkFileTree rather than copying the current code that dates
> back to something like Java 1.2.
>
> Thoughts? Is this something the commons IO project would be willing to
> own? If so, I can file an issue and begin working on a PR. Thanks for
> the consideration.
>
> --
> Elliotte Rusty Harold
> elh...@ibiblio.org
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to