Merge "GMavenZipTask shouldAddGroupConstraints property" into androidx-main
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXGradleProperties.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXGradleProperties.kt
index d762bce..d373a4f 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXGradleProperties.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXGradleProperties.kt
@@ -19,6 +19,7 @@
 import androidx.build.dependencyTracker.AffectedModuleDetector
 import org.gradle.api.GradleException
 import org.gradle.api.Project
+import org.gradle.api.provider.Provider
 
 /**
  * Whether to enable constraints for projects in same-version groups
@@ -185,8 +186,7 @@
  * Whether to enable constraints for projects in same-version groups
  * See the property definition for more details
  */
-fun Project.shouldAddGroupConstraints(): Boolean =
-    findBooleanProperty(ADD_GROUP_CONSTRAINTS) ?: false
+fun Project.shouldAddGroupConstraints() = booleanPropertyProvider(ADD_GROUP_CONSTRAINTS)
 
 /**
  * Returns alternative project url that will be used as "url" property
@@ -280,3 +280,9 @@
     findBooleanProperty(ALLOW_CUSTOM_COMPILE_SDK) ?: true
 
 fun Project.findBooleanProperty(propName: String) = (findProperty(propName) as? String)?.toBoolean()
+
+fun Project.booleanPropertyProvider(propName: String): Provider<Boolean> {
+    return project.providers.gradleProperty(propName).map { s ->
+        s.toBoolean()
+    }.orElse(false)
+}
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
index 0737dd3..f47436e 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/AndroidXImplPlugin.kt
@@ -872,7 +872,7 @@
     private fun Project.configureConstraintsWithinGroup(
         extension: AndroidXExtension
     ) {
-        if (!project.shouldAddGroupConstraints()) {
+        if (!project.shouldAddGroupConstraints().get()) {
             return
         }
         project.afterEvaluate {
diff --git a/buildSrc/private/src/main/kotlin/androidx/build/Release.kt b/buildSrc/private/src/main/kotlin/androidx/build/Release.kt
index a6afb13..fd1594d 100644
--- a/buildSrc/private/src/main/kotlin/androidx/build/Release.kt
+++ b/buildSrc/private/src/main/kotlin/androidx/build/Release.kt
@@ -23,6 +23,7 @@
 import org.gradle.api.Project
 import org.gradle.api.Task
 import org.gradle.api.file.DuplicatesStrategy
+import org.gradle.api.provider.Provider
 import org.gradle.api.tasks.Input
 import org.gradle.api.tasks.Internal
 import org.gradle.api.tasks.TaskAction
@@ -59,11 +60,22 @@
     @Transient
     val verifyTask: TaskProvider<VerifyGMavenZipTask>
 
+    /**
+     * Whether this build adds automatic constraints between projects in the same group
+     */
+    @get:Input
+    val shouldAddGroupConstraints: Provider<Boolean>
+
     init {
         // multiple artifacts in the same group might have the same maven-metadata.xml
         duplicatesStrategy = DuplicatesStrategy.EXCLUDE
-        if (!project.shouldAddGroupConstraints() && !isSnapshotBuild()) {
-            doFirst {
+
+        shouldAddGroupConstraints = project.shouldAddGroupConstraints()
+
+        val zipTask = this
+
+        zipTask.doFirst {
+            if (!zipTask.shouldAddGroupConstraints.get() && !isSnapshotBuild()) {
                 throw GradleException(
                     """
                     Cannot publish artifacts without setting -P$ADD_GROUP_CONSTRAINTS=true
@@ -78,8 +90,6 @@
             }
         }
 
-        val zipTask = this
-
         verifyTask = project.maybeRegister(
             name = "verify${zipTask.name}",
             onConfigure = { verifierTask ->
@@ -89,7 +99,7 @@
             }
         )
         if (!isPresubmitBuild()) {
-            finalizedBy(verifyTask)
+            zipTask.finalizedBy(verifyTask)
         }
     }