Signed-off-by: Akihiro Suda <suda.akihiro@lab.ntt.co.jp>
| ... | ... |
@@ -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 |