Created
January 23, 2020 16:13
-
-
Save olafurpg/6c0e816e11fc01296ef1f5e339d39c9e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/metals/src/main/scala/scala/meta/internal/pantsbuild/BloopPants.scala b/metals/src/main/scala/scala/meta/internal/pantsbuild/BloopPants.scala | |
index 3dca37a..26ec5c5 100644 | |
--- a/metals/src/main/scala/scala/meta/internal/pantsbuild/BloopPants.scala | |
+++ b/metals/src/main/scala/scala/meta/internal/pantsbuild/BloopPants.scala | |
@@ -30,6 +30,7 @@ import scala.sys.process.Process | |
import scala.meta.io.Classpath | |
import coursierapi.MavenRepository | |
import scala.meta.internal.io.PathIO | |
+import java.nio.file.StandardCopyOption | |
object BloopPants { | |
@@ -525,13 +526,33 @@ private class BloopPants( | |
private val exportClasspathDir: AbsolutePath = AbsolutePath( | |
workspace.resolve("dist").resolve("export-classpath") | |
) | |
+ private val exportClasspathJars = mutable.Map.empty[Path, Option[Path]] | |
+ private val bloopJars = | |
+ Files.createDirectories(bloopDir.resolve("bloop-jars")) | |
private def exportClasspath(target: PantsTarget): List[Path] = { | |
exportClasspathCache.getOrElseUpdate( | |
target.name, { | |
val classpathFile = | |
exportClasspathDir.resolve(target.id + "-classpath.txt") | |
if (classpathFile.isFile) { | |
- Classpath(classpathFile.readText.trim()).entries.map(_.toNIO) | |
+ val classpath = | |
+ Classpath(classpathFile.readText.trim()).entries.map(_.toNIO) | |
+ classpath.flatMap { | |
+ entry => | |
+ exportClasspathJars.getOrElseUpdate( | |
+ entry, { | |
+ val out = bloopJars.resolve(target.id + ".jar") | |
+ if (Files.isRegularFile(entry)) { | |
+ Files.copy(entry, out, StandardCopyOption.REPLACE_EXISTING) | |
+ Some(out) | |
+ } else if (Files.isDirectory(entry)) { | |
+ Some(Jars.fromDirectory(target, entry, out)) | |
+ } else { | |
+ None | |
+ } | |
+ } | |
+ ) | |
+ } | |
} else { | |
Nil | |
} | |
diff --git a/metals/src/main/scala/scala/meta/internal/pantsbuild/PantsExport.scala b/metals/src/main/scala/scala/meta/internal/pantsbuild/PantsExport.scala | |
index d9f5c13..0f89b47 100644 | |
--- a/metals/src/main/scala/scala/meta/internal/pantsbuild/PantsExport.scala | |
+++ b/metals/src/main/scala/scala/meta/internal/pantsbuild/PantsExport.scala | |
@@ -2,6 +2,7 @@ package scala.meta.internal.pantsbuild | |
import java.nio.file.Paths | |
import scala.collection.mutable | |
+import java.nio.file.Files | |
case class PantsExport( | |
targets: Map[String, PantsTarget], | |
@@ -63,9 +64,11 @@ object PantsExport { | |
val allLibraries = output.obj(PantsKeys.libraries).obj | |
val libraries: Map[String, PantsLibrary] = allLibraries.iterator.map { | |
case (name, valueObj) => | |
- name -> PantsLibrary(name, valueObj.obj.map { | |
+ name -> PantsLibrary(name, valueObj.obj.flatMap { | |
case (key, value) => | |
- key -> Paths.get(value.str) | |
+ val path = Paths.get(value.str) | |
+ if (Files.isRegularFile(path)) Some(key -> path) | |
+ else None | |
}) | |
}.toMap | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment