kbuntrock commented on code in PR #91:
URL: 
https://github.com/apache/maven-build-cache-extension/pull/91#discussion_r1286165121


##########
src/main/java/org/apache/maven/buildcache/checksum/MavenProjectInput.java:
##########
@@ -108,11 +107,6 @@ public class MavenProjectInput {
      * property name to pass glob value. The glob to be used to list directory 
files in plugins scanning
      */
     private static final String CACHE_INPUT_GLOB_NAME = 
"maven.build.cache.input.glob";
-    /**
-     * default glob, bbsdk/abfx specific
-     */
-    public static final String DEFAULT_GLOB = 
"{*.java,*.groovy,*.yaml,*.svcd,*.proto,*assembly.xml,assembly"

Review Comment:
   Was not used except in a UT.



##########
src/test/java/org/apache/maven/buildcache/checksum/MavenProjectInputTest.java:
##########
@@ -47,52 +47,23 @@
 
 public class MavenProjectInputTest {
 
-    private static final String GLOB = "{*-pom.xml}";
+    private static final String DEFAULT_GLOB = "*";
 
     @Test
-    public void testAddInputsRelativePath() {
-        //        MavenProjectInput inputs = new MavenProjectInput(config, new 
ArrayList<Path>(),
-        // Paths.get("src\\test\\resources\\org"), GLOB);
-        //        ArrayList<Path> files = new ArrayList<>();
-        //        inputs.listDirOrFile("../../resources", inputs.dirGlob, 
files, new HashSet<Path>());
-        //        assertEquals(4, files.size());
-    }
-
-    @Test
-    public void testAddInputsAbsolutePath() {
-        //        Path baseDirPath = Paths.get("src\\test\\resources\\org");
-        //        MavenProjectInput inputs = new MavenProjectInput(config, new 
ArrayList<Path>(), baseDirPath, GLOB);
-        //        ArrayList<Path> files = new ArrayList<>();
-        //        Path candidatePath = 
baseDirPath.resolve("../../resources").normalize().toAbsolutePath();
-        //        inputs.listDirOrFile(candidatePath.toString(), 
inputs.dirGlob, files, new HashSet<Path>());
-        //        assertEquals(4, files.size()); // pom is filtered out by 
hardcoded if
-    }
-
-    @Test
-    public void testGlobInput() {
-        //        Path baseDirPath = Paths.get("src\\test\\resources");
-        //        MavenProjectInput inputs = new MavenProjectInput(config, new 
ArrayList<Path>(), baseDirPath, GLOB);
-        //        ArrayList<Path> files = new ArrayList<>();
-        //        inputs.tryAddInputs("*.java", files, new HashSet<Path>());
-        //        assertEquals(0, files.size()); // pom is filtered out by 
hardcoded if
-    }
-
-    @Test
-    public void testGetDirectoryFiles() {
-        List<Path> directoryFiles = new ArrayList<>();
+    public void testCollectFilteredFiles() {

Review Comment:
   Cleaned dead code and updated a test with a wrong assumption. Not the most 
useful test but better than before.



##########
src/main/java/org/apache/maven/buildcache/checksum/MavenProjectInput.java:
##########
@@ -165,45 +184,94 @@ public MavenProjectInput(
         this.repoSystem = repoSystem;
         this.remoteCache = remoteCache;
         Properties properties = project.getProperties();
-        this.dirGlob = properties.getProperty(CACHE_INPUT_GLOB_NAME, 
config.getDefaultGlob());
+        this.defaultFilenameGlob = 
properties.getProperty(CACHE_INPUT_GLOB_NAME, config.getDefaultGlob());
         this.processPlugins =
                 
Boolean.parseBoolean(properties.getProperty(CACHE_PROCESS_PLUGINS, 
config.isProcessPlugins()));
         this.tmpDir = System.getProperty("java.io.tmpdir");
 
+        this.baseDirectoryGlob = baseDirPath.toString().replace("\\", "/") + 
"/";
+
         org.apache.maven.model.Build build = project.getBuild();
-        filteredOutPaths = new ArrayList<>(Arrays.asList(
-                normalizedPath(build.getDirectory()), // target by default
-                normalizedPath(build.getOutputDirectory()),
-                normalizedPath(build.getTestOutputDirectory())));
+        addToExcludedSection(
+                convertToPathMatcherFileSeperator(
+                                
normalizedPath(build.getDirectory()).toString())
+                        + GLOB_SX_ALL_SUB_FILES,
+                false); // target by default
+        addToExcludedSection(
+                convertToPathMatcherFileSeperator(
+                                
normalizedPath(build.getOutputDirectory()).toString())
+                        + GLOB_SX_ALL_SUB_FILES,
+                false); // target/classes by default
+        addToExcludedSection(
+                convertToPathMatcherFileSeperator(
+                                
normalizedPath(build.getTestOutputDirectory()).toString())
+                        + GLOB_SX_ALL_SUB_FILES,
+                false); // target/test-classes by default
 
         List<Exclude> excludes = config.getGlobalExcludePaths();
         for (Exclude excludePath : excludes) {
-            filteredOutPaths.add(Paths.get(excludePath.getValue()));
+            addToExcludedSection(excludePath.getValue(), true);
         }
 
         for (String propertyName : properties.stringPropertyNames()) {
             if (propertyName.startsWith(CACHE_EXCLUDE_NAME)) {
                 String propertyValue = properties.getProperty(propertyName);
-                Path path = Paths.get(propertyValue);
-                filteredOutPaths.add(path);
+                addToExcludedSection(propertyValue, true);
+
                 if (LOGGER.isDebugEnabled()) {
                     LOGGER.debug(
-                            "Adding an excludePath from property '{}', values 
is '{}', path is '{}' ",
-                            propertyName,
-                            propertyValue,
-                            path);
+                            "Adding an excludePath from property '{}', value 
is '{}'", propertyName, propertyValue);
                 }
             }
         }
         CacheUtils.debugPrintCollection(
-                LOGGER,
-                filteredOutPaths,
-                "List of excluded paths (checked either by fileName or by 
startsWith prefix)",
-                "Path entry");
+                LOGGER, inputExcludePathMatcherString, "List of excluded glob 
patterns", "Pattern");
 
         this.fileComparator = new PathIgnoringCaseComparator();
     }
 
+    private String convertToPathMatcherFileSeperator(String path) {
+        return path.replace("\\", "/");
+    }
+
+    /**
+     * Add a value from the excluded section list to the directories and/or 
the filenames ban list.
+     * @param excludedValue a value from the exclude list
+     */
+    private void addToExcludedSection(String excludedValue, boolean 
addProjectBaseDir) {
+
+        String pathMatcherGlob = GLOB_PX
+                +
+                // Add the base directory to any input directly coming from 
user configuration
+                (addProjectBaseDir ? baseDirectoryGlob : "")
+                +
+                // If the glob start with "/", we remove it since it's already 
added in the added basedir glob
+                (excludedValue.startsWith("/") ? excludedValue.substring(1) : 
excludedValue);
+
+        // In order to skip unnecessary subtree dir walking, we use a 
different PathMatcher list for "directories" or
+        // "files + directories"
+        inputExcludePathMatchers.add(new 
TreeWalkerPathMatcher(pathMatcherGlob, false));
+
+        // Globs ending with "**" should end any sub-directory inspection
+        if (pathMatcherGlob.endsWith("**")) {
+            inputExcludeDirectoryPathMatchers.add(new 
TreeWalkerPathMatcher(pathMatcherGlob, true));
+        } else {
+            inputExcludeDirectoryPathMatchers.add(new 
TreeWalkerPathMatcher(pathMatcherGlob, false));
+        }
+
+        // If the pattern ends with "/**", the directory exclude list gets an 
extra version without this suffix.

Review Comment:
   Important for a folder containing a lot of files, as "node_modules" for 
example.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@maven.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to