diff options
author | Jim Lawson <ucbjrl@berkeley.edu> | 2018-10-09 10:16:59 -0700 |
---|---|---|
committer | Tobias Roeser <le.petit.fou@web.de> | 2018-10-28 22:20:34 +0100 |
commit | f3ec25bccab8ee94ad30d86b56d7cc3c3ca610a4 (patch) | |
tree | 2fd622ba815762383f429083e80277ede527cf3f | |
parent | c854d55b8cfb0481a76ee6886cb31275fe8d5ffe (diff) | |
download | mill-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.
-rw-r--r-- | main/src/mill/modules/Jvm.scala | 6 | ||||
-rw-r--r-- | main/test/src/mill/eval/JavaCompileJarTests.scala | 9 |
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) |