git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@788677 13f79535-47bb-0310-9956-ffa450edef68master
@@ -737,6 +737,10 @@ Other changes: | |||||
* <input ...><handler type="secure" /></input> now uses previously undocumented | * <input ...><handler type="secure" /></input> now uses previously undocumented | ||||
SecureInputHandler shipped with Ant 1.7.1. | SecureInputHandler shipped with Ant 1.7.1. | ||||
* Command line arguments for <exec> and similar tasks can now have | |||||
optional prefix and suffix attributes. | |||||
Bugzilla Report 47365 | |||||
Changes from Ant 1.7.0 TO Ant 1.7.1 | Changes from Ant 1.7.0 TO Ant 1.7.1 | ||||
============================================= | ============================================= | ||||
@@ -484,6 +484,17 @@ used.</p> | |||||
<tr> | <tr> | ||||
<td valign="top">path</td> | <td valign="top">path</td> | ||||
</tr> | </tr> | ||||
<tr> | |||||
<td valign="top">prefix</td> | |||||
<td align="center" rowspan="2">See | |||||
<a href="../using.html#arg">Command-line Arguments</a>. | |||||
<em>Since Ant 1.8.</em></td> | |||||
<td valign="top" align="center">No</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">suffix</td> | |||||
<td valign="top" align="center">No</td> | |||||
</tr> | |||||
<tr> | <tr> | ||||
<td valign="top">compiler</td> | <td valign="top">compiler</td> | ||||
<td>Only pass the specified argument if the chosen | <td>Only pass the specified argument if the chosen | ||||
@@ -244,6 +244,17 @@ used.</p> | |||||
<tr> | <tr> | ||||
<td valign="top">path</td> | <td valign="top">path</td> | ||||
</tr> | </tr> | ||||
<tr> | |||||
<td valign="top">prefix</td> | |||||
<td align="center" rowspan="2">See | |||||
<a href="../using.html#arg">Command-line Arguments</a>. | |||||
<em>Since Ant 1.8.</em></td> | |||||
<td valign="top" align="center">No</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">suffix</td> | |||||
<td valign="top" align="center">No</td> | |||||
</tr> | |||||
<tr> | <tr> | ||||
<td valign="top">compiler</td> | <td valign="top">compiler</td> | ||||
<td>Only pass the specified argument if the chosen | <td>Only pass the specified argument if the chosen | ||||
@@ -143,6 +143,17 @@ only if a given compiler implementation will be used.</p> | |||||
<tr> | <tr> | ||||
<td valign="top">path</td> | <td valign="top">path</td> | ||||
</tr> | </tr> | ||||
<tr> | |||||
<td valign="top">prefix</td> | |||||
<td align="center" rowspan="2">See | |||||
<a href="../using.html#arg">Command-line Arguments</a>. | |||||
<em>Since Ant 1.8.</em></td> | |||||
<td valign="top" align="center">No</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">suffix</td> | |||||
<td valign="top" align="center">No</td> | |||||
</tr> | |||||
<tr> | <tr> | ||||
<td valign="top">implementation</td> | <td valign="top">implementation</td> | ||||
<td>Only pass the specified argument if the chosen compiler | <td>Only pass the specified argument if the chosen compiler | ||||
@@ -580,6 +580,20 @@ that contain space characters, nested <code>arg</code> elements can be used.</p> | |||||
<td valign="top">line</td> | <td valign="top">line</td> | ||||
<td valign="top">a space-delimited list of command-line arguments.</td> | <td valign="top">a space-delimited list of command-line arguments.</td> | ||||
</tr> | </tr> | ||||
<tr> | |||||
<td valign="top">prefix</td> | |||||
<td valign="top">A fixed string to be placed in front of the | |||||
argument. In the case of a line broken into parts, it will be | |||||
placed in front of every part. <em>Since Ant 1.8.</em></td> | |||||
<td valign="top" align="center">No</td> | |||||
</tr> | |||||
<tr> | |||||
<td valign="top">suffix</td> | |||||
<td valign="top">A fixed string to be placed immediately after the | |||||
argument. In the case of a line broken into parts, it will be | |||||
placed after every part. <em>Since Ant 1.8.</em></td> | |||||
<td valign="top" align="center">No</td> | |||||
</tr> | |||||
</table> | </table> | ||||
<p>It is highly recommended to avoid the <code>line</code> version | <p>It is highly recommended to avoid the <code>line</code> version | ||||
@@ -103,6 +103,9 @@ public class Commandline implements Cloneable { | |||||
private String[] parts; | private String[] parts; | ||||
private String prefix = ""; | |||||
private String suffix = ""; | |||||
/** | /** | ||||
* Set a single commandline argument. | * Set a single commandline argument. | ||||
* | * | ||||
@@ -158,12 +161,42 @@ public class Commandline implements Cloneable { | |||||
parts = new String[] {value.getAbsolutePath()}; | parts = new String[] {value.getAbsolutePath()}; | ||||
} | } | ||||
/** | |||||
* Set the prefix to be placed in front of every part of the | |||||
* argument. | |||||
* | |||||
* @param prefix fixed prefix string. | |||||
* @since Ant 1.8.0 | |||||
*/ | |||||
public void setPrefix(String prefix) { | |||||
this.prefix = prefix != null ? prefix : ""; | |||||
} | |||||
/** | |||||
* Set the suffix to be placed at the end of every part of the | |||||
* argument. | |||||
* | |||||
* @param suffix fixed suffix string. | |||||
* @since Ant 1.8.0 | |||||
*/ | |||||
public void setSuffix(String suffix) { | |||||
this.suffix = suffix != null ? suffix : ""; | |||||
} | |||||
/** | /** | ||||
* Return the constituent parts of this Argument. | * Return the constituent parts of this Argument. | ||||
* @return an array of strings. | * @return an array of strings. | ||||
*/ | */ | ||||
public String[] getParts() { | public String[] getParts() { | ||||
return parts; | |||||
if (parts == null || parts.length == 0 | |||||
|| (prefix.length() == 0 && suffix.length() == 0)) { | |||||
return parts; | |||||
} | |||||
String[] fullParts = new String[parts.length]; | |||||
for (int i = 0; i < fullParts.length; ++i) { | |||||
fullParts[i] = prefix + parts[i] + suffix; | |||||
} | |||||
return fullParts; | |||||
} | } | ||||
} | } | ||||
@@ -130,7 +130,7 @@ public class CommandlineTest extends TestCase { | |||||
assertEquals("1 \'2\"3\'", Commandline.toString(new String[] {"1", "2\"3"})); | assertEquals("1 \'2\"3\'", Commandline.toString(new String[] {"1", "2\"3"})); | ||||
} | } | ||||
public void testAwkCommand(){ | |||||
public void testAwkCommand() { | |||||
Commandline c = new Commandline(); | Commandline c = new Commandline(); | ||||
c.setExecutable("awk"); | c.setExecutable("awk"); | ||||
c.createArgument().setValue("'NR == 2 { print $NF }'"); | c.createArgument().setValue("'NR == 2 { print $NF }'"); | ||||
@@ -140,4 +140,24 @@ public class CommandlineTest extends TestCase { | |||||
assertEquals("awk", s[0]); | assertEquals("awk", s[0]); | ||||
assertEquals("'NR == 2 { print $NF }'", s[1]); | assertEquals("'NR == 2 { print $NF }'", s[1]); | ||||
} | } | ||||
public void testPrefix() { | |||||
Commandline c = new Commandline(); | |||||
Commandline.Argument a = c.createArgument(); | |||||
a.setValue("foo"); | |||||
a.setPrefix("-f="); | |||||
String[] s = c.getCommandline(); | |||||
assertEquals(1, s.length); | |||||
assertEquals("-f=foo", s[0]); | |||||
} | |||||
public void testSuffix() { | |||||
Commandline c = new Commandline(); | |||||
Commandline.Argument a = c.createArgument(); | |||||
a.setValue("foo"); | |||||
a.setSuffix(",1"); | |||||
String[] s = c.getCommandline(); | |||||
assertEquals(1, s.length); | |||||
assertEquals("foo,1", s[0]); | |||||
} | |||||
} | } |