summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorJim Lawson <ucbjrl@berkeley.edu>2018-10-09 10:16:59 -0700
committerTobias Roeser <le.petit.fou@web.de>2018-10-28 22:20:34 +0100
commitf3ec25bccab8ee94ad30d86b56d7cc3c3ca610a4 (patch)
tree2fd622ba815762383f429083e80277ede527cf3f /main
parentc854d55b8cfb0481a76ee6886cb31275fe8d5ffe (diff)
downloadmill-f3ec25bccab8ee94ad30d86b56d7cc3c3ca610a4.tar.gz
mill-f3ec25bccab8ee94ad30d86b56d7cc3c3ca610a4.tar.bz2
mill-f3ec25bccab8ee94ad30d86b56d7cc3c3ca610a4.zip
Add a filter parameter (default true for all files) to createJar().
Add createJar() filter test.
Diffstat (limited to 'main')
-rw-r--r--main/src/mill/modules/Jvm.scala6
-rw-r--r--main/test/src/mill/eval/JavaCompileJarTests.scala9
2 files changed, 13 insertions, 2 deletions
diff --git a/main/src/mill/modules/Jvm.scala b/main/src/mill/modules/Jvm.scala
index f0c0d8a9..b4f7fa94 100644
--- a/main/src/mill/modules/Jvm.scala
+++ b/main/src/mill/modules/Jvm.scala
@@ -209,7 +209,9 @@ object Jvm {
m
}
- def createJar(inputPaths: Agg[Path], mainClass: Option[String] = None)
+ def createJar(inputPaths: Agg[Path],
+ mainClass: Option[String] = None,
+ fileFilter: (Path, RelPath) => Boolean = (p: Path, r: RelPath) => true)
(implicit ctx: Ctx.Dest): PathRef = {
val outputPath = ctx.dest / "out.jar"
rm(outputPath)
@@ -228,7 +230,7 @@ object Jvm {
(file, mapping) <-
if (p.isFile) Iterator(p -> empty/p.last)
else ls.rec(p).filter(_.isFile).map(sub => sub -> sub.relativeTo(p))
- if !seen(mapping)
+ if !seen(mapping) && fileFilter(p, mapping)
} {
seen.add(mapping)
val entry = new JarEntry(mapping.toString)
diff --git a/main/test/src/mill/eval/JavaCompileJarTests.scala b/main/test/src/mill/eval/JavaCompileJarTests.scala
index 37e4c119..e6d1c10a 100644
--- a/main/test/src/mill/eval/JavaCompileJarTests.scala
+++ b/main/test/src/mill/eval/JavaCompileJarTests.scala
@@ -39,6 +39,8 @@ object JavaCompileJarTests extends TestSuite{
def allSources = T{ sourceRoot().flatMap(p => ls.rec(p.path)).map(PathRef(_)) }
def classFiles = T{ compileAll(allSources()) }
def jar = T{ Jvm.createJar(Loose.Agg(classFiles().path) ++ resourceRoot().map(_.path)) }
+ // Test createJar() with optional file filter.
+ def filterJar(fileFilter: (Path, RelPath) => Boolean) = T{ Jvm.createJar(Loose.Agg(classFiles().path) ++ resourceRoot().map(_.path), None, fileFilter) }
def run(mainClsName: String) = T.command{
%%('java, "-Duser.language=en", "-cp", classFiles().path, mainClsName)
@@ -116,6 +118,13 @@ object JavaCompileJarTests extends TestSuite{
|""".stripMargin
assert(jarContents.lines.toSeq == expectedJarContents.lines.toSeq)
+ // Create the Jar again, but this time, filter out the Foo files.
+ def noFoos(s: String) = !s.contains("Foo")
+ val filterFunc = (p: Path, r: RelPath) => noFoos(r.last)
+ filterJar(filterFunc)
+ val filteredJarContents = %%('jar, "-tf", evaluator.outPath/'filterJar/'dest/"out.jar")(evaluator.outPath).out.string
+ assert(filteredJarContents.lines.toSeq == expectedJarContents.lines.filter(noFoos(_)).toSeq)
+
val executed = %%('java, "-cp", evaluator.outPath/'jar/'dest/"out.jar", "test.Foo")(evaluator.outPath).out.string
assert(executed == (31337 + 271828) + System.lineSeparator)