experimental/storage.go (39 lines of code) (raw):

package experimental import ( "path/filepath" "time" ) type fileInfo struct { fullPath string size int64 etag string lastModified time.Time directory bool } type walkFunc func(path string, info fileInfo, err error) error type storageObject interface { Walk(path string, basePath string, fn walkFunc) error List(path string, fn walkFunc) error Read(path string, etag string) ([]byte, error) Delete(path string) error Move(path, newPath string) error Info() } var currentStorage storageObject func parallelWalk(rootPath string, fn func(string) error) error { pwg := parallelWalkRunner.group() err := currentStorage.List(rootPath, func(listPath string, info fileInfo, err error) error { if !info.directory { return nil } pwg.dispatch(func() error { walkPath := filepath.Join(rootPath, listPath) return fn(walkPath) }) return nil }) if err != nil { return err } return pwg.finish() }