blob: 25b4b5a5dd2a24735c1f3cf701fd7047808819ec [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache license, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the license for the specific language governing permissions and
* limitations under the license.
*/
import java.io.FileOutputStream
import java.util.zip.GZIPOutputStream
import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream
import sbt.{Def, _}
import sbt.plugins.JvmPlugin
object Distributions extends AutoPlugin {
override lazy val trigger = allRequirements
override lazy val requires = JvmPlugin
object autoImport {
// run this task after "+ package" to get all versions included
val packageDistributions = taskKey[Seq[File]]("Packages zip and tar.gz binary distributions")
val packageZip = packageDistributionTask("zip")
val packageTarGz = packageDistributionTask("tar.gz")
}
import autoImport._
override def projectSettings: Seq[Def.Setting[_]] = Seq(
packageDistributions := Seq(
packageZip.value,
packageTarGz.value
)
)
private val classified = "-([a-z]+)\\.jar".r
def packageDistributionTask(ext: String): Def.Initialize[Task[File]] = Def.task {
val target = Keys.target.value
val binaries = target * "scala-*" ** "log4j-api-scala*.jar" pair { file =>
file.name match {
case classified(_) => None
case _ => Some(file.name)
}
}
val base = Keys.baseDirectory.value
val inputs = binaries ++ Seq(
(base / "LICENSE.txt", "LICENSE"),
(base / "NOTICE.txt", "NOTICE")
)
val version = Keys.version.value
val output = target / s"apache-log4j-api-scala-$version-bin.$ext"
ext match {
case "zip" => makeZip(inputs, output)
case "tar.gz" => makeTarGz(inputs, output)
case _ => sys.error(s"Unknown distribution extension: $ext")
}
output
}
def tarGz(sources: Traversable[(File, String)], output: File): Unit = {
val out = new TarArchiveOutputStream(new GZIPOutputStream(new FileOutputStream(output)))
for ((f, name) <- sources) {
out.putArchiveEntry(out.createArchiveEntry(f, name))
IO.transfer(f, out)
out.closeArchiveEntry()
}
out.finish()
out.close()
}
def makeTarGz(inputs: Traversable[(File, String)], output: File): Unit = {
val out = output.getAbsoluteFile
if (out.exists()) {
if (out.isFile) out.delete() else sys.error(s"Cannot write to file $out as it is not a file")
}
tarGz(inputs, out)
}
def makeZip(inputs: Traversable[(File, String)], output: File): Unit = {
val out = output.getAbsoluteFile
if (out.exists()) {
if (out.isFile) out.delete() else sys.error(s"Cannot write to file $out as it is not a file")
}
IO.zip(inputs, out)
}
}