Thanks John. -- Luke Daley Principal Engineer http://gradleware.com
On 10 Dec 2013, at 14:50, johnrengelman wrote:
Submitted pull request with design spec for changes: https://github.com/gradle/gradle/pull/229-- John EngelmanOn Monday, December 9, 2013 at 3:34 PM, Luke Daley-2 [via Gradle] wrote:Sounds good. Would you like me to submit the design spec to Gradle Core with that same format?If you're up for it, that would be a great way to make this happen.-- John Engelman On Monday, December 9, 2013 at 12:06 PM, Luke Daley-2 [via Gradle] wrote:Good stuff John, I'll take a look at it and leave any applicable comments on GitHub.One output of this work that I'd like to see is a design spec for the work that needs to happen in the core to make this better supported.Your plugin will be illuminating for that. -- Luke Daley Principal Engineer http://gradleware.com On 5 Dec 2013, at 13:07, johnrengelman wrote:I went ahead and implemented an initial version of this entirely asa plugin. It ends up relying on some internal classes for a couple things (mainly an enum that indicates the process state). If thislooks good, we could promote that class in core in be public insteadof internal OR I could add a new enum in the plugin that wraps the internal enum to a public one. Here it is: https://github.com/johnrengelman/gradle-processes It's available on JCenter. -- John Engelman On Tuesday, November 26, 2013 at 9:14 AM, John Engelman wrote:Sure. Mainly these are to get certain things from the internal APIinto a public space with minimal impact.1) Create ProcessHandle public API. Make ExecHandle (internal API)extend it. Move getState(), waitForFinish(), getCommand(), getArguments(), getEnvironment(), getDirectory() to public API2) Move ExecHandleState from internal API to public API. Rename tobe ProcessState 3) Add boolean isIgnoreExitValue to DefaultExecHandle. Initialize with value from AbstractExecHandleBuilder (this gives me the ignoreExitValue state on the ProcessHandle, for checking later) I think those are the only ones that should really go into core. They shouldn't have any impact on any other code. Additionally there are definitions for: ForkAction (based on ExecAction), JavaForkAction, DefaultJavaForkAction, DefaultForkActionthat I originally had in core, but they could live in a plugin fornow (although they'll be extending internal classes and APIs) How does that sound? -- John EngelmanOn Tuesday, November 26, 2013 at 9:05 AM, Luke Daley-2 [via Gradle]wrote:On 26 Nov 2013, at 15:00, johnrengelman wrote:That sounds good Luke. I'll submit a PR for core for the changes I need in the next couple of days and then start up a plugin project.Can you outline the core changes you need before hand? I'd like tominimise this at this point.-- John Engelman On Tuesday, November 26, 2013 at 4:52 AM, Luke Daley-2 [via Gradle] wrote:On 22 Nov 2013, at 21:57, johnrengelman wrote:This is my state at defining the API: https://github.com/johnrengelman/gradle/commit/41c005e211c13237407db8ca031d8b215f9241c3It does some work pulling apart the internal API for what makessenseto expose through the public API. Most of it is just a break upofwhat is currently there so that the build can wait on a processlater. As for state, I've exposed the process state from the currentexecution but I haven't looked at anything that would allow forprocess state between gradle executions (i.e. I'm thinking somethinglike a 'gradle start' that forks a process and a 'gradle stop'thatends it, somehow finding the right process and terminating it).My feeling there is that somehow getting the PID for the process anddropping it into the build/ directory would be the best option.But that's step 3. Step 2, would be to expose the public interface (AsyncProcessOperations) through an extension on the project.It would be better to do this work external to the Gradle codebase to incubate it. I don't see a reason why this couldn't start life as an external plugin and then move in (if necessary) when we understand the requirements more. I also think it would get more contributions this way as it's easier to contribute to a Gradle plugin project than the Gradle core codebase.I was thinking that adding a plugin that adds an extension thatextends the AsyncProcessOperations interface would work, thoughts? -- John Engelman On Thursday, November 21, 2013 at 10:34 AM, John Engelman wrote:Could we add the functionality to the Project API through an extension then? Something likeproject.extensions.async.javaFork { … } to get at it? Wouldthat help to separate it enough? I guess I write it as a separate pluginentirely that adds the extension to the project only when youapply it. Yeah, I suspected I would need to create a new interface in org.gradle.process to expose the functionality needed. Probably leave ExecHandle where it is to limit the impact. -- John EngelmanOn Thursday, November 21, 2013 at 10:16 AM, Luke Daley-2 [viaGradle] wrote:On 21 Nov 2013, at 3:11 pm, johnrengelman <[hidden email] (/user/SendEmail.jtp?type=node&node=5712031&i=0)> wrote:Hi all -I've been finding more and more reasons in our build in ourbuild to create an implementation of java process forking. Currently the JavaExec implementation is synchronous and I'm looking at implementing some featuresthat would allow a build to fork multiple processes and thenblocking on joining them back together. I don't see any designDocs related to this (orto parallel task execution within a project) so I wonder ifthere is some thought already on this. I have a working implementation that I want to extend into gradle core if possible. The simple API would be to add the following to Project: ExecHandle javafork(Closure closure); ExecHandle fork(Closure closure); Might also be useful to add the following: ExecResult join(ExecHandle handle); List<ExecResult> join(List<ExecHandle> handles); Any thoughts or suggestions?ExecHandle is currently internal API, so at the least that would have to be addressed. Another problem is that we are really reluctant to grow the ProjectAPI at all. We are working on a way to add new functionalitylike this, but it's not going to be available soon. It would bepreferable to deliver this as a kind of extension library forthe time being. It will have to use internal API so that does mean there may be versioning issues. In my experience when working with async processes, you nearly always end up doing some pattern matching on the launched process for state control. It would be good to get some support for that in there too. -- Luke Daley Principal Engineer, Gradleware http://gradleware.com --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_emailIf you reply to this email, your message will be added to thediscussion below: http://gradle.1045684.n5.nabble.com/ForkedJavaExec-implementation-tp5712028p5712031.html To start a new topic under gradle-dev, email [hidden email] (/user/SendEmail.jtp?type=node&node=5712056&i=0) (mailto:[hidden email] (/user/SendEmail.jtp?type=node&node=5712056&i=1)) To unsubscribe from gradle-dev, click here ( NAML (http://gradle.1045684.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml)-- View this message in context: http://gradle.1045684.n5.nabble.com/ForkedJavaExec-implementation-tp5712028p5712037.htmlSent from the gradle-dev mailing list archive at Nabble.com (http://Nabble.com)(http://Nabble.com) (http://Nabble.com) (http://Nabble.com).--------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email If you reply to this email, your message will be added to the discussion below: http://gradle.1045684.n5.nabble.com/ForkedJavaExec-implementation-tp5712028p5712056.html To start a new topic under gradle-dev, email[hidden email] (/user/SendEmail.jtp?type=node&node=5712058&i=0)(mailto:[hidden email] (/user/SendEmail.jtp?type=node&node=5712058&i=1)) To unsubscribe from gradle-dev, click here ( NAML (http://gradle.1045684.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml)-- View this message in context: http://gradle.1045684.n5.nabble.com/ForkedJavaExec-implementation-tp5712028p5712057.htmlSent from the gradle-dev mailing list archive at Nabble.com (http://Nabble.com)(http://Nabble.com) (http://Nabble.com).--------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email If you reply to this email, your message will be added to the discussion below: http://gradle.1045684.n5.nabble.com/ForkedJavaExec-implementation-tp5712028p5712058.html To start a new topic under gradle-dev, email [hidden email] (/user/SendEmail.jtp?type=node&node=5712107&i=0) (mailto:[hidden email] (/user/SendEmail.jtp?type=node&node=5712107&i=1)) To unsubscribe from gradle-dev, click here ( NAML (http://gradle.1045684.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml)-- View this message in context: http://gradle.1045684.n5.nabble.com/ForkedJavaExec-implementation-tp5712028p5712101.htmlSent from the gradle-dev mailing list archive at Nabble.com (http://Nabble.com)(http://Nabble.com).--------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email If you reply to this email, your message will be added to the discussion below: http://gradle.1045684.n5.nabble.com/ForkedJavaExec-implementation-tp5712028p5712107.html To start a new topic under gradle-dev, email [hidden email] (/user/SendEmail.jtp?type=node&node=5712109&i=0)(mailto:[hidden email] (/user/SendEmail.jtp?type=node&node=5712109&i=1))To unsubscribe from gradle-dev, click here ( NAML (http://gradle.1045684.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml)-- View this message in context: http://gradle.1045684.n5.nabble.com/ForkedJavaExec-implementation-tp5712028p5712108.htmlSent from the gradle-dev mailing list archive at Nabble.com (http://Nabble.com).--------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_emailIf you reply to this email, your message will be added to the discussion below: http://gradle.1045684.n5.nabble.com/ForkedJavaExec-implementation-tp5712028p5712109.html To start a new topic under gradle-dev, email ml-node+s1045684n1436218...@n5.nabble.com (mailto:ml-node+s1045684n1436218...@n5.nabble.com) To unsubscribe from gradle-dev, click here (http://gradle.1045684.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=1436218&code=am9obi5yLmVuZ2VsbWFuQGdtYWlsLmNvbXwxNDM2MjE4fDIyMTUyNjEzNQ==). NAML (http://gradle.1045684.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml)--View this message in context: http://gradle.1045684.n5.nabble.com/ForkedJavaExec-implementation-tp5712028p5712113.htmlSent from the gradle-dev mailing list archive at Nabble.com.
--------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email