On 14/02/2012, at 10:02 PM, Joern Huxhorn wrote:

> On 14.02.2012, at 19:06, Luke Daley wrote:
> 
>> 
>> On 14/02/2012, at 2:24 PM, Joern Huxhorn wrote:
>> 
>>> The Release Notes at 
>>> http://wiki.gradle.org/display/GRADLE/Gradle+1.0-milestone-8+Release+Notes 
>>> contain the following example:
>>> 
>>> signing {
>>> required = { gradle.taskGraph.hasTask("uploadArchives") && 
>>> !version.endsWith("SNAPSHOT") }
>>> }
>> 
>> I just fixed that up to make it a little clearer, thanks. The hasTask() 
>> method requires an absolute path as you found out.
>> 
>>> This caused me quite a bit of confusion since in a multi-module project, 
>>> the task contained in taskGraph is something like ':foo:uploadArchives' so 
>>> the code above wouldn't work. (On a side note, I use the task 
>>> uploadPublished instead of uploadArchives.)
>>> 
>>> The only way I could find to achieve something like the functionality 
>>> intended above was
>>> signing {
>>> required = { gradle.taskGraph.allTasks.any { it instanceof Upload } && 
>>> !version.endsWith("SNAPSHOT") }
>>> }
>>> 
>>> Or am I missing something and there is a more elegant way?
>> 
>> That will not allow you to `gradle install` (the install task is an Upload 
>> task) without signing which may not be what you want. Signing configuration 
>> is per project, and hasTask() accepts task objects. So you could do…
>> 
>> signing {
>> required = { gradle.taskGraph.hasTask(uploadPublished) && 
>> !version.endsWith("SNAPSHOT") }
>> }
> 
> I implemented it differently in the meantime
>       signing {
>               required = !version.endsWith('SNAPSHOT')
>               sign configurations.archives
>       }
> 
> and then, in the part of my build that is asking for the PW if necessary:
> 
> gradle.taskGraph.whenReady { taskGraph ->
>       if(taskGraph.allTasks.any { it instanceof Sign } && 
> !version.endsWith("SNAPSHOT")) {
>               String pgpPassword = System.properties.'pgpPassword'
>               if(!pgpPassword) {
>                       Console console = System.console()
>                       pgpPassword = new String(console.readPassword("\nPGP 
> Private Key Password: "))
>               }
>               allprojects*.setProperty('signing.password', pgpPassword)
>       }
> }
> 
> That way I'll only get asked if a Sign task is actually contained in the 
> taskGraph. Neat.

I'd consider doing it slightly differently…

gradle.taskGraph.whenReady { taskGraph ->
        if(taskGraph.allTasks.any { it instanceof Sign && it.required }) {
                …
        }
}

All Sign tasks have a “required” property that is wired to 
`project.signing.required` by default, so above is functionally equivalent. 
It's also slightly more correct as you could potentially override the 
`required` value for a particular task.

>> 
>> Actually… I think I'll update the cable to that.
> 
> Thank you very much for your fast answer. Did I mention that I really love 
> your support?

No problems at all. Thanks for the initial code that went in to this plugin.

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


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

    http://xircles.codehaus.org/manage_email


Reply via email to