Index: src/etc/testcases/taskdefs/copy.xml
===================================================================
RCS file: /home/cvspublic/jakarta-ant/src/etc/testcases/taskdefs/copy.xml,v
retrieving revision 1.8
diff -u -r1.8 copy.xml
--- src/etc/testcases/taskdefs/copy.xml 6 Mar 2002 03:25:50 -0000 1.8
+++ src/etc/testcases/taskdefs/copy.xml 26 Sep 2002 21:17:34 -0000
@@ -61,6 +61,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -71,6 +105,8 @@
+
+
Index: src/main/org/apache/tools/ant/filters/LineContains.java
===================================================================
RCS file: /home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/filters/LineContains.java,v
retrieving revision 1.7
diff -u -r1.7 LineContains.java
--- src/main/org/apache/tools/ant/filters/LineContains.java 25 Jul 2002 15:21:02 -0000 1.7
+++ src/main/org/apache/tools/ant/filters/LineContains.java 26 Sep 2002 21:17:37 -0000
@@ -86,6 +86,7 @@
implements ChainableReader {
/** Parameter name for the words to filter on. */
private static final String CONTAINS_KEY = "contains";
+ private static final String CONTAINS_ALL_KEY = "containsAll";
/** Vector that holds the strings that input lines must contain. */
private Vector contains = new Vector();
@@ -97,6 +98,28 @@
*/
private String line = null;
+ private boolean containsAll = true;
+
+
+ /**
+ * Sets whether all the values must be contained in the line
+ *
+ * @param whether all the values must be contained in the line
+ */
+ public final void setContainsAll(boolean containsAll) {
+ this.containsAll = containsAll;
+ }
+
+ /**
+ * Returns whether all values must be contained in the line
+ *
+ * @return whether all the values must be contained in the line
+ */
+ private final boolean getContainsAll() {
+ return containsAll;
+ }
+
+
/**
* Constructor for "dummy" instances.
*
@@ -104,6 +127,7 @@
*/
public LineContains() {
super();
+
}
/**
@@ -142,22 +166,34 @@
line = line.substring(1);
}
} else {
- String goodLine = null;
line = readLine();
- while((line != null) && (goodLine == null)) {
- goodLine = line;
- int containsSize = contains.size();
- for (int i = 0; i < containsSize; i++) {
- String containsStr = (String) contains.elementAt(i);
+ if(line!=null){
+ int containsSize = contains.size();
+ boolean foundAtLeastOne =false;
+ for (int i = 0; i < containsSize; i++) {
+ String containsStr = (String) contains.elementAt(i);
+ if(containsAll){
+ // if we have to contain all
if (line.indexOf(containsStr) == -1) {
- goodLine = null;
+ line=null;
break;
}
- }
- return read();
- };
- }
+ }
+ else {
+ // if we don't have to contain all, break as soon as we find one
+ if (line.indexOf(containsStr) > -1){
+ foundAtLeastOne = true;
+ break;
+ }
+ }
+ }
+ if(!containsAll && !foundAtLeastOne){
+ line=null;
+ }
+ return read();
+ }
+ }
return ch;
}
@@ -208,6 +244,7 @@
public final Reader chain(final Reader rdr) {
LineContains newFilter = new LineContains(rdr);
newFilter.setContains(getContains());
+ newFilter.setContainsAll(getContainsAll());
newFilter.setInitialized(true);
return newFilter;
}
@@ -221,6 +258,9 @@
for (int i = 0; i < params.length; i++) {
if (CONTAINS_KEY.equals(params[i].getType())) {
contains.addElement(params[i].getValue());
+ }
+ if (CONTAINS_ALL_KEY.equals(params[i].getType())) {
+ containsAll=new Boolean(params[i].getValue()).booleanValue();
}
}
}
Index: src/testcases/org/apache/tools/ant/taskdefs/CopyTest.java
===================================================================
RCS file: /home/cvspublic/jakarta-ant/src/testcases/org/apache/tools/ant/taskdefs/CopyTest.java,v
retrieving revision 1.9
diff -u -r1.9 CopyTest.java
--- src/testcases/org/apache/tools/ant/taskdefs/CopyTest.java 23 Apr 2002 10:30:12 -0000 1.9
+++ src/testcases/org/apache/tools/ant/taskdefs/CopyTest.java 26 Sep 2002 21:17:48 -0000
@@ -144,6 +144,33 @@
assertTrue(fileUtils.contentEquals(tmp, check));
}
+ public void testFilterChainContains() throws IOException {
+ executeTarget("testFilterChainLineContains");
+ FileUtils fileUtils = FileUtils.newFileUtils();
+ File tmp = new File(getProjectDir(), "copy.filterchain.linecontains.tmp");
+ File check = new File(getProjectDir(), "expected/copy.filterchain.linecontains.filtered");
+ assertTrue(tmp.exists());
+ assertTrue(fileUtils.contentEquals(tmp, check));
+ }
+
+ public void testFilterChainContainsMultiple() throws IOException {
+ executeTarget("testFilterChainLineContainsMultiple");
+ FileUtils fileUtils = FileUtils.newFileUtils();
+ File tmp = new File(getProjectDir(), "copy.filterchain.linecontains.multiple.tmp");
+ File check = new File(getProjectDir(), "expected/copy.filterchain.linecontains.multiple.filtered");
+ assertTrue(tmp.exists());
+ assertTrue(fileUtils.contentEquals(tmp, check));
+ }
+
+ public void testFilterChainContainsAny() throws IOException {
+ executeTarget("testFilterChainLineContainsAny");
+ FileUtils fileUtils = FileUtils.newFileUtils();
+ File tmp = new File(getProjectDir(), "copy.filterchain.linecontains.any.tmp");
+ File check = new File(getProjectDir(), "expected/copy.filterchain.linecontains.any.filtered");
+ assertTrue(tmp.exists());
+ assertTrue(fileUtils.contentEquals(tmp, check));
+ }
+
public void testSingleFileFileset() {
executeTarget("test_single_file_fileset");
File file = new File(getProjectDir(),