Browse Source

Make <echoproperties> support nested <propertyset>s.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@274575 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 22 years ago
parent
commit
9e79f648a4
5 changed files with 70 additions and 21 deletions
  1. +2
    -2
      WHATSNEW
  2. +26
    -6
      docs/manual/OptionalTasks/echoproperties.html
  3. +8
    -0
      src/etc/testcases/taskdefs/optional/echoproperties.xml
  4. +25
    -12
      src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.java
  5. +9
    -1
      src/testcases/org/apache/tools/ant/taskdefs/optional/EchoPropertiesTest.java

+ 2
- 2
WHATSNEW View File

@@ -306,8 +306,8 @@ Other changes:
defaultexcludes task. Bugzilla Report 12700.

* There is a new data type <propertyset> that can be used to collect
properties. It is supported by <ant>, <antcall>, <subant>, <java>
and <junit>.
properties. It is supported by <ant>, <antcall>, <subant>, <java>,
<echoproperties> and <junit>.

* <concat> can now control the encoding of the output as well and optionally
add new-line characters at the end of files that get concatenated but


+ 26
- 6
docs/manual/OptionalTasks/echoproperties.html View File

@@ -9,12 +9,14 @@

<h2><a name="echoproperties">echoproperties</a></h2>
<h3>Description</h3>
<p>Displays all the current properties in the project. The output can be
sent to a file if desired. You can also specify a subset of properties
to save by naming a prefix: only properties starting with this
prefix will be saved. This task can be used as a somewhat contrived
means of returning data from an <tt>&lt;ant&gt;</tt> invocation,
but is really for debugging build files.</p>

<p>Displays all the current properties (or a subset of them specified
by a nested <code>&lt;propertyset&gt;</code>) in the project. The
output can be sent to a file if desired. This task can be used as a
somewhat contrived means of returning data from an
<tt>&lt;ant&gt;</tt> invocation, but is really for debugging build
files.</p>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0">
<tr>
@@ -59,6 +61,16 @@ but is really for debugging build files.</p>
<td valign="top" align="center">No</td>
</tr>
</table>

<h3>Parameters specified as nested elements</h3>

<h4>propertyset</h4>

<p>You can specify subsets of properties to be echoed with <a
href="../CoreTypes/propertyset.html">propertyset</a>s.</p>

<p><em>since Ant 1.6</em>.</p>

<h3>Examples</h3>
<blockquote><pre>
&lt;echoproperties/&gt;
@@ -79,6 +91,14 @@ allow the build to continue.</p>
&lt;echoproperties prefix="java."/&gt;
</pre></blockquote>
<p>List all properties beginning with "java."</p>
<blockquote><pre>
&lt;echoproperties&gt;
&lt;propertyset&gt;
&lt;propertyref prefix="java."/&gt;
&lt;/propertyset&gt;
&lt;/echoproperties&gt;
</pre></blockquote>
<p>List all properties beginning with "java."</p>

<hr>
<p align="center">Copyright &copy; 2002-2003 Apache Software Foundation. All rights


+ 8
- 0
src/etc/testcases/taskdefs/optional/echoproperties.xml View File

@@ -64,6 +64,14 @@
<echoproperties destfile="test-prefix.properties" prefix="a." />
</target>

<target name="testEchoPrefixAsPropertyset" depends="setup">
<echoproperties destfile="test-prefix.properties">
<propertyset>
<propertyref prefix="a."/>
</propertyset>
</echoproperties>
</target>

<target name="cleanup">
<delete file="test.properties" failonerror="no" />
<delete file="test-prefix.properties" failonerror="no" />


+ 25
- 12
src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.java View File

@@ -1,7 +1,7 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* Copyright (c) 2002-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -65,12 +65,14 @@ import java.io.Writer;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Properties;
import java.util.Vector;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.EnumeratedAttribute;
import org.apache.tools.ant.types.PropertySet;
import org.apache.tools.ant.util.CollectionUtils;
import org.apache.tools.ant.util.DOMElementWriter;
import org.w3c.dom.Document;
@@ -153,11 +155,7 @@ public class EchoProperties extends Task {
*/
private boolean failonerror = true;

/**
* Prefix string controls which properties to save.
*/
private String prefix = null;

private Vector propertySets = new Vector();

private String format = "text";

@@ -207,9 +205,20 @@ public class EchoProperties extends Task {
*@param prefix The new prefix value
*/
public void setPrefix(String prefix) {
this.prefix = prefix;
PropertySet ps = new PropertySet();
ps.setProject(getProject());
ps.appendPrefix(prefix);
addPropertyset(ps);
}

/**
* A set of properties to write.
*
* @since Ant 1.6
*/
public void addPropertyset(PropertySet ps) {
propertySets.addElement(ps);
}

public void setFormat(FormatAttribute ea) {
format = ea.getValue();
@@ -234,10 +243,10 @@ public class EchoProperties extends Task {

/* load properties from file if specified, otherwise
use Ant's properties */
if(inFile == null) {
if (inFile == null && propertySets.size() == 0) {
// add ant properties
CollectionUtils.putAll(allProps, getProject().getProperties());
} else {
} else if (inFile != null) {
if (inFile.exists() && inFile.isDirectory()) {
String message = "srcfile is a directory!";
if (failonerror) {
@@ -291,6 +300,12 @@ public class EchoProperties extends Task {
}
}

Enumeration enum = propertySets.elements();
while (enum.hasMoreElements()) {
PropertySet ps = (PropertySet) enum.nextElement();
CollectionUtils.putAll(allProps, ps.getProperties());
}
OutputStream os = null;
try {
if (destfile == null) {
@@ -355,9 +370,7 @@ public class EchoProperties extends Task {
while (enum.hasMoreElements()) {
String name = enum.nextElement().toString();
String value = allProps.get(name).toString();
if (prefix == null || name.indexOf(prefix) == 0) {
props.put(name, value);
}
props.put(name, value);
}

if ("text".equals(format)) {


+ 9
- 1
src/testcases/org/apache/tools/ant/taskdefs/optional/EchoPropertiesTest.java View File

@@ -1,7 +1,7 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000-2002 The Apache Software Foundation. All rights
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -188,6 +188,14 @@ public class EchoPropertiesTest extends BuildFileTest {
props.getProperty("b.set"));
}

public void testEchoPrefixAsPropertyset() throws Exception {
executeTarget( "testEchoPrefixAsPropertyset" );
Properties props=loadPropFile(PREFIX_OUTFILE);
assertEquals("prefix didn't include 'a.set' property","true",props.getProperty("a.set"));
assertNull("prefix failed to filter out property 'b.set'",
props.getProperty("b.set"));
}

protected Properties loadPropFile(String relativeFilename)
throws IOException {
File f = createRelativeFile( relativeFilename );


Loading…
Cancel
Save