directory_windows.go 834 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package directory // import "github.com/docker/docker/pkg/directory"
  2. import (
  3. "context"
  4. "os"
  5. "path/filepath"
  6. )
  7. // calcSize walks a directory tree and returns its total calcSize in bytes.
  8. func calcSize(ctx context.Context, dir string) (int64, error) {
  9. var size int64
  10. err := filepath.Walk(dir, func(d string, fileInfo os.FileInfo, err error) error {
  11. if err != nil {
  12. // if dir/x disappeared while walking, Size() ignores dir/x.
  13. // if dir does not exist, Size() returns the error.
  14. if d != dir && os.IsNotExist(err) {
  15. return nil
  16. }
  17. return err
  18. }
  19. select {
  20. case <-ctx.Done():
  21. return ctx.Err()
  22. default:
  23. }
  24. // Ignore directory sizes
  25. if fileInfo == nil {
  26. return nil
  27. }
  28. s := fileInfo.Size()
  29. if fileInfo.IsDir() || s == 0 {
  30. return nil
  31. }
  32. size += s
  33. return nil
  34. })
  35. return size, err
  36. }