如何修改命令中的设置并保留其他会话更改?

时间:2015-12-17 16:22:12

标签: sbt

我有这个简单的命令可以更改myBoolSetting

的值
commands += Command("mycommand") {
    state ⇒ (Space ~> Bool).?
} { (state, arg) ⇒
    val b = arg.getOrElse(true)
    Project.extract(state).append(Seq(myBoolSetting in Global := b), state)
}

当我更改调用时,它确实会更改myBoolSetting但我丢失了任何通过set command更改了值的设置。

> set myStringSetting := "new value"
> myCommand false

在此示例中,myStringSetting的值已丢失且具有默认值。

如何更改设置并保持手动更改设置?

更新

发现相关问题:Why sbt.Extracted remove the previously defined TaskKey while append method?,但似乎不适用于我的情况。

修改后的代码:

commands += Command("mycommand") {
    state ⇒ (Space ~> Bool).?
} { (state, arg) ⇒
    val b = arg.getOrElse(true)
    val session = Project.session(state)
    val state2 = Project.extract(state).append(Seq(myBoolSetting in Global := b), state)
    SessionSettings.reapply(session, state2)
}

1 个答案:

答案 0 :(得分:1)

我可能只会部分回答你的问题。

失去myStringSetting新值的原因是myCommand有效地重新加载了一个会话,让您拥有类似build.sbt的文件以及命令本身设置的内容。您只需在重新加载会话时删除该值。

它类似于之后执行set scalaVersion := "2.11.7"reloadscalaVersion成为sbt配置中的默认Scala版本。

你现在知道为什么你失去了价值。如果要保留值,则必须保存当前会话session save并执行命令。您需要在命令中添加session save