From c12aaeff6864cdd3ae191d628936baeaf1d5e967 Mon Sep 17 00:00:00 2001 From: Billy Autrey <40704452+BillyAutrey@users.noreply.github.com> Date: Thu, 24 Oct 2024 10:47:32 -0500 Subject: [PATCH] Add compatibility shim to strip directories from mappings --- .../scala-2.12/com/typesafe/sbt/PluginCompat.scala | 2 ++ src/main/scala-3/com/typesafe/sbt/PluginCompat.scala | 3 +++ src/main/scala/com/typesafe/sbt/web/SbtWeb.scala | 11 +++++++---- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/scala-2.12/com/typesafe/sbt/PluginCompat.scala b/src/main/scala-2.12/com/typesafe/sbt/PluginCompat.scala index a519b1b..e4e4d52 100644 --- a/src/main/scala-2.12/com/typesafe/sbt/PluginCompat.scala +++ b/src/main/scala-2.12/com/typesafe/sbt/PluginCompat.scala @@ -2,6 +2,7 @@ package com.typesafe.sbt import sbt.* import sbt.Keys.Classpath +import com.typesafe.sbt.web.PathMapping import xsbti.FileConverter import java.nio.file.{ Path => NioPath } @@ -28,4 +29,5 @@ private[sbt] object PluginCompat { def toFileRef(f: File)(implicit conv: FileConverter): FileRef = f def selectFirstPredicate: Seq[FileRef] => Boolean = files => files.forall(_.isFile) && files.map(_.hashString).distinct.size == 1 + def fileRefCompatible(path: PathMapping)(implicit conv: FileConverter): Boolean = true } diff --git a/src/main/scala-3/com/typesafe/sbt/PluginCompat.scala b/src/main/scala-3/com/typesafe/sbt/PluginCompat.scala index e780167..20979c8 100644 --- a/src/main/scala-3/com/typesafe/sbt/PluginCompat.scala +++ b/src/main/scala-3/com/typesafe/sbt/PluginCompat.scala @@ -5,6 +5,7 @@ import java.io.{ File => IoFile } import sbt.* import sbt.Keys.Classpath import xsbti.{ FileConverter, HashedVirtualFileRef, VirtualFileRef } +import com.typesafe.sbt.web.PathMapping private[sbt] object PluginCompat: type FileRef = HashedVirtualFileRef @@ -30,4 +31,6 @@ private[sbt] object PluginCompat: conv.toVirtualFile(file.toPath) inline def selectFirstPredicate(using conv: FileConverter): Seq[FileRef] => Boolean = files => files.forall(toFile(_).isFile) && files.map(_.contentHashStr).distinct.size == 1 + inline def fileRefCompatible(path: PathMapping)(using conv: FileConverter): Boolean = + !toFile(path._1).isDirectory end PluginCompat diff --git a/src/main/scala/com/typesafe/sbt/web/SbtWeb.scala b/src/main/scala/com/typesafe/sbt/web/SbtWeb.scala index 25981ea..9a9fd00 100644 --- a/src/main/scala/com/typesafe/sbt/web/SbtWeb.scala +++ b/src/main/scala/com/typesafe/sbt/web/SbtWeb.scala @@ -402,10 +402,11 @@ object SbtWeb extends AutoPlugin { * Create package mappings for assets in the webjar format. Use the webjars path prefix and exclude all web module * assets. */ - def createWebJarMappings: Def.Initialize[Task[Seq[(FileRef, String)]]] = Def.task { + def createWebJarMappings: Def.Initialize[Task[Seq[PathMapping]]] = Def.task { def webModule(file: File) = webModuleDirectories.value.exists(dir => IO.relativize(dir, file).isDefined) implicit val fc: FileConverter = fileConverter.value mappings.value flatMap { + case mapping if !fileRefCompatible(mapping) => None case (file, path) if webModule(toFile(file)) => None case (file, path) => Some(file -> (webJarsPathPrefix.value + path)) } @@ -450,10 +451,12 @@ object SbtWeb extends AutoPlugin { /** * Create package mappings for all assets, adding the optional prefix. */ - def packageAssetsMappings: Def.Initialize[Task[Seq[(FileRef, String)]]] = Def.task { + def packageAssetsMappings: Def.Initialize[Task[Seq[PathMapping]]] = Def.task { + implicit val fc: FileConverter = fileConverter.value val prefix = packagePrefix.value - (Defaults.ConfigGlobal / pipeline).value map { case (file, path) => - file -> (prefix + path) + (Defaults.ConfigGlobal / pipeline).value collect { + case (file, path) if fileRefCompatible((file, path)) => + file -> (prefix + path) } }