Skip to content
This repository was archived by the owner on May 25, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions src/main/scala/com/lightbend/rp/sbtreactiveapp/App.scala
Original file line number Diff line number Diff line change
Expand Up @@ -281,15 +281,18 @@ case object BasicApp extends DeployableApp {
}
}

val allApplicationConfFiles = unmanagedTransitive.value.flatten.toList

val unmanagedConfigName = prependRpConf.value
if (unmanagedConfigName.isEmpty) Nil
else {
// 1. make the file under cache/sbt-reactive-app.
// 2. compare its SHA1 against cache/sbt-reactive-app-inputs
IO.write(tempFile, magic.Build.extractApplicationConf(
Vector(ToolingConfig), Vector(unmanagedConfigName),
unmanagedTransitive.value.flatten, (dependencyClasspath in Compile).value)
.getOrElse(""))
IO.write(tempFile, magic.Build.extractRpToolingConf(
Vector(ToolingConfig),
(dependencyClasspath in Compile).value,
allApplicationConfFiles.nonEmpty,
unmanagedConfigName).getOrElse(""))
cachedCopyFile(FileInfo.hash(tempFile))
Seq(outFile)
}
Expand Down
54 changes: 26 additions & 28 deletions src/main/scala/com/lightbend/rp/sbtreactiveapp/magic/Build.scala
Original file line number Diff line number Diff line change
Expand Up @@ -18,49 +18,47 @@ package com.lightbend.rp.sbtreactiveapp.magic

import sbt.{ Attributed, File, IO }
import scala.collection.JavaConverters._
import java.net.URL

object Build {
def annotate(config: String): String =
s"""|# Generated by sbt-reactive-app. To disable this, set the `prependRpConf` SBT key to `""`.
def annotate(prependInclude: Boolean, unmanagedConfigName: String, config: String): String =
s"""|# Generated by sbt-reactive-app. To disable this, set the `prependRpConf` sbt key to `""`.
|
|$config""".stripMargin
|""".stripMargin +
(if (prependInclude) s"""include "$unmanagedConfigName"""" else "") +
s"""|
|$config""".stripMargin

def withHeader(comment: String, config: String): String =
s"""|# $comment
|
|$config""".stripMargin

def extractApplicationConf(
def extractRpToolingConf(
managedConfigNames: Seq[String],
unmanagedConfigNames: Seq[String],
unmanagedResources: Seq[File],
dependencyClasspath: Seq[Attributed[File]]): Option[String] = {
dependencyClasspath: Seq[Attributed[File]],
prependInclude: Boolean,
unmanagedConfigName: String): Option[String] = {
val dependencyClassLoader = new java.net.URLClassLoader(dependencyClasspath.files.map(_.toURI.toURL).toArray)

val managedConfigs =
val managedConfigs: List[URL] =
managedConfigNames
.flatMap(dependencyClassLoader.findResources(_).asScala)
.toList

val unmanagedConfigs =
unmanagedConfigNames
.flatMap(c => unmanagedResources.filter(_.getName == c))
.map(_.toURI.toURL)

val allConfigs =
managedConfigs ++ unmanagedConfigs

if (allConfigs.nonEmpty) {
Some(
annotate(
allConfigs
.foldLeft(Seq.empty[String]) {
case (accum, conf) =>
accum :+ withHeader(conf.toString, IO.readLinesURL(conf).mkString(IO.Newline))
}
.mkString(IO.Newline)))

} else {
None
managedConfigs match {
case Nil => None
case _ =>
Some(
annotate(
prependInclude,
unmanagedConfigName,
managedConfigs
.foldLeft(Seq.empty[String]) {
case (accum, conf) =>
accum :+ withHeader(conf.toString, IO.readLinesURL(conf).mkString(IO.Newline))
}
.mkString(IO.Newline)))
}
}
}
4 changes: 2 additions & 2 deletions src/sbt-test/sbt-reactive-app/prepend-rp-conf/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ TaskKey[Unit]("check") := {
val rpApplicationConf = resourceManaged.value / "main" / "sbt-reactive-app" / "rp-application.conf"
val contents = IO.read(rpApplicationConf)
val expectedLines = Seq(
"""include "application.conf"""",
"# jar:file:.*/com.lightbend.rp/reactive-lib-status_2.12/jars/reactive-lib-status_2.12-0.7.0.jar!/rp-tooling.conf",
"# jar:file:.*/com.lightbend.rp/reactive-lib-akka-management_2.12/jars/reactive-lib-akka-management_2.12-0.7.0.jar!/rp-tooling.conf",
"# jar:file:.*/com.lightbend.rp/reactive-lib-service-discovery_2.12/jars/reactive-lib-service-discovery_2.12-0.7.0.jar!/rp-tooling.conf",
"application.settings.flag = true"
"# jar:file:.*/com.lightbend.rp/reactive-lib-service-discovery_2.12/jars/reactive-lib-service-discovery_2.12-0.7.0.jar!/rp-tooling.conf"
)
// Use a single concatenated regex to ensure the order is correct.
val expectedContents = ("(?s)" + expectedLines.mkString(".*")).r
Expand Down