From 62ea3f3a7667e37fe1321ae23a99c7304f76d3ba Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 11 Jul 2017 18:50:03 +0300 Subject: Argument parsing improovement --- stage2/plugins/ExportBuildInformation.scala | 33 +++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index 10da9eb..2f07ff0 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -63,8 +63,13 @@ object BuildInformation { private object ExportParameters { def apply(args: Seq[String]): ExportParameters = { val argumentParser = new ArgumentParser(args) - val extraModulePaths: Seq[String] = argumentParser.value("extraModules").map(_.split(":").toSeq).getOrElse(Seq.empty) - val needCbtLibs: Boolean = argumentParser.value("needCbtLibs").map(_.toBoolean).getOrElse(true) + val extraModulePaths: Seq[String] = argumentParser.value("extraModules") + .map(_.split(":").toSeq) + .getOrElse(Seq.empty) + .filterNot(_.isEmpty) + val needCbtLibs: Boolean = argumentParser.value("needCbtLibs") + .map(_.toBoolean) + .getOrElse(true) ExportParameters(extraModulePaths, needCbtLibs) } } @@ -230,12 +235,13 @@ object BuildInformation { .toSeq private def testBuild(build: BaseBuild): Seq[BaseBuild] = - Try(build.test).toOption + Try(build.test) + .toOption + .toSeq .flatMap { - case testBuild: BaseBuild => { println(testBuild.projectDirectory) ; Some(testBuild) } - case _ => None + case testBuild: BaseBuild => Seq(testBuild) + case _ => Seq.empty } - .toSeq private def resolveScalaCompiler(scalaVersion: String) = rootBuild.Resolver(mavenCentral, sonatypeReleases).bindOne( @@ -317,9 +323,18 @@ object BuildInformationSerializer { class ArgumentParser(arguments: Seq[String]) { - val argumentsMap = - arguments.grouped(2).map{ case Seq(k,v) => k.stripPrefix("--").stripSuffix("=") -> v }.toMap + val argumentsMap = (arguments :+ "") + .sliding(2) + .map(_.toList) + .foldLeft(Map.empty[String, Option[String]]) { + case (m, Seq(k, v)) if k.startsWith("--") && !v.startsWith("--") => m + (k -> Some(v)) + case (m, k::_) if k.startsWith("--") => m + (k -> None) + case (m, s) => m + } def value(key: String): Option[String] = - argumentsMap.get(key) + argumentsMap.get(key).flatten + + def persists(key: String) = + argumentsMap.isDefinedAt(key) } \ No newline at end of file -- cgit v1.2.3