|
@@ -18,7 +18,6 @@ import (
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
"sync"
|
|
|
- "syscall"
|
|
|
|
|
|
log "github.com/Sirupsen/logrus"
|
|
|
"github.com/docker/docker/dockerversion"
|
|
@@ -453,36 +452,6 @@ func ReadSymlinkedDirectory(path string) (string, error) {
|
|
|
return realPath, nil
|
|
|
}
|
|
|
|
|
|
-// TreeSize walks a directory tree and returns its total size in bytes.
|
|
|
-func TreeSize(dir string) (size int64, err error) {
|
|
|
- data := make(map[uint64]struct{})
|
|
|
- err = filepath.Walk(dir, func(d string, fileInfo os.FileInfo, e error) error {
|
|
|
- // Ignore directory sizes
|
|
|
- if fileInfo == nil {
|
|
|
- return nil
|
|
|
- }
|
|
|
-
|
|
|
- s := fileInfo.Size()
|
|
|
- if fileInfo.IsDir() || s == 0 {
|
|
|
- return nil
|
|
|
- }
|
|
|
-
|
|
|
- // Check inode to handle hard links correctly
|
|
|
- inode := fileInfo.Sys().(*syscall.Stat_t).Ino
|
|
|
- // inode is not a uint64 on all platforms. Cast it to avoid issues.
|
|
|
- if _, exists := data[uint64(inode)]; exists {
|
|
|
- return nil
|
|
|
- }
|
|
|
- // inode is not a uint64 on all platforms. Cast it to avoid issues.
|
|
|
- data[uint64(inode)] = struct{}{}
|
|
|
-
|
|
|
- size += s
|
|
|
-
|
|
|
- return nil
|
|
|
- })
|
|
|
- return
|
|
|
-}
|
|
|
-
|
|
|
// ValidateContextDirectory checks if all the contents of the directory
|
|
|
// can be read and returns an error if some files can't be read
|
|
|
// symlinks which point to non-existing files don't trigger an error
|