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 2010/05/17 10:39:42 UTC

svn commit: r945023 - in /ant/core/trunk: WHATSNEW src/main/org/apache/tools/ant/taskdefs/Checksum.java src/tests/antunit/taskdefs/checksum-test.xml

Author: bodewig
Date: Mon May 17 08:39:42 2010
New Revision: 945023

URL: http://svn.apache.org/viewvc?rev=945023&view=rev
Log:
<checksum>'s totalproperty doesn't work with repeated file names.  PR 36748

Modified:
    ant/core/trunk/WHATSNEW
    ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Checksum.java
    ant/core/trunk/src/tests/antunit/taskdefs/checksum-test.xml

Modified: ant/core/trunk/WHATSNEW
URL: http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?rev=945023&r1=945022&r2=945023&view=diff
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Mon May 17 08:39:42 2010
@@ -26,6 +26,10 @@ Fixed bugs:
  * <xslt> ignored the classpath when using the default TraX processor.
    Bugzilla Report 49271.
 
+ * <checksum>'s totalproperty only worked reliably if the same file
+   name didn't occur inside more than one directory.
+   Bugzilla Report 36748.
+
 Other changes:
 --------------
 

Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Checksum.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Checksum.java?rev=945023&r1=945022&r2=945023&view=diff
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Checksum.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Checksum.java Mon May 17 08:39:42 2010
@@ -457,15 +457,7 @@ public class Checksum extends MatchingTa
         File directory;
         if (todir != null) {
             // A separate directory was explicitly declared
-            String path = (String) relativeFilePaths.get(file);
-            if (path == null) {
-                //bug 37386. this should not occur, but it has, once.
-                throw new BuildException(
-                    "Internal error: "
-                    + "relativeFilePaths could not match file"
-                    + file + "\n"
-                    + "please file a bug report on this");
-            }
+            String path = getRelativeFilePath(file);
             directory = new File(todir, path).getParentFile();
             // Create the directory, as it might not exist.
             directory.mkdirs();
@@ -559,8 +551,8 @@ public class Checksum extends MatchingTa
                             File f2 = (File) o2;
                             return f1 == null ? (f2 == null ? 0 : -1)
                                 : (f2 == null ? 1
-                                   : f1.getName().compareTo(f2.getName())
-                                   );
+                                   : getRelativeFilePath(f1)
+                                   .compareTo(getRelativeFilePath(f2)));
                         }
                     });
                 // Loop over the checksums and generate a total hash.
@@ -573,7 +565,7 @@ public class Checksum extends MatchingTa
                     messageDigest.update(digest);
 
                     // Add the file path
-                    String fileName = (String) relativeFilePaths.get(src);
+                    String fileName = getRelativeFilePath(src);
                     messageDigest.update(fileName.getBytes());
                 }
                 String totalChecksum = createDigestString(messageDigest.digest());
@@ -655,6 +647,21 @@ public class Checksum extends MatchingTa
     }
 
     /**
+     * @since Ant 1.8.2
+     */
+    private String getRelativeFilePath(File f) {
+        String path = (String) relativeFilePaths.get(f);
+        if (path == null) {
+            //bug 37386. this should not occur, but it has, once.
+            throw new BuildException("Internal error: "
+                                     + "relativeFilePaths could not match file "
+                                     + f + "\n"
+                                     + "please file a bug report on this");
+        }
+        return path;
+    }
+
+    /**
      * Helper class for the format attribute.
      *
      * @since 1.7

Modified: ant/core/trunk/src/tests/antunit/taskdefs/checksum-test.xml
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/taskdefs/checksum-test.xml?rev=945023&r1=945022&r2=945023&view=diff
==============================================================================
--- ant/core/trunk/src/tests/antunit/taskdefs/checksum-test.xml (original)
+++ ant/core/trunk/src/tests/antunit/taskdefs/checksum-test.xml Mon May 17 08:39:42 2010
@@ -36,12 +36,13 @@
           https://issues.apache.org/bugzilla/show_bug.cgi?id=36748">
     <mkdir dir="${input}"/>
     <echo file="${input}/a.txt">abc</echo>
+    <echo file="${input}/subdir/A.txt">def</echo>
     <echo file="${input}/B.txt">xyz</echo>
     <checksum totalproperty="total">
       <fileset dir="${input}"/>
     </checksum>
     <au:assertPropertyEquals name="total"
-                             value="709a9cf15c8834c59c7eeb07522cdf56"/>
+                             value="f4d688789d32e6ca6bc93c504dbc6b46"/>
   </target>
 
 </project>