mirror of https://github.com/sbt/sbt.git
Part #1 of cancel-task-hooks - Hooks EvaluateTask.
* Create a new EvaluateTaskConfig which gives us a bit more freedom over changign config options to EvaluateTask in the future. * Create adapted from old EvaluateTask to new EvaluateTask * Add hooks into signals class to register/remote a signal listener directly, rather than in an "arm" block. * Create TaskEvaluationCancelHandler to control the strategy of who/whom can cancel (sbt-server vs. sbt-terminal). * Create a null-object for the "can't cancel" scenario so the code path is exactly the same. This commit does not wire settings into the build yet, nor does it fix the config extractio methods.
This commit is contained in:
parent
0023f73aae
commit
35aad2b95b
|
|
@ -19,6 +19,38 @@ object Signals
|
|||
case Right(v) => v
|
||||
}
|
||||
}
|
||||
|
||||
/** Helper interface so we can expose internals of signal-isms to others. */
|
||||
sealed trait Registration {
|
||||
def remove(): Unit
|
||||
}
|
||||
/** Register a signal handler that can be removed later.
|
||||
* NOTE: Does not stack with other signal handlers!!!!
|
||||
*/
|
||||
def register(handler: () => Unit, signal: String = INT): Registration =
|
||||
// TODO - Maybe we can just ignore things if not is-supported.
|
||||
if(supported(signal)) {
|
||||
import sun.misc.{Signal,SignalHandler}
|
||||
val intSignal = new Signal(signal)
|
||||
val newHandler = new SignalHandler {
|
||||
def handle(sig: Signal) { handler() }
|
||||
}
|
||||
val oldHandler = Signal.handle(intSignal, newHandler)
|
||||
object unregisterNewHandler extends Registration {
|
||||
override def remove(): Unit = {
|
||||
Signal.handle(intSignal, oldHandler)
|
||||
}
|
||||
}
|
||||
unregisterNewHandler
|
||||
} else {
|
||||
// TODO - Maybe we should just throw an exception if we don't support signals...
|
||||
object NullUnregisterNewHandler extends Registration {
|
||||
override def remove(): Unit = ()
|
||||
}
|
||||
NullUnregisterNewHandler
|
||||
}
|
||||
|
||||
|
||||
def supported(signal: String): Boolean =
|
||||
try
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue