Skip to content

Commit c322669

Browse files
authored
Merge pull request #2995 from mkurz/check_3-level-plugins
Check up to 5 nested project folders
2 parents a6ff326 + ed1fae1 commit c322669

File tree

4 files changed

+29
-11
lines changed

4 files changed

+29
-11
lines changed

modules/core/src/main/scala/org/scalasteward/core/buildtool/sbt/SbtAlg.scala

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,24 @@ final class SbtAlg[F[_]](config: Config)(implicit
5151
version = maybeProperties.flatMap(parser.parseBuildProperties)
5252
} yield version
5353

54+
private def metaBuildsCount(buildRootDir: File): F[Int] =
55+
fs2.Stream
56+
.iterate(buildRootDir / project)(_ / project)
57+
.take(5L) // Use an upper bound for the meta-builds count to prevent DoS attacks.
58+
.evalMap(fileAlg.isDirectory)
59+
.takeWhile(identity)
60+
.compile
61+
.count
62+
.map(_.toInt)
63+
5464
override def getDependencies(buildRoot: BuildRoot): F[List[Scope.Dependencies]] =
5565
for {
5666
buildRootDir <- workspaceAlg.buildRootDir(buildRoot)
5767
maybeSbtVersion <- getSbtVersion(buildRootDir)
58-
lines <- addStewardPluginTemporarily(buildRootDir, maybeSbtVersion).surround {
59-
val commands = Nel.of(crossStewardDependencies, reloadPlugins, stewardDependencies)
68+
metaBuilds <- metaBuildsCount(buildRootDir)
69+
lines <- addStewardPluginTemporarily(buildRootDir, maybeSbtVersion, metaBuilds).surround {
70+
val commands = Nel.of(crossStewardDependencies) ++
71+
List.fill(metaBuilds)(List(reloadPlugins, stewardDependencies)).flatten
6072
sbt(commands, buildRootDir)
6173
}
6274
dependencies = parser.parseDependencies(lines)
@@ -65,7 +77,8 @@ final class SbtAlg[F[_]](config: Config)(implicit
6577

6678
private def addStewardPluginTemporarily(
6779
buildRootDir: File,
68-
maybeSbtVersion: Option[Version]
80+
maybeSbtVersion: Option[Version],
81+
metaBuilds: Int
6982
): Resource[F, Unit] =
7083
for {
7184
_ <- Resource.unit[F]
@@ -74,8 +87,9 @@ final class SbtAlg[F[_]](config: Config)(implicit
7487
case _ => "1_3_11"
7588
}
7689
plugin <- Resource.eval(stewardPlugin(pluginVersion))
77-
_ <- fileAlg.createTemporarily(buildRootDir / project, plugin)
78-
_ <- fileAlg.createTemporarily(buildRootDir / project / project, plugin)
90+
_ <- List
91+
.iterate(buildRootDir / project, metaBuilds + 1)(_ / project)
92+
.collectFold(fileAlg.createTemporarily(_, plugin))
7993
} yield ()
8094

8195
private def stewardPlugin(version: String): F[FileData] = {

modules/core/src/test/scala/org/scalasteward/core/buildtool/BuildToolDispatcherTest.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ class BuildToolDispatcherTest extends FunSuite {
5555
),
5656
Log("Get dependencies in . from sbt"),
5757
Cmd("read", s"$repoDir/project/build.properties"),
58+
Cmd("test", "-d", s"$repoDir/project"),
59+
Cmd("test", "-d", s"$repoDir/project/project"),
5860
Cmd("read", "classpath:StewardPlugin_1_0_0.scala"),
5961
Cmd("write", s"$repoDir/project/scala-steward-StewardPlugin_1_0_0.scala"),
6062
Cmd("write", s"$repoDir/project/project/scala-steward-StewardPlugin_1_0_0.scala"),

modules/core/src/test/scala/org/scalasteward/core/buildtool/sbt/SbtAlgTest.scala

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,18 @@ class SbtAlgTest extends FunSuite {
1515
private val workspace = workspaceAlg.rootDir.unsafeRunSync()
1616

1717
test("getDependencies") {
18-
val repo = Repo("typelevel", "cats")
18+
val repo = Repo("sbt-alg", "test-1")
1919
val buildRoot = BuildRoot(repo, ".")
2020
val repoDir = workspaceAlg.repoDir(repo).unsafeRunSync()
21-
val files = Map(repoDir / "project" / "build.properties" -> "sbt.version=1.3.6")
22-
val initial = MockState.empty.copy(files = files)
21+
val initial = MockState.empty
22+
.addFiles(repoDir / "project" / "build.properties" -> "sbt.version=1.3.11")
23+
.unsafeRunSync()
2324
val state = sbtAlg.getDependencies(buildRoot).runS(initial).unsafeRunSync()
2425
val expected = initial.copy(
2526
trace = Vector(
2627
Cmd("read", s"$repoDir/project/build.properties"),
28+
Cmd("test", "-d", s"$repoDir/project"),
29+
Cmd("test", "-d", s"$repoDir/project/project"),
2730
Cmd("read", "classpath:StewardPlugin_1_3_11.scala"),
2831
Cmd("write", s"$repoDir/project/scala-steward-StewardPlugin_1_3_11.scala"),
2932
Cmd("write", s"$repoDir/project/project/scala-steward-StewardPlugin_1_3_11.scala"),

modules/core/src/test/scala/org/scalasteward/core/buildtool/scalacli/ScalaCliAlgTest.scala

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ class ScalaCliAlgTest extends CatsEffectSuite {
4949
repoDir.toString
5050
),
5151
Cmd("read", s"$sbtBuildDir/project/build.properties"),
52+
Cmd("test", "-d", s"$sbtBuildDir/project"),
5253
Cmd("read", "classpath:StewardPlugin_1_3_11.scala"),
5354
Cmd("write", s"$sbtBuildDir/project/scala-steward-StewardPlugin_1_3_11.scala"),
54-
Cmd("write", s"$sbtBuildDir/project/project/scala-steward-StewardPlugin_1_3_11.scala"),
5555
Cmd(
5656
sbtBuildDir.toString,
5757
"firejail",
@@ -63,9 +63,8 @@ class ScalaCliAlgTest extends CatsEffectSuite {
6363
"-Dsbt.color=false",
6464
"-Dsbt.log.noformat=true",
6565
"-Dsbt.supershell=false",
66-
s";$crossStewardDependencies;$reloadPlugins;$stewardDependencies"
66+
s";$crossStewardDependencies"
6767
),
68-
Cmd("rm", "-rf", s"$sbtBuildDir/project/project/scala-steward-StewardPlugin_1_3_11.scala"),
6968
Cmd("rm", "-rf", s"$sbtBuildDir/project/scala-steward-StewardPlugin_1_3_11.scala"),
7069
Cmd("rm", "-rf", s"$sbtBuildDir")
7170
)

0 commit comments

Comments
 (0)