From 3520576a54185364abd5231fe453cc628396cadb Mon Sep 17 00:00:00 2001 From: eugene yokota Date: Thu, 23 Jul 2026 22:30:16 -0400 Subject: [PATCH] [2.x] clean task cleans sona-staging (#9479) **Problem/Solution** 1. clean task cleans sona-staging directory. 2. cleanFull calls clean task. --- main/src/main/scala/sbt/Defaults.scala | 1 + main/src/main/scala/sbt/internal/Clean.scala | 2 ++ main/src/main/scala/sbt/plugins/IvyPlugin.scala | 10 ++++++++++ .../src/sbt-test/actions/clean-sona-staging/build.sbt | 1 + sbt-app/src/sbt-test/actions/clean-sona-staging/test | 7 +++++++ 5 files changed, 21 insertions(+) create mode 100644 sbt-app/src/sbt-test/actions/clean-sona-staging/build.sbt create mode 100644 sbt-app/src/sbt-test/actions/clean-sona-staging/test diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index 3291a6736..de0e79219 100644 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -760,6 +760,7 @@ object Defaults extends BuildCommon with DefExtra { case NonFatal(_) => () } clean.value + (ThisBuild / publish / clean).value }, scalaCompilerBridgeBin := Def .ifS(Def.task { diff --git a/main/src/main/scala/sbt/internal/Clean.scala b/main/src/main/scala/sbt/internal/Clean.scala index 9d836c5bb..18250aa90 100644 --- a/main/src/main/scala/sbt/internal/Clean.scala +++ b/main/src/main/scala/sbt/internal/Clean.scala @@ -218,6 +218,7 @@ private[sbt] object Clean { val h = Help.more(CleanFull, cleanFullDetailed) val expunge: State => State = (s: State) => + import UpperStateOps.* val outputDirectory = s .get(BasicKeys.rootOutputDirectory) .getOrElse(sys.error("outputDirectory has not been set")) @@ -225,6 +226,7 @@ private[sbt] object Clean { cacheStore.foreach: case d: DiskActionCacheStore => d.clear() case _ => () + val s2 = s.unsafeRunAggregated(LocalRootProject / clean) IO.delete(outputDirectory.toFile()) IO.delete( s.configuration diff --git a/main/src/main/scala/sbt/plugins/IvyPlugin.scala b/main/src/main/scala/sbt/plugins/IvyPlugin.scala index 2d4a31b58..7eb9fad43 100644 --- a/main/src/main/scala/sbt/plugins/IvyPlugin.scala +++ b/main/src/main/scala/sbt/plugins/IvyPlugin.scala @@ -10,6 +10,9 @@ package sbt package plugins import Def.Setting +import Keys.* +import sbt.io.IO +import sbt.io.syntax.* /** * Plugin that enables resolving artifacts via ivy. @@ -29,6 +32,13 @@ object IvyPlugin extends AutoPlugin { override lazy val globalSettings: Seq[Setting[?]] = Defaults.globalIvyCore + override lazy val buildSettings: Seq[Setting[?]] = + Seq( + publish / clean := Def.uncached { + IO.delete(stagingDirectory.value) + IO.delete((ThisBuild / baseDirectory).value / "target" / "sona-bundle") + }, + ) override lazy val projectSettings: Seq[Setting[?]] = Classpaths.ivyPublishSettings ++ Classpaths.ivyBaseSettings diff --git a/sbt-app/src/sbt-test/actions/clean-sona-staging/build.sbt b/sbt-app/src/sbt-test/actions/clean-sona-staging/build.sbt new file mode 100644 index 000000000..86008ba9c --- /dev/null +++ b/sbt-app/src/sbt-test/actions/clean-sona-staging/build.sbt @@ -0,0 +1 @@ +name := "clean-sona-staging" diff --git a/sbt-app/src/sbt-test/actions/clean-sona-staging/test b/sbt-app/src/sbt-test/actions/clean-sona-staging/test new file mode 100644 index 000000000..0dd44b027 --- /dev/null +++ b/sbt-app/src/sbt-test/actions/clean-sona-staging/test @@ -0,0 +1,7 @@ +$ touch target/sona-staging/dummy.txt +$ touch target/sona-bundle/dummy.txt + +> clean + +$ absent target/sona-staging/dummy.txt +$ absent target/sona-bundle/dummy.txt