This is an automated email from the ASF dual-hosted git repository.
gian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new 0276d4590ce Quidem: Use PathMatchers for path matching. (#18127)
0276d4590ce is described below
commit 0276d4590ce66c2426df11cb5bcdedaf63b72e15
Author: Gian Merlino <[email protected]>
AuthorDate: Fri Jun 13 08:45:23 2025 -0700
Quidem: Use PathMatchers for path matching. (#18127)
* Quidem: Use PathMatchers for path matching.
This is more featureful than the previous approach. It supports wildcards
like `*` (does not traverse subdirectories), `**` (traverses
subdirectories),
and `?` (single char).
* Simplify
---
.../apache/druid/quidem/DruidQuidemTestBase.java | 35 +++++++++++-----------
1 file changed, 18 insertions(+), 17 deletions(-)
diff --git a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemTestBase.java
b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemTestBase.java
index 6df17ce0c97..f2e9c515e23 100644
--- a/sql/src/test/java/org/apache/druid/quidem/DruidQuidemTestBase.java
+++ b/sql/src/test/java/org/apache/druid/quidem/DruidQuidemTestBase.java
@@ -51,16 +51,16 @@ import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
+import java.nio.file.FileSystem;
+import java.nio.file.FileSystems;
import java.nio.file.Path;
+import java.nio.file.PathMatcher;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Function;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.fail;
@@ -101,7 +101,7 @@ public abstract class DruidQuidemTestBase
private static final String PROPERTY_FILTER = "quidem.filter";
private final String filterStr;
- private final List<Pattern> filterPatterns;
+ private final PathMatcher filterMatcher;
private DruidQuidemRunner druidQuidemRunner;
@@ -113,28 +113,30 @@ public abstract class DruidQuidemTestBase
public DruidQuidemTestBase(DruidQuidemRunner druidQuidemRunner)
{
this.filterStr = System.getProperty(PROPERTY_FILTER, null);
- this.filterPatterns = buildFilterPatterns(filterStr);
+ this.filterMatcher = buildFilterMatcher(filterStr);
this.druidQuidemRunner = druidQuidemRunner;
}
- private List<Pattern> buildFilterPatterns(@Nullable String filterStr)
+ private static PathMatcher buildFilterMatcher(@Nullable String filterStr)
{
if (null == filterStr) {
- return Collections.emptyList();
+ return f -> true;
}
- final List<Pattern> filterPatterns = new ArrayList<>();
+ final FileSystem fileSystem = FileSystems.getDefault();
+ final List<PathMatcher> filterMatchers = new ArrayList<>();
for (String filterGlob : filterStr.split(",")) {
if (!filterGlob.endsWith("*") && !filterGlob.endsWith(IQ_SUFFIX)) {
filterGlob = filterStr + IQ_SUFFIX;
}
- filterPatterns.add(
- Pattern.compile(
- Arrays.stream(filterGlob.split("\\*", -1))
- .map(Pattern::quote)
- .collect(Collectors.joining("[^/]*"))));
+ filterMatchers.add(fileSystem.getPathMatcher("glob:" + filterGlob));
+ }
+
+ if (filterMatchers.isEmpty()) {
+ return f -> true;
+ } else {
+ return f -> filterMatchers.stream().anyMatch(m -> m.matches(f));
}
- return filterPatterns;
}
protected static class QuidemTestCaseConfiguration
@@ -379,11 +381,10 @@ public abstract class DruidQuidemTestBase
private boolean isTestIncluded(File testRoot, File f)
{
- String relativePath = testRoot.toPath().relativize(f.toPath()).toString();
+ Path relativePath = testRoot.toPath().relativize(f.toPath());
return !f.isDirectory()
&& f.getName().endsWith(IQ_SUFFIX)
- && (filterPatterns.isEmpty() || filterPatterns.stream()
- .anyMatch(pattern ->
pattern.matcher(relativePath).matches()));
+ && filterMatcher.matches(relativePath);
}
protected abstract File getTestRoot();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]