B.39 Relentless

The <relentless> task will execute all of the nested tasks, regardless of whether one or more of the nested tasks fails.

When <relentless> has completed executing the nested tasks, it will either

An appropriate message will be written to the log.

Tasks are executed in the order that they appear within the <relentless> task. It is up to the user to ensure that relentless execution of the nested tasks is safe.

Table B.40: Attributes

NameTypeDescriptionDefaultRequired
descriptionStringA string that will be included in the log output. This can be useful for helping to identify sections of large phing builds. N/ANo
terseBooleanSetting this to true will eliminate some of the progress output generated by <relentless>. This can reduce clutter in some cases. falseNo

The only nested element supported by <relentless> is a list of tasks to be executed. At least one task must be specified.

It is important to note that <relentless> only proceeds relentlessly from one task to the next - it does not apply recursively to any tasks that might be invoked by these nested tasks. If a nested task invokes some other list of tasks (perhaps by <phingcall> for example), and one of those other tasks fails, then the nested task will stop at that point.

B.39.1 Example

A relentless task to print out the first five canonical variable names:

<relentless description="The first five canonical variable names.">
    <echo>foo</echo>
    <echo>bar</echo>
    <echo>baz</echo>
    <echo>bat</echo>
    <echo>blah</echo>
</relentless>

which should produce output looking more or less like

[relentless] Relentlessly executing: The first five canonical variable names.
[relentless] Executing: task 1
[echo] foo
[relentless] Executing: task 2
[echo] bar
[relentless] Executing: task 3
[echo] baz
[relentless] Executing: task 4
[echo] bat
[relentless] Executing: task 5
[echo] blah
[relentless] All tasks completed successfully.

If you change the first line to set the terse parameter,

<relentless terse="true" description="The first five canonical variable names."/>

the output will look more like this:

[relentless] Relentlessly executing: The first five canonical variable names.
[echo] foo
[echo] bar
[echo] baz
[echo] bat
[echo] blah
[relentless] All tasks completed successfully.

If we change the third task to deliberately fail

<relentless terse="true" description="The first five canonical variable names.">
    <echo>foo</echo>
    <echo>bar</echo>
    <fail>baz</fail>
    <echo>bat</echo>
    <echo>blah</echo>
</relentless>

then the output should look something like this.

[relentless] Relentlessly executing: The first five canonical variable names.
[echo] foo
[echo] bar
[relentless] Task task 3 failed: baz
[echo] bat
[echo] blah

BUILD FAILED
/path/build.xml:1177: Relentless execution: 1 of 5 tasks failed.