Browse code

Fix filepath.Walk misusage in pkg/directory

Signed-off-by: Akihiro Suda <suda.akihiro@lab.ntt.co.jp>

Akihiro Suda authored on 2016/05/27 11:47:32
Showing 3 changed files
... ...
@@ -183,3 +183,10 @@ func TestMoveToSubdir(t *testing.T) {
183 183
 		t.Fatalf("Results after migration do not equal list of files: expected: %v, got: %v", filesList, results)
184 184
 	}
185 185
 }
186
+
187
+// Test a non-existing directory
188
+func TestSizeNonExistingDirectory(t *testing.T) {
189
+	if _, err := Size("/thisdirectoryshouldnotexist/TestSizeNonExistingDirectory"); err == nil {
190
+		t.Fatalf("error is expected")
191
+	}
192
+}
... ...
@@ -11,7 +11,16 @@ import (
11 11
 // Size walks a directory tree and returns its total size in bytes.
12 12
 func Size(dir string) (size int64, err error) {
13 13
 	data := make(map[uint64]struct{})
14
-	err = filepath.Walk(dir, func(d string, fileInfo os.FileInfo, e error) error {
14
+	err = filepath.Walk(dir, func(d string, fileInfo os.FileInfo, err error) error {
15
+		if err != nil {
16
+			// if dir does not exist, Size() returns the error.
17
+			// if dir/x disappeared while walking, Size() ignores dir/x.
18
+			if os.IsNotExist(err) && d != dir {
19
+				return nil
20
+			}
21
+			return err
22
+		}
23
+
15 24
 		// Ignore directory sizes
16 25
 		if fileInfo == nil {
17 26
 			return nil
... ...
@@ -9,7 +9,16 @@ import (
9 9
 
10 10
 // Size walks a directory tree and returns its total size in bytes.
11 11
 func Size(dir string) (size int64, err error) {
12
-	err = filepath.Walk(dir, func(d string, fileInfo os.FileInfo, e error) error {
12
+	err = filepath.Walk(dir, func(d string, fileInfo os.FileInfo, err error) error {
13
+		if err != nil {
14
+			// if dir does not exist, Size() returns the error.
15
+			// if dir/x disappeared while walking, Size() ignores dir/x.
16
+			if os.IsNotExist(err) && d != dir {
17
+				return nil
18
+			}
19
+			return err
20
+		}
21
+
13 22
 		// Ignore directory sizes
14 23
 		if fileInfo == nil {
15 24
 			return nil