Submitted pull request with design spec for changes: 
https://github.com/gradle/gradle/pull/229

--  
John Engelman


On 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 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)  
> >>>>>>>> (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)  
> >>>>>> (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)  
> >>> (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.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-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.html
Sent from the gradle-dev mailing list archive at Nabble.com.

Reply via email to