Hans Dockter wrote:
Hi,
I'm thinking about the best way to implement stopping a Gradle build.
One way to do it would be to add a type BuildController. A instance of
this can be optionally passed to the Gradle.run method. The
TaskExecuter and the Task will be associated with an instance of
BuildController. If the state of the build controller is changed to
stop, the TaskExecuter, Task, etc can react upon this and will throw
eventually a BuildInterruptedException. This is a pretty intrusive
approach. It has the additional draw back, that every task needs to be
smart about this to make it work well. For example a task that
delegates to an Ant task must wait with stopping the build until the
Ant task has finished.
Another way of doing this is to still add a type BuildController. You
can send a StopEvent to the BuildController. We have a separate Thread
that receives this StopEvent. If it is received, the Thread running
the Gradle build will be stopped.
Thoughts?
Any solution to this problem absolutely must be non-invasive to be worth
the cost. If not, you're effectively making everyone who writes Gradle
code (build scripts included) pay a price to make their code
cancellable, whether or not they or anybody else ever want to cancel it.
What's the problem with using ctrl-c or System.exit() or Process.destroy() ?
That is, if you want to be able to cancel a build, you need to run it in
forked mode.
- Hans
--
Hans Dockter
Gradle Project Manager
http://www.gradle.org
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email