blob: 354d65063baf958876621b3fdc71e4886a915482 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import sbt._
import sbt.Keys._
import sbt.complete.Parser
object ReleaseHelper {
/** Invoke a command and carry out remaining commands until completion.
*
* This is necessary because sbt-release's releaseStepCommand does not
* execute remaining commands, which sbt-doge relies on.
*
* Based on https://github.com/playframework/playframework/blob/master/framework/project/Release.scala
*
* NOTE: This can be removed in favor of https://github.com/sbt/sbt-release/pull/171 if/when merged upstream
*/
def runCommandAndRemaining(command: String): State => State = { originalState =>
val originalRemaining = originalState.remainingCommands
@annotation.tailrec
def runCommand(command: String, state: State): State = {
val newState = Parser.parse(command, state.combinedParser) match {
case Right(cmd) => cmd()
case Left(msg) => throw sys.error(s"Invalid programmatic input:\n$msg")
}
if (newState.remainingCommands.isEmpty) {
newState
} else {
runCommand(newState.remainingCommands.head, newState.copy(remainingCommands = newState.remainingCommands.tail))
}
}
runCommand(command, originalState.copy(remainingCommands = Nil)).copy(remainingCommands = originalRemaining)
}
}
|