You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2016/02/14 10:49:11 UTC

ant git commit: ensure defined order of filters in

Repository: ant
Updated Branches:
  refs/heads/master b25b8c4fa -> 4d0bbb440


ensure defined order of filters in <replace>

fix for https://bz.apache.org/bugzilla/show_bug.cgi?id=58997


Project: http://git-wip-us.apache.org/repos/asf/ant/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/4d0bbb44
Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/4d0bbb44
Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/4d0bbb44

Branch: refs/heads/master
Commit: 4d0bbb44049a6add8043859c67253545e74c0c3a
Parents: b25b8c4
Author: Stefan Bodewig <bo...@apache.org>
Authored: Sun Feb 14 10:48:24 2016 +0100
Committer: Stefan Bodewig <bo...@apache.org>
Committed: Sun Feb 14 10:48:24 2016 +0100

----------------------------------------------------------------------
 WHATSNEW                                        |  5 +++++
 .../org/apache/tools/ant/taskdefs/Replace.java  | 23 +++++++++++++++++++-
 2 files changed, 27 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant/blob/4d0bbb44/WHATSNEW
----------------------------------------------------------------------
diff --git a/WHATSNEW b/WHATSNEW
index 116ace1..3256f14 100644
--- a/WHATSNEW
+++ b/WHATSNEW
@@ -45,6 +45,11 @@ Fixed bugs:
    using different names.
    Bugzilla Report 57965
 
+ * <replace>'s result was undefined when using the replacefilterfile
+   attribute and some keys inside the properties files have been
+   substrings of other keys. Keys are now sorted by descending size.
+   Bugzilla Report 58997
+
 Other changes:
 --------------
 

http://git-wip-us.apache.org/repos/asf/ant/blob/4d0bbb44/src/main/org/apache/tools/ant/taskdefs/Replace.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/Replace.java b/src/main/org/apache/tools/ant/taskdefs/Replace.java
index 9aa9fe8..31f24c7 100644
--- a/src/main/org/apache/tools/ant/taskdefs/Replace.java
+++ b/src/main/org/apache/tools/ant/taskdefs/Replace.java
@@ -31,8 +31,11 @@ import java.io.OutputStreamWriter;
 import java.io.Reader;
 import java.io.Writer;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.Iterator;
 import java.util.Properties;
+import java.util.Set;
+import java.util.TreeSet;
 
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.DirectoryScanner;
@@ -508,7 +511,7 @@ public class Replace extends MatchingTask {
         try {
             if (replaceFilterResource != null) {
                 Properties props = getProperties(replaceFilterResource);
-                Iterator e = props.keySet().iterator();
+                Iterator e = getOrderedIterator(props);
                 while (e.hasNext()) {
                     String tok =  e.next().toString();
                     Replacefilter replaceFilter = createReplacefilter();
@@ -952,4 +955,22 @@ public class Replace extends MatchingTask {
         }
     }
 
+    /**
+     * Sort keys by size so that tokens that are substrings of other
+     * strings are tried later.
+     */
+    private Iterator<Object> getOrderedIterator(Properties props) {
+        Set<Object> keys = new TreeSet(new Comparator<Object>() {
+                @Override
+                public int compare(Object key1, Object key2) {
+                    return compare(key1.toString(), key2.toString());
+                }
+
+                private int compare(String key1, String key2) {
+                    return key2.length() - key1.length();
+                }
+            });
+        keys.addAll(props.keySet());
+        return keys.iterator();
+    }
 }