On 15/03/2013, at 2:04 PM, Adam Murdoch <adam.murd...@gradleware.com> wrote:

> 
> On 15/03/2013, at 1:06 PM, Luke Daley <luke.da...@gradle.biz> wrote:
> 
>> 
>> 
>> On 14/03/2013, at 15:21, Adam Murdoch <adam.murd...@gradleware.com> wrote:
>> 
>>> 
>>> On 15/03/2013, at 7:41 AM, Daz DeBoer <darrell.deb...@gradleware.com> wrote:
>>> 
>>>> 
>>>> 
>>>> On 12 March 2013 20:39, Adam Murdoch <adam.murd...@gradleware.com> wrote:
>>>> 
>>>> 
>>>> 
>>>> On 13 March 2013 11:36, Daz DeBoer <darrell.deb...@gradleware.com> wrote:
>>>> Hi Marcin
>>>> 
>>>> You pull request has been merged with a few tweaks. The most important of 
>>>> those was to fix DefaultTaskGraphExecuter so that it is considered 
>>>> "populated" whenever a task has been added. Without this fix 'gradle 
>>>> --dry-run' was broken. This breakage was picked up by 
>>>> TaskExecutionIntegrationTest, which I converted to Spock and added a few 
>>>> "mustRunAfter" test cases.
>>>> 
>>>> Other than that, it looks great. Get this into the user guide and I'm sure 
>>>> it will be a popular feature.
>>>> One minor improvement would be to support the map-based syntax for 
>>>> mustRunAfter, in a similar way to dependsOn:
>>>> 
>>>>     task foo(mustRunAfter: 'bar')
>>>> 
>>>> Not sure what our plans around supporting different parameters in this 
>>>> way, but it feels like a natural fit.
>>>> 
>>>> Let's see what falls out of the next story first.
>>>>  
>>>> 
>>>> On 11 March 2013 17:00, Marcin Erdmann <marcin.erdm...@proxerd.pl> wrote:
>>>> On Mar 11, 2013 1:32 AM, "Adam Murdoch" <adam.murd...@gradleware.com> 
>>>> wrote:>
>>>> > Personally, I would love to see some more work on task execution model, 
>>>> > if you're interested in working on it.
>>>> 
>>>> I actually wanted to work on making copy task encoding-aware but it now 
>>>> seems to me like working on the task execution makes more sense and will 
>>>> be more benefitial to a bigger group of users. I also know the code in 
>>>> that area pretty well now so hopefully I should be able to get stuff done 
>>>> quite quickly. Any design docs and/or implementation hints on those 
>>>> 'finalizer' tasks would be highly appreciated. I'm happy to start on it 
>>>> after I'm done with the mustRunAfter docs.
>>>> 
>>>> I agree that it would be fantastic to keep moving forward on improving 
>>>> task execution. Our Ant-import support will never function properly 
>>>> without "shouldRunAfter", and "finalisers" as described by Adam would be 
>>>> great for a whole bunch of use cases.
>>>> 
>>>> The reporting spec 
>>>> (https://github.com/gradle/gradle/blob/master/design-docs/reporting.md) is 
>>>> probably the only real design doc for these changes.
>>>> 
>>>> It is the design doc for the changes.
>>>>  
>>>> You'll see that there are a few integration tests that we don't yet have 
>>>> coverage for wrt "mustRunAfter". If you are willing to add those in, that 
>>>> would be awesome. The spec is a little inconsistent regarding whether the 
>>>> dashboard task should run if a reporting task fails: I think we're happy 
>>>> with it as implemented now, with the next stories taking this a little 
>>>> further.
>>>> 
>>>> We are. I've updated the spec to (hopefully) be more consistent.
>>>>  
>>>> 
>>>> The best design discussion I can find regarding finalisers is in a _very_ 
>>>> long email thread on the dev list. Here's a link to the middle of it: 
>>>> http://gradle.1045684.n5.nabble.com/Gradle-reporting-improvements-tp5710408p5710809.html
>>>> 
>>>> I've written up the current plan for finalisers in the spec. This is 
>>>> really a write-up of the current state of the discussion, rather than a 
>>>> concrete plan: 
>>>> https://github.com/gradle/gradle/blob/master/design-docs/reporting.md#automatically-add-dashboard-report-task-to-task-graph
>>>> 
>>>> Please (everyone) have a read and give feedback. In particular, we need to 
>>>> sort out how the DSL is going to look.
>>>> 
>>>> 
>>>> As is often the case, the best I can do is summarise and attempt to 
>>>> clarify in my own head. Hopefully this helps others as well.
>>>> 
>>>> So a single task can 'finalise' a set of other tasks? I'm not sure that 
>>>> 'finalise' is the perfect term, but I can't think of anything better.
>>>> I was initially confused by the expression "A is a finaliser for B", 
>>>> because that seemed to preclude "A is a finaliser for C". But if I say "A 
>>>> finalises B" and "A finalises C" it makes sense. It's not a real 
>>>> distinction, but the language can make a difference to understandability.
>>>> 
>>>> If we say Task A "finalises" Tasks [B,C,D], then:
>>>> - presence of A does not force any of [B,C,D] to be in the graph
>>>> - A will not run if none of [B,C,D] run
>>> 
>>> A's dependencies will not run either. This is a 'should' constraint, as in: 
>>> A and its dependencies should not be executed of none of B, C or D are 
>>> executed, but it doesn't matter if A or any of its dependencies are 
>>> executed for some other reason.
>>> 
>>>> - A will run after all of [B,C,D] that do run
>>>> - A will still run even if any of [B,C,D] fail
>>> 
>>> This is a 'must' constraint: If any of B, C or D are executed, then A and 
>>> its dependencies must be executed regardless of whether B, C or D succeeded 
>>> or failed. And regardless of whether the build is executed with 
>>> `--continue` or not.
>>> 
>>> A couple more:
>>> 
>>> - The presence of B, C or D in the graph forces A to be added.
>>> - I'd also add that A should run as early as possible (e.g. generate the 
>>> dashboard immediately after the last reporting task has completed, or stop 
>>> the web container as soon as the integration tests have finished).
>> 
>> I'm not sure I'd want to express this via "finalises". What I want to say 
>> is: stop the container when it's no longer needed. I don't want to have to 
>> say the stop task finalises all the tasks that use the container.
> 
> Sure. The plan (in the 'deploying things for testing' spec) is to build 
> something declarative that sits on top of this. You wouldn't say 'finalise 
> this task with that task', you'd say 'this task/resource uses this resource' 
> and Gradle would infer exactly which tasks are required and how to order them.

Rad.

-- 
Luke Daley
Principal Engineer, Gradleware 
http://gradleware.com

Join me at the Gradle Summit 2013, June 13th and 14th in Santa Clara, CA: 
http://www.gradlesummit.com


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to