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