I know ant is supposed to be follow a declarative style rather than a procedural style. But what is wrong with writing scripts using the 'if' task in conjunction with the ant-call task? like the below example <target name="determine-release-number"<if> <not> <isset property="release.number"/> </not> <then> <ant-call target="checkout-sources"/> </then> </if> --- On Tue, 8/17/10, Vimil Saju <vimils...@yahoo.com> wrote:
From: Vimil Saju <vimils...@yahoo.com> Subject: Re: Conditional target problem To: "Ant Users List" <user@ant.apache.org> Date: Tuesday, August 17, 2010, 4:20 PM I know ant is supposed to be declarative language as opposed to a procedural one, but whats wrong with using the 'if' task provided with ant-contrib along with "ant-call" task? Wont it make ant-scripts more readable something like this <if> --- On Tue, 8/17/10, Niklas Matthies <ml_ant-u...@nmhq.net> wrote: From: Niklas Matthies <ml_ant-u...@nmhq.net> Subject: Conditional target problem To: user@ant.apache.org Date: Tuesday, August 17, 2010, 3:35 PM We have something like the following (target bodies omitted): <target name="checkout-sources" depends="other stuff"> <!-- takes several minutes --> <target name="determine-release-number" depends="checkout-sources" unless="release.number"> <!-- determines release.number from sources --> <target name="target1" depends="determine-release-number"> <!-- needs release.number --> <target name="target2" depends="checkout-sources, target1"> <!-- needs sources and target1 --> The problem: "ant -Drelease.number=... target1" causes checkout-sources (and its dependencies) to be executed although there is no need for it, as release.number is already defined. We can't put the unless="release.number" on checkout-sources (and its dependencies) because it would break target2 when release.number is predefined. We can't make checkout-sources a macro (called both by target2 and by determine-release-number) because of all its dependencies, and also because an up-to-date check on it is highly non-trivial, so in the target2 case it might end up being executed twice. We _could_ duplicate the body and the dependencies of checkout-sources into determine-release-number (and remove the latter's dependency on checkout-sources), but I'd have to do that for quite a number of the dependencies as well, as they contribute to the expensiveness of checkout-sources. The result would be a lot of redundancy, effectively duplicating a dependency subgraph. Is there a way to solve the problem, within a single Ant instance, without creating redundancies? -- Niklas Matthies --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@ant.apache.org For additional commands, e-mail: user-h...@ant.apache.org