You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2012/04/16 15:03:17 UTC

svn commit: r1326588 - in /commons/proper/io/trunk/src: changes/changes.xml main/java/org/apache/commons/io/FileUtils.java test/java/org/apache/commons/io/FileUtilsTestCase.java

Author: ggregory
Date: Mon Apr 16 13:03:17 2012
New Revision: 1326588

URL: http://svn.apache.org/viewvc?rev=1326588&view=rev
Log:
[IO-319] FileUtils.sizeOfDirectory follows symbolic links.

Modified:
    commons/proper/io/trunk/src/changes/changes.xml
    commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
    commons/proper/io/trunk/src/test/java/org/apache/commons/io/FileUtilsTestCase.java

Modified: commons/proper/io/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/changes/changes.xml?rev=1326588&r1=1326587&r2=1326588&view=diff
==============================================================================
--- commons/proper/io/trunk/src/changes/changes.xml (original)
+++ commons/proper/io/trunk/src/changes/changes.xml Mon Apr 16 13:03:17 2012
@@ -46,6 +46,12 @@ The <action> type attribute can be add,u
 
   <body>
     <!-- The release date is the date RC is cut -->
+    <release version="2.4" date="2012-TDB-TDB" description="">
+      <action issue="IO-319" dev="ggregory" type="add" due-to="ggregory">
+        FileUtils.sizeOfDirectory follows symbolic links.
+      </action>            
+    </release>
+    <!-- The release date is the date RC is cut -->
     <release version="2.3" date="2012-April-10" description="">
       <action issue="IO-322" dev="ggregory" type="add" due-to="ggregory">
         Add and use class Charsets.

Modified: commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java?rev=1326588&r1=1326587&r2=1326588&view=diff
==============================================================================
--- commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java (original)
+++ commons/proper/io/trunk/src/main/java/org/apache/commons/io/FileUtils.java Mon Apr 16 13:03:17 2012
@@ -2354,12 +2354,20 @@ public class FileUtils {
 
         long size = 0;
 
-        File[] files = directory.listFiles();
+        final File[] files = directory.listFiles();
         if (files == null) {  // null if security restricted
             return 0L;
         }
-        for (File file : files) {
-            size += sizeOf(file);
+        for (final File file : files) {
+            boolean isSymLink;
+            try {
+                isSymLink = isSymlink(file);
+            } catch (IOException ioe) {
+                isSymLink = true;
+            }
+            if (!isSymLink) {
+                size += sizeOf(file);
+            }
         }
 
         return size;

Modified: commons/proper/io/trunk/src/test/java/org/apache/commons/io/FileUtilsTestCase.java
URL: http://svn.apache.org/viewvc/commons/proper/io/trunk/src/test/java/org/apache/commons/io/FileUtilsTestCase.java?rev=1326588&r1=1326587&r2=1326588&view=diff
==============================================================================
--- commons/proper/io/trunk/src/test/java/org/apache/commons/io/FileUtilsTestCase.java (original)
+++ commons/proper/io/trunk/src/test/java/org/apache/commons/io/FileUtilsTestCase.java Mon Apr 16 13:03:17 2012
@@ -711,6 +711,19 @@ public class FileUtilsTestCase extends F
         file.delete();
         file.mkdir();
 
+        // Create a cyclic symlink
+        if(!FilenameUtils.isSystemWindows()) {
+            Runtime.getRuntime()
+                .exec("ln -s " + file + "/.. " + file + "/cycle");
+        } else {
+            try {
+                Runtime.getRuntime()
+                    .exec("mklink /D " + file + "/cycle" + file + "/.. ");
+            } catch(IOException ioe) { // So that tests run in FAT filesystems
+              //don't fail
+            }
+        }
+
         assertEquals(
             "Unexpected directory size",
             TEST_DIRECTORY_SIZE,