diff --git a/launch/Launch.scala b/launch/Launch.scala index 2166ee002..e8a9c5e6d 100644 --- a/launch/Launch.scala +++ b/launch/Launch.scala @@ -184,6 +184,8 @@ class ComponentProvider(baseDirectory: File, lockBoot: Boolean) extends xsbti.Co else Copy(files.toList, location) } + def addToComponent(id: String, files: Array[File]): Boolean = + Copy(files.toList, componentLocation(id)) def lockFile = if(lockBoot) ComponentProvider.lockFile(baseDirectory) else null // null for the Java interface } object ComponentProvider diff --git a/launch/Using.scala b/launch/Using.scala index e2c728206..9e93b96c1 100644 --- a/launch/Using.scala +++ b/launch/Using.scala @@ -13,15 +13,21 @@ object Using object Copy { - def apply(files: List[File], toDirectory: File): Unit = files.foreach(file => apply(file, toDirectory)) - def apply(file: File, toDirectory: File) + def apply(files: List[File], toDirectory: File): Boolean = files.map(file => apply(file, toDirectory)).contains(true) + def apply(file: File, toDirectory: File): Boolean = { toDirectory.mkdirs() - Using(new FileInputStream(file)) { in => - Using(new FileOutputStream(new File(toDirectory, file.getName))) { out => - transfer(in, out) + val to = new File(toDirectory, file.getName) + val missing = !to.exists + if(missing) + { + Using(new FileInputStream(file)) { in => + Using(new FileOutputStream(to)) { out => + transfer(in, out) + } } } + missing } def transfer(in: InputStream, out: OutputStream) { diff --git a/launch/interface/src/main/java/xsbti/ComponentProvider.java b/launch/interface/src/main/java/xsbti/ComponentProvider.java index 81b49bfa3..5eb234a22 100644 --- a/launch/interface/src/main/java/xsbti/ComponentProvider.java +++ b/launch/interface/src/main/java/xsbti/ComponentProvider.java @@ -4,8 +4,10 @@ import java.io.File; public interface ComponentProvider { + public File componentLocation(String id); public File[] component(String componentID); public void defineComponent(String componentID, File[] components); + public boolean addToComponent(String componentID, File[] components); // null if locking disabled public File lockFile(); } \ No newline at end of file diff --git a/launch/src/main/input_resources/sbt/sbt.boot.properties b/launch/src/main/input_resources/sbt/sbt.boot.properties index ef55e3ff8..be860571a 100644 --- a/launch/src/main/input_resources/sbt/sbt.boot.properties +++ b/launch/src/main/input_resources/sbt/sbt.boot.properties @@ -6,7 +6,7 @@ name: sbt version: read(sbt.version)[${{sbt.version}}] class: ${sbt.main.class-sbt.xMain} - components: xsbti + components: xsbti,extra cross-versioned: true [repositories]