diff --git a/server/filesystem.go b/server/filesystem.go index ba91cae..28e06ba 100644 --- a/server/filesystem.go +++ b/server/filesystem.go @@ -155,7 +155,7 @@ func (fs *Filesystem) DirectorySize(dir string) (int64, error) { ctx := context.Background() var size int64 - err := w.Walk(dir, ctx, func(f os.FileInfo) bool { + err := w.Walk(dir, ctx, func(f os.FileInfo, _ string) bool { // Only increment the size when we're dealing with a file specifically, otherwise // just continue digging deeper until there are no more directories to iterate over. if !f.IsDir() { diff --git a/server/filesystem_walker.go b/server/filesystem_walker.go index ca594b4..bc73886 100644 --- a/server/filesystem_walker.go +++ b/server/filesystem_walker.go @@ -20,7 +20,7 @@ func (fs *Filesystem) NewWalker() *FileWalker { // Iterate over all of the files and directories within a given directory. When a file is // found the callback will be called with the file information. If a directory is encountered // it will be recursively passed back through to this function. -func (fw *FileWalker) Walk(dir string, ctx context.Context, callback func (os.FileInfo) bool) error { +func (fw *FileWalker) Walk(dir string, ctx context.Context, callback func (os.FileInfo, string) bool) error { cleaned, err := fw.SafePath(dir) if err != nil { return err @@ -38,7 +38,7 @@ func (fw *FileWalker) Walk(dir string, ctx context.Context, callback func (os.Fi for _, f := range files { if f.IsDir() { - p := filepath.Join(dir, f.Name()) + p := filepath.Join(cleaned, f.Name()) // Recursively call this function to continue digging through the directory tree within // a seperate goroutine. If the context is canceled abort this process. g.Go(func() error { @@ -49,7 +49,7 @@ func (fw *FileWalker) Walk(dir string, ctx context.Context, callback func (os.Fi // If the callback returns true, go ahead and keep walking deeper. This allows // us to programatically continue deeper into directories, or stop digging // if that pathway knows it needs nothing else. - if callback(f) { + if callback(f, p) { return fw.Walk(p, ctx, callback) } @@ -60,7 +60,7 @@ func (fw *FileWalker) Walk(dir string, ctx context.Context, callback func (os.Fi // If this isn't a directory, go ahead and pass the file information into the // callback. We don't care about the response since we won't be stepping into // anything from here. - callback(f) + callback(f, filepath.Join(cleaned, f.Name())) } }