You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by Kev Jackson <ke...@it.fts-vn.com> on 2006/04/27 04:50:16 UTC
RFE - provide 'scope' information for targets (includes possible
implementation)
Hi,
One of the managers here was looking at the way the description
attribute is used within ant. He thought that it is used for two purposes:
1 - describe a task so that -projecthelp can provide output for the user
of a build file
2 - to provide some kind of 'scope' to the targets ie targets without a
description are considered 'private' and really shouldn't be called directly
He asked if I could look into a way of enforcing the second of these in
code, so that it is impossible to call a 'private' target directly from
the cmd line.
It's a relatively straightfoward change involving only minor additions
to the code, and it's bwc (as far as I can tell).
Attached patch file of implementation for your consideration.
Pros:
- bwc (AFAIK) - by default targets are 'public', so old build files
which don't have target scope continue to run as normal
- could be used by IDE developers to filter out executable targets more
effectively
- could be used by other tools (AntGraph etc) to provide more semantic
information to the user
- allows a description to be added to complex internal targets, whilst
still keeping them 'private'
Cons:
- change to the core classes
Current patch doesn't alter the -projecthelp to separate public/private
targets, it simply enforces the new scope rules for execution.
Notes:
- only tested manually, no unit tests
Thanks
Kev
Re: RFE - provide 'scope' information for targets (includes possible
implementation)
Posted by Kev Jackson <ke...@it.fts-vn.com>.
Steve Loughran wrote:
> Kev Jackson wrote:
>
>> Hi,
>>
>> One of the managers here was looking at the way the description
>> attribute is used within ant. He thought that it is used for two
>> purposes:
>>
>> 1 - describe a task so that -projecthelp can provide output for the
>> user of a build file
>> 2 - to provide some kind of 'scope' to the targets ie targets without
>> a description are considered 'private' and really shouldn't be called
>> directly
>
>
> no, more "primary" and "secondary" targets. You want private, give a
> target a name beginning with a '-' symbol
>
Thanks for that, didn't know before about the -name workaround.
> Scope is quite a complex thing as we have to consider implications for
> <import>, <ant>, etc, etc.
Yeah I didn't consider this at all, just the simple case of execution
directly from the cmd line.
Ok the RFE is not required and would just cause problems, thanks for
explaining.
Kev
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org
Re: RFE - provide 'scope' information for targets (includes possible
implementation)
Posted by Steve Loughran <st...@apache.org>.
Kev Jackson wrote:
> Hi,
>
> One of the managers here was looking at the way the description
> attribute is used within ant. He thought that it is used for two purposes:
>
> 1 - describe a task so that -projecthelp can provide output for the user
> of a build file
> 2 - to provide some kind of 'scope' to the targets ie targets without a
> description are considered 'private' and really shouldn't be called
> directly
no, more "primary" and "secondary" targets. You want private, give a
target a name beginning with a '-' symbol
Scope is quite a complex thing as we have to consider implications for
<import>, <ant>, etc, etc.
>
> He asked if I could look into a way of enforcing the second of these in
> code, so that it is impossible to call a 'private' target directly from
> the cmd line.
>
> It's a relatively straightfoward change involving only minor additions
> to the code, and it's bwc (as far as I can tell).
>
> Attached patch file of implementation for your consideration.
>
> Pros:
> - bwc (AFAIK) - by default targets are 'public', so old build files
> which don't have target scope continue to run as normal
> - could be used by IDE developers to filter out executable targets more
> effectively
> - could be used by other tools (AntGraph etc) to provide more semantic
> information to the user
> - allows a description to be added to complex internal targets, whilst
> still keeping them 'private'
>
> Cons:
> - change to the core classes
>
> Current patch doesn't alter the -projecthelp to separate public/private
> targets, it simply enforces the new scope rules for execution.
>
> Notes:
> - only tested manually, no unit tests
>
> Thanks
> Kev
>
>
>
> ------------------------------------------------------------------------
>
> Index: D:/java_projects/ant-core-trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java
> ===================================================================
> --- D:/java_projects/ant-core-trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java (revision 396371)
> +++ D:/java_projects/ant-core-trunk/src/main/org/apache/tools/ant/helper/ProjectHelper2.java (working copy)
> @@ -800,6 +800,8 @@
> }
> } else if (key.equals("description")) {
> target.setDescription(value);
> + } else if (key.equals("scope")) {
> + target.setScope(value);
> } else {
> throw new SAXParseException("Unexpected attribute \""
> + key + "\"", context.getLocator());
> Index: D:/java_projects/ant-core-trunk/src/main/org/apache/tools/ant/Project.java
> ===================================================================
> --- D:/java_projects/ant-core-trunk/src/main/org/apache/tools/ant/Project.java (revision 396371)
> +++ D:/java_projects/ant-core-trunk/src/main/org/apache/tools/ant/Project.java (working copy)
> @@ -1228,7 +1228,7 @@
> if (targetName == null) {
> String msg = "No target specified";
> throw new BuildException(msg);
> - }
> + }
>
> // Sort and run the dependency tree.
> // Sorting checks if all the targets (and dependencies)
> @@ -1246,6 +1246,12 @@
> throws BuildException {
> Set succeededTargets = new HashSet();
> BuildException buildException = null; // first build exception
> + // check scope of first target
> + Target t = (Target)sortedTargets.get(0);
> + if (t.getScope().equals(Target.PRIVATE_TARGET)) {
> + log(t, "Cannot execute '" + t.getName() + "' directly - declared as private", MSG_ERR);
> + System.exit(0);
> + }
> for (Enumeration iter = sortedTargets.elements();
> iter.hasMoreElements();) {
> Target curtarget = (Target) iter.nextElement();
> Index: D:/java_projects/ant-core-trunk/src/main/org/apache/tools/ant/Target.java
> ===================================================================
> --- D:/java_projects/ant-core-trunk/src/main/org/apache/tools/ant/Target.java (revision 396371)
> +++ D:/java_projects/ant-core-trunk/src/main/org/apache/tools/ant/Target.java (working copy)
> @@ -33,6 +33,9 @@
> */
> public class Target implements TaskContainer {
>
> + protected static final String PUBLIC_TARGET = "public";
> + protected static final String PRIVATE_TARGET = "private";
> +
> /** Name of this target. */
> private String name;
> /** The "if" condition to test on execution. */
> @@ -45,7 +48,9 @@
> private List children = new ArrayList();
> /** Since Ant 1.6.2 */
> private Location location = Location.UNKNOWN_LOCATION;
> -
> + /** The scope of this target */
> + private String scope = PUBLIC_TARGET;
> +
> /** Project this target belongs to. */
> private Project project;
>
> @@ -478,4 +483,20 @@
> public int hashCode() {
> return (name != null ? name.hashCode() : 0);
> }
> +
> + /**
> + * Gets the targets scope
> + * @return scope
> + */
> + public String getScope() {
> + return scope;
> + }
> +
> + /**
> + * Sets the targets scope
> + * @param s
> + */
> + public void setScope(String s) {
> + this.scope = s;
> + }
> }
>
>
>
> ------------------------------------------------------------------------
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
> For additional commands, e-mail: dev-help@ant.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org