2012-04-18 8 views
6

Estoy intentando omitir temporalmente la tarea de compilación al ejecutar la tarea package desde un comando quick-install (definido en un plugin sbt que estoy escribiendo). Soy capaz de saltar todas las compilaciones poniendo el ajuste skip en la tarea compile, pero que hace que todas las tareas compile a ser omitidos:¿Cómo puedo omitir temporalmente la ejecución de la tarea de compilación en un comando sbt personalizado?

object MyPlugin extends Plugin { 
    override lazy val settings = Seq(
     (skip in compile) := true 
    ) 
    ... 
    } 

Lo que necesito es sólo para saltar el compile al ejecutar mi mando quick-install. ¿Hay alguna forma de modificar temporalmente una configuración o de adaptarla solo a mi comando de instalación rápida?

He intentado una transformación configuración (basado en https://github.com/harrah/xsbt/wiki/Advanced-Command-Example), que debe reemplazar todas las instancias de skip := false con skip := true, pero no tiene ningún efecto (es decir, compila todavía se producen después de la transformación):

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) 

    ... 
} 

¿Alguna idea de lo que me falta y/o una mejor manera de hacer esto?

Editar:

El ajuste del salto es una tarea, por lo que era una solución fácil a:

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 
    } 
} 

No estoy convencido de que esta es la solución más robusta, pero parece que trabajar por lo Lo necesitaba.

Respuesta

0
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 
    } 
} 

¡Está bien, por supuesto que usted puede ir con eso!

Cuestiones relacionadas