G'day
I've made some minor changes to the way build failures are reported,
so that more context is included in the "What went wrong:" section of
the build failure report.

Entry point selection
----------------------------
Choosing a 'top-level' exception to report has not changed. As before,
we first find the "entry point" exception in the failure chain. This
is usually a GradleScriptException or TaskExecutionException, but in
some cases could be the 'deepest' exception marked with @Contextual.

Failure summary
-----------------------
Previously, we would simply report the entry point, it's direct cause,
and recursively report the nested cause for any exception that was
marked as @Contextual. So having a single non-contextual exception in
the chain meant that any 'deeper' contextual exceptions would not be
reported.

The way it now work is:
1) Report the entry point
2) Descend the chain, reporting any exception(s) marked with @Contextual
3) Report the direct cause of the last reportable exception. This will
be the direct cause of the 'deepest' @Contextual exception, or the
direct cause of the entry point.

In practice this means that all @Contextual exceptions in the chain
will be reported, even if interspersed with non-contextual exceptions.
This makes reporting meaningful when using ActionBroadcast or other
similar infrastructure that may wrap the real exception. Previously
the ultimate cause was not reported in this case.

UserCodeAction
-----------------------
When a user supplies code that we execute as an Action, you can now
wrap the user-supplied action in a UserCodeAction. This simply wraps
any exception (often emitted by Groovy) in a UserCodeException, which
is given a sensible message and is marked @Contextual.

An example of this in action is the maven.pom.withXml() hook in the
new 'maven-publish' plugin. Bad user code will now be reported like:

Execution failed for task ':publishMavenPublicationToMavenRepository'. (1)
 > Failed to publish publication 'maven' to repository 'maven' (2)
    > Failed to notify action. (3)
       > Could not apply withXml() to generated POM (4)
         > No such property: foo for class: groovy.util.Node (5)

1)  the TaskExecutionException
2)  the first @contextual exception
3) the "Failed to notify action" shouldn't really be there. It is
included because ListenerNotifyException is @Contextual, but it
doesn't really provide any failure context. I plan to remove this
annotation.
4) the UserCodeException message. This is the deepest @Contextual exception
5) The Groovy exception caught and wrapped by the UserCodeAction

I hope this makes exception reporting a bit more understandable.
cheers
Daz

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

    http://xircles.codehaus.org/manage_email


Reply via email to