From 78f10b7c346daff31f5ab9d71bdd12ff592939e3 Mon Sep 17 00:00:00 2001 From: Samrat Mukherjee Date: Wed, 8 Oct 2025 12:37:06 +0530 Subject: [PATCH 1/7] Correctly parse wildcard configuration properties --- src/main/resources/init-script-gradle.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/init-script-gradle.ftl b/src/main/resources/init-script-gradle.ftl index 28b996fe3e..5fe3265a84 100644 --- a/src/main/resources/init-script-gradle.ftl +++ b/src/main/resources/init-script-gradle.ftl @@ -49,7 +49,7 @@ gradle.allprojects { // Prepare configuration names def configurationNames = getFilteredConfigurationNames(currentProject, - '${excludedConfigurationNames}', '${includedConfigurationNames}') + """${excludedConfigurationNames}""", """${includedConfigurationNames}""") def selectedConfigs = [] configurationNames.each { name -> From 1eedd0333bf0d8e2f5e68a623cda49258d0ebac0 Mon Sep 17 00:00:00 2001 From: Samrat Mukherjee Date: Thu, 9 Oct 2025 00:43:25 +0530 Subject: [PATCH 2/7] Resolves the parsing issue for all relevant filters. --- src/main/resources/init-script-gradle.ftl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/init-script-gradle.ftl b/src/main/resources/init-script-gradle.ftl index 5fe3265a84..a397124683 100644 --- a/src/main/resources/init-script-gradle.ftl +++ b/src/main/resources/init-script-gradle.ftl @@ -8,10 +8,10 @@ import org.gradle.api.Task import org.gradle.api.execution.TaskExecutionListener import org.gradle.api.tasks.TaskState -Set projectNameExcludeFilter = convertStringToSet('${excludedProjectNames}') -Set projectNameIncludeFilter = convertStringToSet('${includedProjectNames}') -Set projectPathExcludeFilter = convertStringToSet('${excludedProjectPaths}') -Set projectPathIncludeFilter = convertStringToSet('${includedProjectPaths}') +Set projectNameExcludeFilter = convertStringToSet("""${excludedProjectNames}""") +Set projectNameIncludeFilter = convertStringToSet("""${includedProjectNames}""") +Set projectPathExcludeFilter = convertStringToSet("""${excludedProjectPaths}""") +Set projectPathIncludeFilter = convertStringToSet("""${includedProjectPaths}""") Boolean rootOnly = Boolean.parseBoolean("${rootOnlyOption}") gradle.allprojects { From fe3393dca920b6cc592b7be54c8c51b70797f9f5 Mon Sep 17 00:00:00 2001 From: Samrat Mukherjee Date: Sat, 11 Oct 2025 15:51:11 +0530 Subject: [PATCH 3/7] fix config filtering issue --- src/main/resources/init-script-gradle.ftl | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/resources/init-script-gradle.ftl b/src/main/resources/init-script-gradle.ftl index a397124683..51f619064f 100644 --- a/src/main/resources/init-script-gradle.ftl +++ b/src/main/resources/init-script-gradle.ftl @@ -8,10 +8,10 @@ import org.gradle.api.Task import org.gradle.api.execution.TaskExecutionListener import org.gradle.api.tasks.TaskState -Set projectNameExcludeFilter = convertStringToSet("""${excludedProjectNames}""") -Set projectNameIncludeFilter = convertStringToSet("""${includedProjectNames}""") -Set projectPathExcludeFilter = convertStringToSet("""${excludedProjectPaths}""") -Set projectPathIncludeFilter = convertStringToSet("""${includedProjectPaths}""") +Set projectNameExcludeFilter = convertStringToSet('${excludedProjectNames}') +Set projectNameIncludeFilter = convertStringToSet('${includedProjectNames}') +Set projectPathExcludeFilter = convertStringToSet('${excludedProjectPaths}') +Set projectPathIncludeFilter = convertStringToSet('${includedProjectPaths}') Boolean rootOnly = Boolean.parseBoolean("${rootOnlyOption}") gradle.allprojects { @@ -49,7 +49,7 @@ gradle.allprojects { // Prepare configuration names def configurationNames = getFilteredConfigurationNames(currentProject, - """${excludedConfigurationNames}""", """${includedConfigurationNames}""") + '${excludedConfigurationNames}', '${includedConfigurationNames}') def selectedConfigs = [] configurationNames.each { name -> @@ -64,11 +64,16 @@ gradle.allprojects { } } - // Check if the project should be included in results - def shouldIncludeProject = (rootOnly && isRootProject) || + println "DEBUG: Selected configurations for project " + projectName + ": " + selectedConfigs.collect { it.name } + + // Check if the project should be included based on project-level filters + def projectMatchesFilters = (rootOnly && isRootProject) || (!rootOnly && shouldInclude(projectNameExcludeFilter, projectNameIncludeFilter, projectName) && shouldInclude(projectPathExcludeFilter, projectPathIncludeFilter, projectPath)) + // A project is only included if it matches project filters AND has configurations that match config filters. + def shouldIncludeProject = projectMatchesFilters && !selectedConfigs.isEmpty() + // Capture output file path during configuration def projectFilePathConfig = computeProjectFilePath(projectPath, extractionDir, rootProject) @@ -78,6 +83,7 @@ gradle.allprojects { // Set the configurations at configuration time if possible if (!selectedConfigs.isEmpty()) { dependenciesTask.configurations = selectedConfigs + println "DEBUG: Configurations set for dependencies task in project " + projectName + ": " + dependenciesTask.configurations.collect { it.name } } // Set the output file at configuration time if possible From 55731d4025816a72ea90b78aef8b92b0d46a5fc5 Mon Sep 17 00:00:00 2001 From: Samrat Mukherjee Date: Mon, 13 Oct 2025 14:43:13 +0530 Subject: [PATCH 4/7] handle single quote issues in ftl --- src/main/resources/init-script-gradle.ftl | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/resources/init-script-gradle.ftl b/src/main/resources/init-script-gradle.ftl index 51f619064f..a021e876db 100644 --- a/src/main/resources/init-script-gradle.ftl +++ b/src/main/resources/init-script-gradle.ftl @@ -47,9 +47,19 @@ gradle.allprojects { def projectVersion = currentProject.version.toString() def projectParent = currentProject.parent ? currentProject.parent.toString() : "none" - // Prepare configuration names + // Prepare configuration names (handles single quotes issues ) def configurationNames = getFilteredConfigurationNames(currentProject, - '${excludedConfigurationNames}', '${includedConfigurationNames}') + <#if excludedConfigurationNames?starts_with("'") && excludedConfigurationNames?ends_with("'")> + ${excludedConfigurationNames} + <#else> + '${excludedConfigurationNames}' + , + <#if includedConfigurationNames?starts_with("'") && includedConfigurationNames?ends_with("'")> + ${includedConfigurationNames} + <#else> + '${includedConfigurationNames}' + + ) def selectedConfigs = [] configurationNames.each { name -> From 447aaa863e14ed8226a75ba1eee14e4f72857931 Mon Sep 17 00:00:00 2001 From: Samrat Mukherjee Date: Mon, 13 Oct 2025 15:00:38 +0530 Subject: [PATCH 5/7] conditional quoting logic applied to all identified variables --- src/main/resources/init-script-gradle.ftl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/resources/init-script-gradle.ftl b/src/main/resources/init-script-gradle.ftl index a021e876db..ffeebffa67 100644 --- a/src/main/resources/init-script-gradle.ftl +++ b/src/main/resources/init-script-gradle.ftl @@ -8,10 +8,10 @@ import org.gradle.api.Task import org.gradle.api.execution.TaskExecutionListener import org.gradle.api.tasks.TaskState -Set projectNameExcludeFilter = convertStringToSet('${excludedProjectNames}') -Set projectNameIncludeFilter = convertStringToSet('${includedProjectNames}') -Set projectPathExcludeFilter = convertStringToSet('${excludedProjectPaths}') -Set projectPathIncludeFilter = convertStringToSet('${includedProjectPaths}') +Set projectNameExcludeFilter = convertStringToSet(<#if excludedProjectNames?starts_with("'") && excludedProjectNames?ends_with("'")>${excludedProjectNames}<#else>'${excludedProjectNames}') +Set projectNameIncludeFilter = convertStringToSet(<#if includedProjectNames?starts_with("'") && includedProjectNames?ends_with("'")>${includedProjectNames}<#else>'${includedProjectNames}') +Set projectPathExcludeFilter = convertStringToSet(<#if excludedProjectPaths?starts_with("'") && excludedProjectPaths?ends_with("'")>${excludedProjectPaths}<#else>'${excludedProjectPaths}') +Set projectPathIncludeFilter = convertStringToSet(<#if includedProjectPaths?starts_with("'") && includedProjectPaths?ends_with("'")>${includedProjectPaths}<#else>'${includedProjectPaths}') Boolean rootOnly = Boolean.parseBoolean("${rootOnlyOption}") gradle.allprojects { From 268e27f480a061883e77efe3b2f3ce07b003b89d Mon Sep 17 00:00:00 2001 From: Samrat Mukherjee Date: Mon, 13 Oct 2025 15:04:18 +0530 Subject: [PATCH 6/7] remove println statements --- src/main/resources/init-script-gradle.ftl | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/resources/init-script-gradle.ftl b/src/main/resources/init-script-gradle.ftl index ffeebffa67..295e81e8f7 100644 --- a/src/main/resources/init-script-gradle.ftl +++ b/src/main/resources/init-script-gradle.ftl @@ -74,8 +74,6 @@ gradle.allprojects { } } - println "DEBUG: Selected configurations for project " + projectName + ": " + selectedConfigs.collect { it.name } - // Check if the project should be included based on project-level filters def projectMatchesFilters = (rootOnly && isRootProject) || (!rootOnly && shouldInclude(projectNameExcludeFilter, projectNameIncludeFilter, projectName) && @@ -93,7 +91,6 @@ gradle.allprojects { // Set the configurations at configuration time if possible if (!selectedConfigs.isEmpty()) { dependenciesTask.configurations = selectedConfigs - println "DEBUG: Configurations set for dependencies task in project " + projectName + ": " + dependenciesTask.configurations.collect { it.name } } // Set the output file at configuration time if possible From e71278d7c6d3f1065eb108d66cd781f96ead86b1 Mon Sep 17 00:00:00 2001 From: Samrat Mukherjee Date: Tue, 14 Oct 2025 20:46:58 +0530 Subject: [PATCH 7/7] escaping single quotes --- src/main/resources/init-script-gradle.ftl | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/main/resources/init-script-gradle.ftl b/src/main/resources/init-script-gradle.ftl index 295e81e8f7..e526b625d8 100644 --- a/src/main/resources/init-script-gradle.ftl +++ b/src/main/resources/init-script-gradle.ftl @@ -8,10 +8,10 @@ import org.gradle.api.Task import org.gradle.api.execution.TaskExecutionListener import org.gradle.api.tasks.TaskState -Set projectNameExcludeFilter = convertStringToSet(<#if excludedProjectNames?starts_with("'") && excludedProjectNames?ends_with("'")>${excludedProjectNames}<#else>'${excludedProjectNames}') -Set projectNameIncludeFilter = convertStringToSet(<#if includedProjectNames?starts_with("'") && includedProjectNames?ends_with("'")>${includedProjectNames}<#else>'${includedProjectNames}') -Set projectPathExcludeFilter = convertStringToSet(<#if excludedProjectPaths?starts_with("'") && excludedProjectPaths?ends_with("'")>${excludedProjectPaths}<#else>'${excludedProjectPaths}') -Set projectPathIncludeFilter = convertStringToSet(<#if includedProjectPaths?starts_with("'") && includedProjectPaths?ends_with("'")>${includedProjectPaths}<#else>'${includedProjectPaths}') +Set projectNameExcludeFilter = convertStringToSet('${excludedProjectNames?replace("\\", "\\\\")?replace("\'", "\\\'")}') +Set projectNameIncludeFilter = convertStringToSet('${includedProjectNames?replace("\\", "\\\\")?replace("\'", "\\\'")}') +Set projectPathExcludeFilter = convertStringToSet('${excludedProjectPaths?replace("\\", "\\\\")?replace("\'", "\\\'")}') +Set projectPathIncludeFilter = convertStringToSet('${includedProjectPaths?replace("\\", "\\\\")?replace("\'", "\\\'")}') Boolean rootOnly = Boolean.parseBoolean("${rootOnlyOption}") gradle.allprojects { @@ -49,16 +49,8 @@ gradle.allprojects { // Prepare configuration names (handles single quotes issues ) def configurationNames = getFilteredConfigurationNames(currentProject, - <#if excludedConfigurationNames?starts_with("'") && excludedConfigurationNames?ends_with("'")> - ${excludedConfigurationNames} - <#else> - '${excludedConfigurationNames}' - , - <#if includedConfigurationNames?starts_with("'") && includedConfigurationNames?ends_with("'")> - ${includedConfigurationNames} - <#else> - '${includedConfigurationNames}' - + '${excludedConfigurationNames?replace("\\", "\\\\")?replace("\'", "\\\'")}', + '${includedConfigurationNames?replace("\\", "\\\\")?replace("\'", "\\\'")}' ) def selectedConfigs = []