2013-01-10 14 views
29

मैं publish-snapshot कमांड चाहता हूं जो संशोधित version सेटिंग के साथ publish कार्य चलाएगा (उस सेटिंग को आदेश के निष्पादन के समय गणना की जानी चाहिए)।कैसे एसबीटी आदेश के अंदर सेटिंग बदलने के लिए?

मुझे पता चला कि version के अंदरूनी कमांड का वर्तमान मूल्य कैसे प्राप्त करें, और Project.runTask("task", "scope", ...)publish कार्य को आमंत्रित करने के लिए एक सही कॉल प्रतीत होता है।

केवल एक चीज है कि मैं के साथ भ्रमित कर रहा हूँ कैसे एक नया संस्करण मूल्य के साथ State उदाहरण संशोधित करने के लिए है। मेरे सभी प्रयास मूल संस्करण की स्थापना करने के लिए कुछ नहीं कर रहे हैं।

मेरे आखिरी प्रयास:

val printVers = TaskKey[Unit]("printvers") 
val printVersTask = TaskKey[Unit]("printvers") <<= {version map println} 

def publishSnapshot = Command.command("publish-snapshot") { state => 
    val newState = SessionSettings.reapply(state.get(sessionSettings).get.appendRaw(version := "???"), state) 
    Project.runTask(printVers in Compile, newState, true) 

    state 
} 

lazy val root = Project("main", file("."), 
         settings = 
          Defaults.defaultSettings ++ 
          Seq(printVersTask)).settings(commands += publishSnapshot) 

वहाँ कुछ रास्ता है कि व्यवहार ठीक करने के लिए है?

def publishSnapshot = Command.command("publish-snapshot") { state => 
    val extracted = Project extract state 
    import extracted._ 
    val eVersion = getOpt(version).get // getting current version 
    runTask(publish in Compile, 
    append(Seq(version := "newVersion"), state), 
    true 
) 
    state 
} 

उत्तर

20
sbt मेलिंग सूची से मदद के साथ

, मैं एक समाधान बनाने में सक्षम इस प्रकार थी।

def publishSnapshot = Command.command("publish-snapshot") { state => 
    val extracted = Project extract state 
    val newState = extracted.append(Seq(version := "newVersion"), state) 
    val (s, _) = Project.extract(newState).runTask(publish in Compile, newState) 
    s 
} 

या वैकल्पिक रूप से कार्य करें::

def publishSnapshot = Command.command("publish-snapshot") { state => 
    val newState = 
    Command.process("""set version := "newVersion" """, state) 
    val (s, _) = Project.extract(newState).runTask(publish in Compile, newState) 
    s 
} 
8

यह वास्तव में मेरे लिए काम नहीं किया:

+0

मैं '0.13.8' पर चल रहा हूँ और यह मुझे मदद की। हालांकि यह सुपर 'newState' दो बार' runTask' को इनपुट के रूप में करने के लिए अजीब लगता है। मुझे आश्चर्य है कि अगर यह जानबूझकर व्यवहार है। साझा करने के लिए धन्यवाद! – mavilein

3

अद्यतन करने के लिए मैं एसबीटी 0.13.7

अनुकूल मैं ऊपर के उदाहरण के लिए करना था क्या उपयोग कर रहा हूँ, मैं की तरह कुछ करना ही था एक कमांड से एक मनमाना की स्थापना, निम्नलिखित की तरह कुछ करना:

def updateFoo = Command.command("updateFoo") { state => 
val extracted = Project extract state 
import extracted._ 
println("'foo' set to true") 
//append returns state with updated Foo 
append(Seq(foo := true), state) 
}