PR: 23154 git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275861 13f79535-47bb-0310-9956-ffa450edef68master
@@ -10,6 +10,24 @@ | |||||
<copy file="copy.xml" todir="copytest1dir" overwrite="true"/> | <copy file="copy.xml" todir="copytest1dir" overwrite="true"/> | ||||
</target> | </target> | ||||
<target name="filtertest"> | |||||
<!-- check fix for bugzilla 23154 --> | |||||
<delete quiet="yes" file="copy.filter.out"/> | |||||
<delete quiet="yes" file="copy.filter.inp"/> | |||||
<concat destfile="copy.filter.inp"> | |||||
PRODUCT_VERSION=6.2.1.4 | |||||
PRODUCT_BUILD=6.5 (BLD_65036) | |||||
PRODUCT_VERSION=6.2.1.4 | |||||
PRODUCT_BUILD=6.5 (BLD_65036) | |||||
</concat> | |||||
<copy file="copy.filter.inp" tofile="copy.filter.out"> | |||||
<filterset begintoken="6" endtoken="4"> | |||||
<filter token=".2.1." value="2.6.4" /> | |||||
</filterset> | |||||
</copy> | |||||
<concat><path path="copy.filter.out"/></concat> | |||||
</target> | |||||
<target name="test3"> | <target name="test3"> | ||||
<!-- create an empty file --> | <!-- create an empty file --> | ||||
<touch file="copytest3.tmp"/> | <touch file="copytest3.tmp"/> | ||||
@@ -89,6 +107,8 @@ | |||||
</copy> | </copy> | ||||
</target> | </target> | ||||
<target name="cleanup"> | <target name="cleanup"> | ||||
<delete file="copytest1.tmp"/> | <delete file="copytest1.tmp"/> | ||||
<delete file="copytest3.tmp"/> | <delete file="copytest3.tmp"/> | ||||
@@ -99,6 +119,8 @@ | |||||
<delete file="copy.filterset.tmp"/> | <delete file="copy.filterset.tmp"/> | ||||
<delete file="copy.filterchain.tmp"/> | <delete file="copy.filterchain.tmp"/> | ||||
<delete dir="copytest1dir"/> | <delete dir="copytest1dir"/> | ||||
<delete quiet="yes" file="copy.filter.out"/> | |||||
<delete quiet="yes" file="copy.filter.inp"/> | |||||
</target> | </target> | ||||
@@ -1,7 +1,7 @@ | |||||
/* | /* | ||||
* The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
* | * | ||||
* Copyright (c) 2001-2003 The Apache Software Foundation. All rights | |||||
* Copyright (c) 2001-2004 The Apache Software Foundation. All rights | |||||
* reserved. | * reserved. | ||||
* | * | ||||
* Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
@@ -357,6 +357,8 @@ public class FilterSet extends DataType implements Cloneable { | |||||
* @return The string with the tokens replaced. | * @return The string with the tokens replaced. | ||||
*/ | */ | ||||
public String replaceTokens(String line) { | public String replaceTokens(String line) { | ||||
passedTokens = null; // reset for new line | |||||
String beginToken = getBeginToken(); | String beginToken = getBeginToken(); | ||||
String endToken = getEndToken(); | String endToken = getEndToken(); | ||||
int index = line.indexOf(beginToken); | int index = line.indexOf(beginToken); | ||||
@@ -415,7 +417,7 @@ public class FilterSet extends DataType implements Cloneable { | |||||
* This parses tokens which point to tokens. | * This parses tokens which point to tokens. | ||||
* It also maintains a list of currently used tokens, so we cannot | * It also maintains a list of currently used tokens, so we cannot | ||||
* get into an infinite loop | * get into an infinite loop | ||||
* @param value the value / token to parse | |||||
* @param line the value / token to parse | |||||
* @param parent the parant token (= the token it was parsed from) | * @param parent the parant token (= the token it was parsed from) | ||||
*/ | */ | ||||
private String replaceTokens(String line, String parent) | private String replaceTokens(String line, String parent) | ||||
@@ -426,7 +428,7 @@ public class FilterSet extends DataType implements Cloneable { | |||||
if (passedTokens.contains(parent) && !duplicateToken) { | if (passedTokens.contains(parent) && !duplicateToken) { | ||||
duplicateToken = true; | duplicateToken = true; | ||||
StringBuffer sb = new StringBuffer(); | StringBuffer sb = new StringBuffer(); | ||||
sb.append("Inifinite loop in tokens. Currently known tokens : "); | |||||
sb.append("Infinite loop in tokens. Currently known tokens : "); | |||||
sb.append(passedTokens); | sb.append(passedTokens); | ||||
sb.append("\nProblem token : " + getBeginToken() + parent | sb.append("\nProblem token : " + getBeginToken() + parent | ||||
+ getEndToken()); | + getEndToken()); | ||||
@@ -1,7 +1,7 @@ | |||||
/* | /* | ||||
* The Apache Software License, Version 1.1 | * The Apache Software License, Version 1.1 | ||||
* | * | ||||
* Copyright (c) 2000-2003 The Apache Software Foundation. All rights | |||||
* Copyright (c) 2000-2004 The Apache Software Foundation. All rights | |||||
* reserved. | * reserved. | ||||
* | * | ||||
* Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
@@ -126,6 +126,11 @@ public class CopyTest extends BuildFileTest { | |||||
} | } | ||||
public void testFilterTest() { | |||||
executeTarget("filtertest"); | |||||
assertTrue(getOutput().indexOf("loop in tokens") == -1); | |||||
} | |||||
public void testFilterSet() throws IOException { | public void testFilterSet() throws IOException { | ||||
executeTarget("testFilterSet"); | executeTarget("testFilterSet"); | ||||
FileUtils fileUtils = FileUtils.newFileUtils(); | FileUtils fileUtils = FileUtils.newFileUtils(); | ||||