Tim Larson <tim <at> keow.org> writes:

> > >  include=true   ==  exclude=false
> > 
> > No.
> > 
> > >  include=false  ==  exclude=true
> > 
> > Yes.
> <snip/>
> 
> I admit that I did not completely follow your explanation, but
> is the problem that the statement equalities listed above are
> not correct,

Why should they be not correct? No, it's indeed only implementation/Ant.

> or that even if they are correct that they still
> would not provide compatibility, or lastly only that it cannot
> be implemented via Ant?  If it is only this last problem, then
> surely there is some other way to make Ant fit the need.

We have at the moment:

exclude.block.blockname=true
#exclude.block.blockname=true
and
exclude.block.blockname=false
would also work. But the latter only because of the mapping of
exclude.block.blockname to unless.exclude.block.blockname through this construct:

<condition property="unless.exclude.block.blockname">
  <istrue value="${exclude.block.blockname}"/>
</condition>

So unless.exclude.block.blockname is *only* set if exclude.block.blockname is
true/yes/on. Otherwise it is *not* set (to false or similar).

Ant can execute targets in dependency on set properties:

<target name="blockname-compile" unless="unless.exclude.block.blockname"/>

means: execute this target if the property unless.exclude.block.blockname is
*not* set. Setting the property to false would let the target be executed.

What I wanted to do:

include.block.blockname=true|false

mapped via

<condition property="exclude.block.blockname">
  <not>
    <istrue value="${include.block.blockname}"/>
  </not>
</condition>

and use unless="exclude.block.blockname".

This solution would be backwards compatible except for the case
exclude.block.blockname=false (or any value != true/yes/on) as this would not
lead to expected behaviour. The block would be excluded independent on the value
of this property.

Now when writing the answer to your first statement equalities mail I had the
idea that we could use double mapping:

<!-- additional wrapper for usage of include.block.blockname -->
<condition property="exclude.block.blockname">
  <not>
    <istrue value="${include.block.blockname}"/>
  </not>
</condition>
<!-- like before -->
<condition property="unless.exclude.block.blockname">
  <istrue value="${exclude.block.blockname}"/>
</condition>

As the default settings (blocks.properties) use include.block.blockname, in
local.blocks.properties exclude.block.blockname can be used with arbitrary value
because it's mapped again. This would lead to complete backwards compatibility
and fulfill your both statement equalities. The more I think about it the more I
like the latter solution though there is a bit more code.

It was a long mail, but I hope it's more clear now.

Joerg

Reply via email to