You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bo...@apache.org on 2002/08/09 10:39:47 UTC
cvs commit: jakarta-ant/src/testcases/org/apache/tools/ant/types CommandlineTest.java
bodewig 2002/08/09 01:39:47
Modified: . Tag: ANT_15_BRANCH WHATSNEW
docs/manual Tag: ANT_15_BRANCH using.html
src/main/org/apache/tools/ant/types Tag: ANT_15_BRANCH
Commandline.java
src/testcases/org/apache/tools/ant/types Tag: ANT_15_BRANCH
CommandlineTest.java
Log:
Make <arg line="''"/> closer to what a shell would do.
PR: 5906
Don't use <arg line="..." />!
Revision Changes Path
No revision
No revision
1.263.2.70 +4 -0 jakarta-ant/WHATSNEW
Index: WHATSNEW
===================================================================
RCS file: /home/cvs/jakarta-ant/WHATSNEW,v
retrieving revision 1.263.2.69
retrieving revision 1.263.2.70
diff -u -r1.263.2.69 -r1.263.2.70
--- WHATSNEW 9 Aug 2002 06:49:17 -0000 1.263.2.69
+++ WHATSNEW 9 Aug 2002 08:39:47 -0000 1.263.2.70
@@ -21,6 +21,10 @@
* <property>'s classpathref attribute was broken.
+* <arg line="''" /> would result in no command line argument, will now
+ be a single empty argument. Use <arg value="''"/> if you need the
+ quotes literally.
+
Other changes:
--------------
No revision
No revision
1.21.2.3 +10 -4 jakarta-ant/docs/manual/using.html
Index: using.html
===================================================================
RCS file: /home/cvs/jakarta-ant/docs/manual/using.html,v
retrieving revision 1.21.2.2
retrieving revision 1.21.2.3
diff -u -r1.21.2.2 -r1.21.2.3
--- using.html 4 Jul 2002 07:50:50 -0000 1.21.2.2
+++ using.html 9 Aug 2002 08:39:47 -0000 1.21.2.3
@@ -432,10 +432,6 @@
<td align="center" rowspan="4">Exactly one of these.</td>
</tr>
<tr>
- <td valign="top">line</td>
- <td valign="top">a space-delimited list of command-line arguments.</td>
- </tr>
- <tr>
<td valign="top">file</td>
<td valign="top">The name of a file as a single command-line
argument; will be replaced with the absolute filename of the file.</td>
@@ -448,7 +444,17 @@
path separators and Ant will convert it to the platform's local
conventions.</td>
</tr>
+ <tr>
+ <td valign="top">line</td>
+ <td valign="top">a space-delimited list of command-line arguments.</td>
+ </tr>
</table>
+
+<p>It is highly recommended to avoid the <code>line</code> version
+when possible. Ant will try to split the command line in a way
+similar to what a (Unix) shell would do, but may create something that
+is very different from what you expect under some circumstances.</p>
+
<h4>Examples</h4>
<blockquote><pre>
<arg value="-l -a"/>
No revision
No revision
1.21.2.2 +6 -2 jakarta-ant/src/main/org/apache/tools/ant/types/Commandline.java
Index: Commandline.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/types/Commandline.java,v
retrieving revision 1.21.2.1
retrieving revision 1.21.2.2
diff -u -r1.21.2.1 -r1.21.2.2
--- Commandline.java 3 May 2002 04:50:20 -0000 1.21.2.1
+++ Commandline.java 9 Aug 2002 08:39:47 -0000 1.21.2.2
@@ -356,12 +356,14 @@
StringTokenizer tok = new StringTokenizer(to_process, "\"\' ", true);
Vector v = new Vector();
StringBuffer current = new StringBuffer();
+ boolean lastTokenHasBeenQuoted = false;
while (tok.hasMoreTokens()) {
String nextTok = tok.nextToken();
switch (state) {
case inQuote:
if ("\'".equals(nextTok)) {
+ lastTokenHasBeenQuoted = true;
state = normal;
} else {
current.append(nextTok);
@@ -369,6 +371,7 @@
break;
case inDoubleQuote:
if ("\"".equals(nextTok)) {
+ lastTokenHasBeenQuoted = true;
state = normal;
} else {
current.append(nextTok);
@@ -380,18 +383,19 @@
} else if ("\"".equals(nextTok)) {
state = inDoubleQuote;
} else if (" ".equals(nextTok)) {
- if (current.length() != 0) {
+ if (lastTokenHasBeenQuoted || current.length() != 0) {
v.addElement(current.toString());
current.setLength(0);
}
} else {
current.append(nextTok);
}
+ lastTokenHasBeenQuoted = false;
break;
}
}
- if (current.length() != 0) {
+ if (lastTokenHasBeenQuoted || current.length() != 0) {
v.addElement(current.toString());
}
No revision
No revision
1.10.2.1 +26 -1 jakarta-ant/src/testcases/org/apache/tools/ant/types/CommandlineTest.java
Index: CommandlineTest.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/testcases/org/apache/tools/ant/types/CommandlineTest.java,v
retrieving revision 1.10
retrieving revision 1.10.2.1
diff -u -r1.10 -r1.10.2.1
--- CommandlineTest.java 10 Jan 2002 10:13:13 -0000 1.10
+++ CommandlineTest.java 9 Aug 2002 08:39:47 -0000 1.10.2.1
@@ -1,7 +1,7 @@
/*
* The Apache Software License, Version 1.1
*
- * Copyright (c) 2000-2001 The Apache Software Foundation. All rights
+ * Copyright (c) 2000-2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -118,6 +118,31 @@
assertEquals("case with quoted whitespace", 4, s.length);
assertEquals("backslash included", "2\\", s[1]);
+ // "" should become a single empty argument, same for ''
+ // PR 5906
+ s = Commandline.translateCommandline("\"\" a");
+ assertEquals("Doublequoted null arg prepend", 2, s.length);
+ assertEquals("Doublequoted null arg prepend", "", s[0]);
+ assertEquals("Doublequoted null arg prepend", "a", s[1]);
+ s = Commandline.translateCommandline("a \"\"");
+ assertEquals("Doublequoted null arg append", 2, s.length);
+ assertEquals("Doublequoted null arg append", "a", s[0]);
+ assertEquals("Doublequoted null arg append", "", s[1]);
+ s = Commandline.translateCommandline("\"\"");
+ assertEquals("Doublequoted null arg", 1, s.length);
+ assertEquals("Doublequoted null arg", "", s[0]);
+
+ s = Commandline.translateCommandline("\'\' a");
+ assertEquals("Singlequoted null arg prepend", 2, s.length);
+ assertEquals("Singlequoted null arg prepend", "", s[0]);
+ assertEquals("Singlequoted null arg prepend", "a", s[1]);
+ s = Commandline.translateCommandline("a \'\'");
+ assertEquals("Singlequoted null arg append", 2, s.length);
+ assertEquals("Singlequoted null arg append", "a", s[0]);
+ assertEquals("Singlequoted null arg append", "", s[1]);
+ s = Commandline.translateCommandline("\'\'");
+ assertEquals("Singlequoted null arg", 1, s.length);
+ assertEquals("Singlequoted null arg", "", s[0]);
// now to the expected failures
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>