2015-12-17 1 views
0

У меня есть эта простая команда, которая изменяет значение 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 было потеряно, и имеет свое значение по умолчанию.

Как изменить настройку и сохранить измененные вручную настройки?

UPDATE:

Найдено связанный с этим вопрос: 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

Я мог бы лишь частично ответить на ваш вопрос.

Причиной потери myStringSetting нового значения является то, что myCommand перезагружает сеанс, фактически оставляя вас тем, что у вас уже есть в файлах build.sbt и том, что сама команда установлена. Вы просто теряете значение при перезагрузке сеанса.

Это похоже на выполнение set scalaVersion := "2.11.7" и reload впоследствии. scalaVersion становится стандартной версией Scala, имевшейся в конфигурации sbt.

Теперь вы знаете, почему вы теряете ценность. Если вы хотите сохранить значение, вам нужно сохранить текущий сеанс session save и выполнить свою команду. Вы должны добавить session save в свою команду.

+0

Этот ответ является частичным, но дает ключ. Благодарю. –

+0

Рад, что это помогло. Почему вы не просто 'session save' перед вызовом команды? По замыслу, как только сеанс будет сброшен, все временные значения тоже будут. –

+0

Моя цель - постепенно изменять настройки сеанса. –