On 15/04/2013, at 7:02 PM, Luke Daley <luke.da...@gradleware.com> wrote:
> > On 14/04/2013, at 2:51 AM, Daz DeBoer <darrell.deb...@gradleware.com> wrote: > >> On 13 April 2013 17:11, Peter Niederwieser <pnied...@gmail.com> wrote: >>> Daz DeBoer-2 wrote >>>> The problem is that this equivalence doesn't translate to the parallel >>>> world. I guess we don't currently have a nice way to describe the >>>> 'contract' that you're expecting to be honoured >>> >>> I'm not sure if we are on the same page already. What I'm saying is that we >>> should change the behavior of `--parallel` to honor the contract I >>> mentioned. How we do that is secondary (for now). >> >> While I agree this makes sense for: >> "gradle --parallel clean build " >> >> it's not so clear that it works for: >> "gradle --parallel :a:build :b:build" >> Do you really want to wait for 'a' to finish building before starting >> to build 'b'? > > It's more important that `clean build` does the right thing than it is that > `a:build b:build` is as fast as possible. So, without other mechanisms then > it has to work this way for my money. > > Given that we are starting to add the capability to be very explicit about > task orderings though it is indeed not that simple. > >> So I'm not sure about making this an explicit contract. I'm not 100% >> against, but I don't think it's a given either. >> I think we first need to define exactly what the contract means, ie: >> "gradle clean build" constructs an anonymous build-type with >> parameters "clean, build" (where build-type is a well-defined >> construct). > > I'm not sure what anonymous build types would give you. Every Gradle > invocation is effectively an "anonymous build type" in terms of what we have > been describing as build types. > > > The options as I seem them are: > > 1. task order at invocation time implies a temporary should run after > relationship > 2. task order at invocation time implies no relationship between tasks and > the necessary relationships must be described elsewhere > > > To me #2 is definitely better as the more information we have about the task > graph in a mineable way the more interesting things we can do with this > information in other contexts. The problem for me though is that we might be > a ways away from having the capability to do #2. This means we have to live > with the current unsafe behaviour until that time. Given that parallel > execution is an incubating feature, I guess living with the current unsafe > behaviour is not so bad. This pretty much sums up my thoughts as well. With must-run-after, we can pretty much express what we need for the command line: `clean` really must run before `build`. There's no should there. -- Adam Murdoch Gradle Co-founder http://www.gradle.org VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting http://www.gradleware.com Join us at the Gradle Summit 2013, June 13th and 14th in Santa Clara, CA: http://www.gradlesummit.com