// RemoveAll removes a tree recursively. func RemoveAll(path string, vfs rwvfs.WalkableFileSystem) error { w := fs.WalkFS(path, vfs) remove := func(par *parallel.Run, path string) { par.Do(func() error { return vfs.Remove(path) }) } var dirs []string // remove dirs after removing all files filesPar := parallel.NewRun(20) for w.Step() { if err := w.Err(); err != nil { return err } if w.Stat().IsDir() { dirs = append(dirs, w.Path()) } else { remove(filesPar, w.Path()) } } if err := filesPar.Wait(); err != nil { return err } dirsPar := parallel.NewRun(20) sort.Sort(sort.Reverse(sort.StringSlice(dirs))) // reverse so we delete leaf dirs first for _, dir := range dirs { remove(dirsPar, dir) } return dirsPar.Wait() }
// ListRepoPaths implements RepoPaths. func (e *customRepoPaths) ListRepoPaths(vfs rwvfs.WalkableFileSystem, after string, max int) ([][]string, error) { entries, err := vfs.ReadDir(".") if err != nil { return nil, err } paths := make([][]string, len(entries)) for i, e := range entries { paths[i] = []string{e.Name()} } return paths, nil }