从另一个inputTask调用inputTask,传递所有输入

时间:2016-07-31 12:27:33

标签: scala sbt

假设我有以下任务启动和停止:

val doStart = inputKey[Unit]("Starts something.")
val doStop = taskKey[Unit]("Stops something.")

这里doStart输入任务接受一些控制事物启动方式的参数。

现在我想编写一个doRestart行为,其行为与doStart相同,但首先调用doStop。这意味着我希望doRestart接受与doStart相同的参数,如果doStart失败,我也不希望doStop运行。

我能想出的最好的是以下定义:

val doRestart = inputKey[Unit]("Stops and starts something.")

doRestart := Def.inputTaskDyn {
  val args = Def.spaceDelimited().parsed
  doStop.value
  Def.inputTask {
    doStart.evaluated
  }.toTask(" " + args.mkString(" "))
}.evaluated

但是,我完全不喜欢我必须通过手动传递参数,特别是因为我看不到任何方法来避免用空格分割输入(我无法找到一个刚刚通过的解析器输入为单个字符串)。此外,inputTaskDyn要求其参数返回Initialize[Task[T]]而不是Initialize[InputTask[T]],因此我无法在调用时返回Def.inputTaskparsed的结果Initialize[InputTask[T]],返回Task[T],而不是Initialize[Task[T]],因此我也无法使用parsed

有更好的方法吗?

0 个答案:

没有答案