Sto provando a saltare temporaneamente l'attività di compilazione quando si esegue l'attività package
da un comando quick-install
(definito in un plug-in di sbt che sto scrivendo). Sono in grado di saltare tutte le compilazioni mettendo l'impostazione skip
sul compito compile
, ma che fa sì che tutti compile
compiti da saltare:Come saltare temporaneamente l'esecuzione dell'attività di compilazione in un comando sbt personalizzato?
object MyPlugin extends Plugin {
override lazy val settings = Seq(
(skip in compile) := true
)
...
}
cosa ho bisogno è di saltare solo la compile
quando si esegue il mio comando quick-install
. C'è un modo per modificare temporaneamente un'impostazione, o per applicarla solo al mio comando di installazione rapida?
Ho provato una trasformazione impostazioni (sulla base di https://github.com/harrah/xsbt/wiki/Advanced-Command-Example), che dovrebbe sostituire tutte le istanze di skip := false
con skip := true
, ma non ha alcun effetto (cioè compila ancora si verificano dopo la trasformazione):
object SbtQuickInstallPlugin extends Plugin {
private lazy val installCommand = Command.args("quick-install", "quick install that skips compile step")(doCommand(Configurations.Compile))
override lazy val settings = Seq(
commands ++= Seq(installCommand),
(Keys.skip in compile) := false // by default, don't skip compiles
)
def doCommand(configs: Configuration*)(state: State, args: Seq[String]): State = {
val extracted = Project.extract(state)
import extracted._
val oldStructure = structure
val transformedSettings = session.mergeSettings.map(
s => s.key.key match {
case skip.key => { skip in s.key.scope := true } // skip compiles
case _ => s
}
)
// apply transformed settings (in theory)
val newStructure = Load.reapply(transformedSettings, oldStructure)
Project.setProject(session, newStructure, state)
...
}
Qualche idea di cosa mi manca e/o un modo migliore per farlo?
Edit:
L'impostazione di salto è un compito, quindi una soluzione semplice è stato quello di:
object SbtQuickInstallPlugin extends Plugin {
private lazy val installCommand = Command.args("quick-install", "quick install that skips compile step")(doCommand(Configurations.Compile))
private var shouldSkipCompile = false // by default, don't skip compiles
override lazy val settings = Seq(
commands ++= Seq(installCommand),
(Keys.skip in compile) := shouldSkipCompile
)
def doCommand(configs: Configuration*)(state: State, args: Seq[String]): State = {
shouldSkipCompile = true // start skipping compiles
... // do stuff that would normally trigger a compile such as running the packageBin task
shouldSkipCompile = false // stop skipping compiles
}
}
non sono convinto questa è la soluzione più robusta, ma sembra di lavorare per quello che Avevo bisogno.