Use filepath.Walk to compute serialfile total size
License: MIT Signed-off-by: rht <rhtbot@gmail.com>
rht committed
Aug 31, 2015 at 09:53 UTC
b45e82418b9bb4b02d0c612786ff307632a079e2
1 file changed
+9
-24
commands/files/serialfile.go
+9
-24
@@ -126,31 +126,16 @@ func (f *serialFile) Stat() os.FileInfo {
126
}
127
128
func (f *serialFile) Size() (int64, error) {
129
- return size(f.stat, f.FileName())
130
-}
131
-
132
-func size(stat os.FileInfo, filename string) (int64, error) {
133
- if !stat.IsDir() {
134
- return stat.Size(), nil
129
+ if !f.stat.IsDir() {
130
+ return f.stat.Size(), nil
131
}
132
137
- file, err := os.Open(filename)
138
- if err != nil {
139
- return 0, err
140
- }
141
- files, err := file.Readdir(0)
142
- if err != nil {
143
- return 0, err
144
- }
145
- file.Close()
146
-
147
- var output int64
148
- for _, child := range files {
149
- s, err := size(child, fp.Join(filename, child.Name()))
150
- if err != nil {
151
- return 0, err
133
+ var du int64
134
+ err := fp.Walk(f.FileName(), func(p string, fi os.FileInfo, err error) error {
135
+ if fi != nil && fi.Mode()&(os.ModeSymlink|os.ModeNamedPipe) == 0 {
136
+ du += fi.Size()
137
}
153
- output += s
154
- }
155
- return output, nil
138
+ return nil
139
+ })
140
+ return du, err
141
}