Remove AMD hacks supporting multiple roots
With the builds merged, we get to simplify
the AMD!
Test: Cleaned up and ran existing unit tests in
AffectedModuleDetectorImplTest.kt
Change-Id: I1d079c841bc488344d1136ddc3b78d708e7aa143
diff --git a/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/AffectedModuleDetectorImplTest.kt b/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/AffectedModuleDetectorImplTest.kt
index 0968221..7f641e2 100644
--- a/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/AffectedModuleDetectorImplTest.kt
+++ b/buildSrc-tests/src/test/kotlin/androidx/build/dependencyTracker/AffectedModuleDetectorImplTest.kt
@@ -38,9 +38,11 @@
@JvmField
val attachLogsRule = AttachLogsTestRule()
private val logger = attachLogsRule.logger
+
@Rule
@JvmField
val tmpFolder = TemporaryFolder()
+
@Rule
@JvmField
val tmpFolder2 = TemporaryFolder()
@@ -58,23 +60,19 @@
private lateinit var p9: Project
private lateinit var p10: Project
private lateinit var p11: Project
- private lateinit var p12: Project
- private lateinit var p13: Project
- private lateinit var p14: Project
private val cobuiltTestPaths = setOf(setOf("cobuilt1", "cobuilt2"))
@Before
fun init() {
val tmpDir = tmpFolder.root
- val tmpDir2 = tmpFolder2.root
/*
Dummy project file tree:
- root ----------------- root2
- / | \ | | | | / | \
- p1 p7 p2 p8 p9 p10 p11 p12 p13 p14
+ root -----------------
+ / | \ | | | |
+ p1 p7 p2 p8 p9 p10 p11
/ \
p3 p5
/ \
@@ -82,36 +80,30 @@
Dependency forest:
- p1 p2 p7 p8 p9 p10 p11 p12 p14
- / \ / \ \
- p3 p5 p6 p13
+ p1 p2 p7 p8 p9 p10 p11
+ / \ / \
+ p3 p5 p6
/
p4
*/
root = ProjectBuilder.builder()
- .withProjectDir(tmpDir)
- .withName("root")
- .build()
- // Project Graph expects supportRootFolder.
- (root.properties.get("ext") as ExtraPropertiesExtension).set("supportRootFolder", tmpDir)
- root2 = ProjectBuilder.builder()
- .withProjectDir(tmpDir2)
- .withName("root2/ui")
+ .withProjectDir(tmpDir)
+ .withName("root")
.build()
// Project Graph expects supportRootFolder.
- (root2.properties.get("ext") as ExtraPropertiesExtension).set("supportRootFolder", tmpDir2)
+ (root.properties.get("ext") as ExtraPropertiesExtension).set("supportRootFolder", tmpDir)
p1 = ProjectBuilder.builder()
- .withProjectDir(tmpDir.resolve("p1"))
- .withName("p1")
- .withParent(root)
- .build()
+ .withProjectDir(tmpDir.resolve("p1"))
+ .withName("p1")
+ .withParent(root)
+ .build()
p2 = ProjectBuilder.builder()
- .withProjectDir(tmpDir.resolve("p2"))
- .withName("p2")
- .withParent(root)
- .build()
+ .withProjectDir(tmpDir.resolve("p2"))
+ .withName("p2")
+ .withParent(root)
+ .build()
p3 = ProjectBuilder.builder()
.withProjectDir(tmpDir.resolve("p1:p3"))
.withName("p3")
@@ -166,56 +158,48 @@
.withName("placeholder-tests")
.withParent(root)
.build()
- p12 = ProjectBuilder.builder()
- .withProjectDir(tmpDir2.resolve("compose"))
- .withName("compose")
- .withParent(root2)
- .build()
- // The existence of this project is a test for the benchmark use case. It is picked up by
- p13 = ProjectBuilder.builder() // allProjects in ui, even though it is in the root1 dir
- .withProjectDir(tmpDir.resolve("p10")) // and is symlinked as p10
- .withName("benchmark")
- .withParent(root2)
- .build()
- p14 = ProjectBuilder.builder()
- .withProjectDir(tmpDir2.resolve("p14"))
- .withName("placeholder-tests")
- .withParent(root2)
- .build()
}
@Test
fun noChangeCLs() {
val detector = AffectedModuleDetectorImpl(
- rootProject = root,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- cobuiltTestPaths = cobuiltTestPaths,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = emptyList())
+ rootProject = root,
+ logger = logger,
+ ignoreUnknownProjects = false,
+ projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
+ cobuiltTestPaths = cobuiltTestPaths,
+ injectedGitClient = MockGitClient(
+ lastMergeSha = "foo",
+ changedFiles = emptyList()
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
setOf(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)
- ))
+ )
+ )
}
@Test
fun noChangeCLsOnlyDependent() {
val detector = AffectedModuleDetectorImpl(
- rootProject = root,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.DEPENDENT_PROJECTS,
- cobuiltTestPaths = cobuiltTestPaths,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = emptyList())
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
+ rootProject = root,
+ logger = logger,
+ ignoreUnknownProjects = false,
+ projectSubset = ProjectSubset.DEPENDENT_PROJECTS,
+ cobuiltTestPaths = cobuiltTestPaths,
+ injectedGitClient = MockGitClient(
+ lastMergeSha = "foo",
+ changedFiles = emptyList()
+ )
+ )
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
setOf(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)
- ))
+ )
+ )
}
@Test
@@ -228,28 +212,36 @@
cobuiltTestPaths = cobuiltTestPaths,
injectedGitClient = MockGitClient(
lastMergeSha = "foo",
- changedFiles = emptyList())
+ changedFiles = emptyList()
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p11)
- ))
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
+ setOf(p11)
+ )
+ )
}
@Test
fun changeInOne() {
val detector = AffectedModuleDetectorImpl(
- rootProject = root,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- cobuiltTestPaths = cobuiltTestPaths,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath("p1", "foo.java")))
+ rootProject = root,
+ logger = logger,
+ ignoreUnknownProjects = false,
+ projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
+ cobuiltTestPaths = cobuiltTestPaths,
+ injectedGitClient = MockGitClient(
+ lastMergeSha = "foo",
+ changedFiles = listOf(convertToFilePath("p1", "foo.java"))
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
setOf(p1, p3, p4, p5, p11)
- ))
+ )
+ )
}
@Test
@@ -262,11 +254,15 @@
cobuiltTestPaths = cobuiltTestPaths,
injectedGitClient = MockGitClient(
lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath("p1", "foo.java")))
+ changedFiles = listOf(convertToFilePath("p1", "foo.java"))
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p3, p4, p5, p11)
- ))
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
+ setOf(p3, p4, p5, p11)
+ )
+ )
}
@Test
@@ -279,11 +275,15 @@
cobuiltTestPaths = cobuiltTestPaths,
injectedGitClient = MockGitClient(
lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath("p1", "foo.java")))
+ changedFiles = listOf(convertToFilePath("p1", "foo.java"))
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p1, p11)
- ))
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
+ setOf(p1, p11)
+ )
+ )
}
@Test
@@ -298,11 +298,16 @@
lastMergeSha = "foo",
changedFiles = listOf(
convertToFilePath("p1", "foo.java"),
- convertToFilePath("p2", "bar.java")))
+ convertToFilePath("p2", "bar.java")
+ )
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
setOf(p1, p2, p3, p4, p5, p6, p11)
- ))
+ )
+ )
}
@Test
@@ -317,11 +322,16 @@
lastMergeSha = "foo",
changedFiles = listOf(
convertToFilePath("p1", "foo.java"),
- convertToFilePath("p2", "bar.java")))
+ convertToFilePath("p2", "bar.java")
+ )
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p3, p4, p5, p6, p11)
- ))
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
+ setOf(p3, p4, p5, p6, p11)
+ )
+ )
}
@Test
@@ -336,15 +346,20 @@
lastMergeSha = "foo",
changedFiles = listOf(
convertToFilePath("p1", "foo.java"),
- convertToFilePath("p2", "bar.java")))
+ convertToFilePath("p2", "bar.java")
+ )
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p1, p2, p11)
- ))
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
+ setOf(p1, p2, p11)
+ )
+ )
}
@Test
- fun changeInRoot_normalBuild() {
+ fun changeInRoot() {
val detector = AffectedModuleDetectorImpl(
rootProject = root,
logger = logger,
@@ -353,32 +368,19 @@
cobuiltTestPaths = cobuiltTestPaths,
injectedGitClient = MockGitClient(
lastMergeSha = "foo",
- changedFiles = listOf("foo.java"))
+ changedFiles = listOf("foo.java")
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
setOf(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)
- ))
- }
-
- @Test
- fun changeInRoot_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- cobuiltTestPaths = cobuiltTestPaths,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf("foo.java"))
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p12, p13, p14)
- ))
}
@Test
- fun changeInRootOnlyDependent_normalBuild() {
+ fun changeInRootOnlyDependent() {
val detector = AffectedModuleDetectorImpl(
rootProject = root,
logger = logger,
@@ -387,49 +389,19 @@
cobuiltTestPaths = cobuiltTestPaths,
injectedGitClient = MockGitClient(
lastMergeSha = "foo",
- changedFiles = listOf("foo.java"))
+ changedFiles = listOf("foo.java")
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)
- ))
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
+ setOf(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)
+ )
+ )
}
@Test
- fun changeInRootOnlyDependent_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.DEPENDENT_PROJECTS,
- cobuiltTestPaths = cobuiltTestPaths,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf("foo.java"))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p12, p13, p14)
- ))
- }
-
- @Test
- fun changeInRootOnlyChanged_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.CHANGED_PROJECTS,
- cobuiltTestPaths = cobuiltTestPaths,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf("foo.java"))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p14)
- ))
- }
-
- @Test
- fun changeInRootOnlyChanged_normalBuild() {
+ fun changeInRootOnlyChanged() {
val detector = AffectedModuleDetectorImpl(
rootProject = root,
logger = logger,
@@ -438,11 +410,15 @@
cobuiltTestPaths = cobuiltTestPaths,
injectedGitClient = MockGitClient(
lastMergeSha = "foo",
- changedFiles = listOf("foo.java"))
+ changedFiles = listOf("foo.java")
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p11)
- ))
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
+ setOf(p11)
+ )
+ )
}
@Test
@@ -455,11 +431,15 @@
cobuiltTestPaths = cobuiltTestPaths,
injectedGitClient = MockGitClient(
lastMergeSha = "foo",
- changedFiles = listOf("foo.java", convertToFilePath("p7", "bar.java")))
+ changedFiles = listOf("foo.java", convertToFilePath("p7", "bar.java"))
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p7, p11)
- ))
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
+ setOf(p7, p11)
+ )
+ )
}
@Test
@@ -472,11 +452,15 @@
cobuiltTestPaths = cobuiltTestPaths,
injectedGitClient = MockGitClient(
lastMergeSha = "foo",
- changedFiles = listOf("foo.java", convertToFilePath("p7", "bar.java")))
+ changedFiles = listOf("foo.java", convertToFilePath("p7", "bar.java"))
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)
- ))
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
+ setOf(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)
+ )
+ )
}
@Test
@@ -489,12 +473,19 @@
cobuiltTestPaths = cobuiltTestPaths,
injectedGitClient = MockGitClient(
lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "p8", "foo.java")))
+ changedFiles = listOf(
+ convertToFilePath(
+ "p8", "foo.java"
+ )
+ )
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p8, p9, p11)
- ))
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
+ setOf(p8, p9, p11)
+ )
+ )
}
@Test
@@ -507,12 +498,19 @@
cobuiltTestPaths = cobuiltTestPaths,
injectedGitClient = MockGitClient(
lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "p8", "foo.java")))
+ changedFiles = listOf(
+ convertToFilePath(
+ "p8", "foo.java"
+ )
+ )
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p11)
- ))
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
+ setOf(p11)
+ )
+ )
}
@Test
@@ -525,12 +523,19 @@
cobuiltTestPaths = cobuiltTestPaths,
injectedGitClient = MockGitClient(
lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "p8", "foo.java")))
+ changedFiles = listOf(
+ convertToFilePath(
+ "p8", "foo.java"
+ )
+ )
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p8, p9, p11)
- ))
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
+ setOf(p8, p9, p11)
+ )
+ )
}
@Test(expected = IllegalStateException::class)
@@ -543,8 +548,12 @@
cobuiltTestPaths = setOf(setOf("cobuilt1", "cobuilt2", "cobuilt3")),
injectedGitClient = MockGitClient(
lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "p8", "foo.java")))
+ changedFiles = listOf(
+ convertToFilePath(
+ "p8", "foo.java"
+ )
+ )
+ )
)
// This should trigger IllegalStateException due to missing cobuilt3
detector.affectedProjects
@@ -560,498 +569,20 @@
cobuiltTestPaths = setOf(setOf("cobuilt3", "cobuilt4", "cobuilt5")),
injectedGitClient = MockGitClient(
lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "p8", "foo.java")))
+ changedFiles = listOf(
+ convertToFilePath(
+ "p8", "foo.java"
+ )
+ )
+ )
)
// There should be no exception thrown here because *all* cobuilts are missing.
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p8, p11)
- ))
- }
-
- @Test
- fun changeInUi_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "compose", "foo.java")))
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
+ setOf(p8, p11)
+ )
)
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p12, p14)
- ))
- }
-
- @Test
- fun changeInUiOnlyChanged_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.CHANGED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "compose", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p12, p14)
- ))
- }
-
- @Test
- fun changeInUiOnlyDependent_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.DEPENDENT_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "compose", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p14)
- ))
- }
-
- @Test
- fun changeInUi_normalBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "compose", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p11)
- ))
- }
-
- @Test
- fun changeInUiOnlyChanged_normalBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.CHANGED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "compose", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p11)
- ))
- }
-
- @Test
- fun changeInUiOnlyDependent_normalBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.DEPENDENT_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "compose", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p11)
- ))
- }
-
- @Test
- fun changeInNormal_normalBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "p8", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p8, p11)
- ))
- }
-
- @Test
- fun changeInNormalOnlyChanged_normalBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.CHANGED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "p8", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p8, p11)
- ))
- }
- @Test
- fun changeInNormalOnlyDependent_normalBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.DEPENDENT_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "p8", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p11)
- ))
- }
-
- @Test
- fun changeInNormal_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "p8", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p14)
- ))
- }
-
- @Test
- fun changeInNormalOnlyChanged_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.CHANGED_PROJECTS,
- cobuiltTestPaths = setOf(setOf("cobuilt3", "cobuilt4", "cobuilt5")),
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "p8", "foo.java")))
- )
- // There should be no exception thrown here because *all* cobuilts are missing.
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p14)
- ))
- }
-
- @Test
- fun changeInNormalOnlyDependent_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.CHANGED_PROJECTS,
- cobuiltTestPaths = setOf(setOf("cobuilt3", "cobuilt4", "cobuilt5")),
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(convertToFilePath(
- "p8", "foo.java")))
- )
- // There should be no exception thrown here because *all* cobuilts are missing.
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p14)
- ))
- }
-
- @Test
- fun changeInBoth_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(
- convertToFilePath("p7", "foo.java"),
- convertToFilePath("compose", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p12, p14)
- ))
- }
-
- @Test
- fun changeInBothOnlyChanged_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.CHANGED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(
- convertToFilePath("p7", "foo.java"),
- convertToFilePath("compose", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p12, p14)
- ))
- }
-
- @Test
- fun changeInBothOnlyDependent_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.DEPENDENT_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(
- convertToFilePath("p7", "foo.java"),
- convertToFilePath("compose", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p14) // a change to a project in the normal build doesn't affect the ui build
- )) // and compose is in changed and so excluded from dependent
- }
-
- @Test
- fun changeInBoth_normalBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(
- convertToFilePath("p7", "foo.java"),
- convertToFilePath("compose", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p7, p11) // a change in compose is known not to matter to the normal build
- ))
- }
-
- @Test
- fun changeInBothOnlyChanged_normalBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.CHANGED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(
- convertToFilePath("p7", "foo.java"),
- convertToFilePath("compose", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p7, p11)
- ))
- }
-
- @Test
- fun changeInBothOnlyDependent_normalBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.DEPENDENT_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(
- convertToFilePath("p7", "foo.java"),
- convertToFilePath("compose", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p11) // a change in compose is known not to matter to the normal build
- )) // and p7 is in changed and so not in dependent
- }
-
- @Test
- fun changeInNormalRoot_normalBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(
- convertToFilePath("gradle.properties")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)
- )) // a change in a file in the root of the build is assumed to affect all projects
- }
-
- @Test
- fun changeInNormalRoot_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(
- convertToFilePath("..", "gradle.properties")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p14) // a change in androidx root normally doesn't affect the ui build
- )) // unless otherwise specified (e.g. gradlew)
- }
-
- @Test
- fun changeInUiRoot_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(
- convertToFilePath("gradle.properties")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p12, p13, p14)
- )) // a change in ui/root affects all ui projects
- }
-
- @Test
- fun changeInBuildSrc_normalBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(
- convertToFilePath("buildSrc", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)
- )) // a change to buildSrc affects everything in both builds
- }
-
- @Test
- fun changeInBuildSrc_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(
- convertToFilePath("..", "buildSrc", "foo.java")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p12, p13, p14) // a change to buildSrc affects everything in both builds
- ))
- }
-
- @Test
- fun changeInBusytown_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(
- convertToFilePath("..", "busytown", "foo.sh")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p12, p13, p14) // a change to busytown affects everything in both builds
- ))
- }
-
- @Test
- fun changeInUiGradlew_normalBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(
- convertToFilePath("ui", "gradlew")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p11) // a change to ui gradlew affects only the ui build
- ))
- }
-
- @Test
- fun changeInNormalGradlew_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(
- convertToFilePath("..", "gradlew")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p12, p13, p14) // a change to root gradlew affects everything in both builds
- ))
- }
-
- @Test
- fun changeInDevelopment_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(
- convertToFilePath("..", "development", "foo.sh")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p12, p13, p14) // a change to development affects everything in both builds
- ))
- }
-
- @Test
- fun changeInFrameworks_uiBuild() {
- val detector = AffectedModuleDetectorImpl(
- rootProject = root2,
- logger = logger,
- ignoreUnknownProjects = false,
- projectSubset = ProjectSubset.ALL_AFFECTED_PROJECTS,
- injectedGitClient = MockGitClient(
- lastMergeSha = "foo",
- changedFiles = listOf(
- convertToFilePath("..", "frameworks", "sample.thing?")))
- )
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p12, p13, p14) // not sure what this folder is for, but it affects all of both?
- ))
}
@Test
@@ -1067,21 +598,33 @@
)
)
// Verify expectations on affected projects
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p1, p11)
- ))
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
+ setOf(p1, p11)
+ )
+ )
// Test changed
- MatcherAssert.assertThat(detector.getSubset(p1), CoreMatchers.`is`(
- ProjectSubset.CHANGED_PROJECTS
- ))
+ MatcherAssert.assertThat(
+ detector.getSubset(p1),
+ CoreMatchers.`is`(
+ ProjectSubset.CHANGED_PROJECTS
+ )
+ )
// Test dependent
- MatcherAssert.assertThat(detector.getSubset(p3), CoreMatchers.`is`(
- ProjectSubset.DEPENDENT_PROJECTS
- ))
+ MatcherAssert.assertThat(
+ detector.getSubset(p3),
+ CoreMatchers.`is`(
+ ProjectSubset.DEPENDENT_PROJECTS
+ )
+ )
// Random unrelated project should return none
- MatcherAssert.assertThat(detector.getSubset(p12), CoreMatchers.`is`(
- ProjectSubset.NONE
- ))
+ MatcherAssert.assertThat(
+ detector.getSubset(p7),
+ CoreMatchers.`is`(
+ ProjectSubset.NONE
+ )
+ )
}
@Test
@@ -1097,21 +640,33 @@
)
)
// Verify expectations on affected projects
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p3, p4, p5, p11)
- ))
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
+ setOf(p3, p4, p5, p11)
+ )
+ )
// Test changed
- MatcherAssert.assertThat(detector.getSubset(p1), CoreMatchers.`is`(
- ProjectSubset.CHANGED_PROJECTS
- ))
+ MatcherAssert.assertThat(
+ detector.getSubset(p1),
+ CoreMatchers.`is`(
+ ProjectSubset.CHANGED_PROJECTS
+ )
+ )
// Test dependent
- MatcherAssert.assertThat(detector.getSubset(p3), CoreMatchers.`is`(
- ProjectSubset.DEPENDENT_PROJECTS
- ))
+ MatcherAssert.assertThat(
+ detector.getSubset(p3),
+ CoreMatchers.`is`(
+ ProjectSubset.DEPENDENT_PROJECTS
+ )
+ )
// Random unrelated project should return none
- MatcherAssert.assertThat(detector.getSubset(p12), CoreMatchers.`is`(
- ProjectSubset.NONE
- ))
+ MatcherAssert.assertThat(
+ detector.getSubset(p7),
+ CoreMatchers.`is`(
+ ProjectSubset.NONE
+ )
+ )
}
@Test
@@ -1127,21 +682,33 @@
)
)
// Verify expectations on affected projects
- MatcherAssert.assertThat(detector.affectedProjects, CoreMatchers.`is`(
- setOf(p1, p3, p4, p5, p11)
- ))
+ MatcherAssert.assertThat(
+ detector.affectedProjects,
+ CoreMatchers.`is`(
+ setOf(p1, p3, p4, p5, p11)
+ )
+ )
// Test changed
- MatcherAssert.assertThat(detector.getSubset(p1), CoreMatchers.`is`(
- ProjectSubset.CHANGED_PROJECTS
- ))
+ MatcherAssert.assertThat(
+ detector.getSubset(p1),
+ CoreMatchers.`is`(
+ ProjectSubset.CHANGED_PROJECTS
+ )
+ )
// Test dependent
- MatcherAssert.assertThat(detector.getSubset(p3), CoreMatchers.`is`(
- ProjectSubset.DEPENDENT_PROJECTS
- ))
+ MatcherAssert.assertThat(
+ detector.getSubset(p3),
+ CoreMatchers.`is`(
+ ProjectSubset.DEPENDENT_PROJECTS
+ )
+ )
// Random unrelated project should return none
- MatcherAssert.assertThat(detector.getSubset(p12), CoreMatchers.`is`(
- ProjectSubset.NONE
- ))
+ MatcherAssert.assertThat(
+ detector.getSubset(p7),
+ CoreMatchers.`is`(
+ ProjectSubset.NONE
+ )
+ )
}
// For both Linux/Windows
diff --git a/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt b/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
index fb5945d..4eb3edb 100644
--- a/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/dependencyTracker/AffectedModuleDetector.kt
@@ -29,7 +29,6 @@
import org.gradle.api.Task
import org.gradle.api.invocation.Gradle
import org.gradle.api.logging.Logger
-import java.io.File
/**
* The subsets we allow the projects to be partitioned into.
@@ -86,10 +85,10 @@
companion object {
private const val ROOT_PROP_NAME = "affectedModuleDetector"
private const val LOG_FILE_NAME = "affected_module_detector_log.txt"
- public const val ENABLE_ARG = "androidx.enableAffectedModuleDetection"
- public const val DEPENDENT_PROJECTS_ARG = "androidx.dependentProjects"
- public const val CHANGED_PROJECTS_ARG = "androidx.changedProjects"
- public const val BASE_COMMIT_ARG = "androidx.affectedModuleDetector.baseCommit"
+ const val ENABLE_ARG = "androidx.enableAffectedModuleDetection"
+ const val DEPENDENT_PROJECTS_ARG = "androidx.dependentProjects"
+ const val CHANGED_PROJECTS_ARG = "androidx.changedProjects"
+ const val BASE_COMMIT_ARG = "androidx.affectedModuleDetector.baseCommit"
@JvmStatic
fun configure(gradle: Gradle, rootProject: Project) {
val enabled = rootProject.hasProperty(ENABLE_ARG)
@@ -355,12 +354,10 @@
var buildAll = false
// Should only trigger if there are no changedFiles
- if (changedProjects.size == alwaysBuild.size && unknownFiles.isEmpty()) buildAll =
- true
- unknownFiles.forEach {
- if (affectsAllOfThisBuild(it) || affectsAllOfBothBuilds(it)) {
- buildAll = true
- }
+ if (changedProjects.size == alwaysBuild.size && unknownFiles.isEmpty()) {
+ buildAll = true
+ } else if (unknownFiles.isNotEmpty()) {
+ buildAll = true
}
logger?.info(
"unknownFiles: $unknownFiles, changedProjects: $changedProjects, buildAll: " +
@@ -396,23 +393,6 @@
}
}
- // TODO: simplify when resolving b/132901339 when there are no longer two builds
- private val ROOT_FILES_OR_FOLDERS_AFFECTING_ALL_OF_BOTH_BUILDS = listOf(
- "buildSrc", "busytown", "development", "frameworks", "gradlew" // paths from root
- ) // there are no non-root objects affecting both builds that aren't projects (benchmark)
- private val NON_ROOT_NON_PROJECTS_AFFECTING_ALL_OF_ONE_BUILD = listOf(
- "gradle/wrapper"
- )
- private fun affectsAllOfThisBuild(file: String): Boolean {
- return !file.contains(File.separatorChar) ||
- NON_ROOT_NON_PROJECTS_AFFECTING_ALL_OF_ONE_BUILD.any { file.startsWith(it) }
- } // objects in root are assumed to affect all projects in the build
- private fun affectsAllOfBothBuilds(file: String): Boolean {
- return ROOT_FILES_OR_FOLDERS_AFFECTING_ALL_OF_BOTH_BUILDS.any {
- file.startsWith("../$it") || file.startsWith(it)
- }
- } // if you are in the ui build, the path is e.g. ../busytown
-
private fun lookupProjectSetsFromPaths(allSets: Set<Set<String>>): Set<Set<Project>> {
return allSets.map { setPaths ->
var setExists = false