Sounds good. Would you like me to submit the design spec to Gradle Core with that same format?
-- 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 as a > > plugin. It ends up relying on some internal classes for a couple > > things (mainly an enum that indicates the process state). If this > > looks good, we could promote that class in core in be public instead > > of 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 API > >> into 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 API > >> 2) Move ExecHandleState from internal API to public API. Rename to be > >> 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, DefaultForkAction > >> that I originally had in core, but they could live in a plugin for > >> now (although they'll be extending internal classes and APIs) > >> > >> How does that sound? > >> > >> -- > >> John Engelman > >> > >> > >> On 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 to > >>> minimise 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/41c005e211c13237407db8ca031d8b215f9241c3 > >>>>>> > >>>>>> It does some work pulling apart the internal API for what makes > >>>>>> sense > >>>>>> to expose through the public API. Most of it is just a break up > >>>>>> of > >>>>>> what is currently there so that the build can wait on a process > >>>>>> later. > >>>>>> As for state, I've exposed the process state from the current > >>>>>> execution but I haven't looked at anything that would allow for > >>>>>> process state between gradle executions (i.e. I'm thinking > >>>>>> something > >>>>>> like a 'gradle start' that forks a process and a 'gradle stop' > >>>>>> that > >>>>>> ends it, somehow finding the right process and terminating it). > >>>>>> My > >>>>>> feeling there is that somehow getting the PID for the process and > >>>>>> dropping 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 that > >>>>>> extends 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 like > >>>>>>> project.extensions.async.javaFork { … } to get at it? Would > >>>>>>> that > >>>>>>> help to separate it enough? I guess I write it as a separate > >>>>>>> plugin > >>>>>>> entirely that adds the extension to the project only when you > >>>>>>> apply > >>>>>>> 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 Engelman > >>>>>>> > >>>>>>> > >>>>>>> On Thursday, November 21, 2013 at 10:16 AM, Luke Daley-2 [via > >>>>>>> Gradle] > >>>>>>> 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 our > >>>>>>>>> build > >>>>>>>>> to create > >>>>>>>>> an implementation of java process forking. Currently the > >>>>>>>>> JavaExec > >>>>>>>>> implementation is synchronous and I'm looking at implementing > >>>>>>>>> some > >>>>>>>>> features > >>>>>>>>> that would allow a build to fork multiple processes and then > >>>>>>>>> blocking on > >>>>>>>>> joining them back together. I don't see any designDocs related > >>>>>>>>> to > >>>>>>>>> this (or > >>>>>>>>> to parallel task execution within a project) so I wonder if > >>>>>>>>> there > >>>>>>>>> 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 > >>>>>>>> Project > >>>>>>>> API at all. We are working on a way to add new functionality > >>>>>>>> like > >>>>>>>> this, but it's not going to be available soon. It would be > >>>>>>>> preferable to deliver this as a kind of extension library for > >>>>>>>> the > >>>>>>>> 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_email > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> If you reply to this email, your message will be added to the > >>>>>>>> discussion 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.html > >>>>>> Sent 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-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.html > >>>> Sent 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-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.html > > Sent 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_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 > 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-tp5712028p5712108.html Sent from the gradle-dev mailing list archive at Nabble.com.