Fix CSV path joining and relative exclusions; add scan benchmark script

This commit is contained in:
Andy Dixon
2026-10-02 08:37:18 +01:00
parent 8559616b65
commit d7e1d3e620
5 changed files with 75 additions and 1 deletions
+2 -1
View File
@@ -8,6 +8,7 @@ import (
"encoding/json"
"fmt"
"io"
"path/filepath"
"strconv"
"time"
@@ -158,7 +159,7 @@ func CSV(w io.Writer, t *inventory.Tree, root inventory.NodeID, maxDepth int) er
return nil
}
for _, c := range t.SortedChildren(id, inventory.SizeAllocated) {
if err := rec(c, path+"/"+t.Node(c).Name, depth-1); err != nil {
if err := rec(c, filepath.Join(path, t.Node(c).Name), depth-1); err != nil {
return err
}
}
+11
View File
@@ -138,6 +138,17 @@ type inodeKey struct{ dev, ino uint64 }
// Start stats root, creates the tree and begins scanning in the background.
func Start(ctx context.Context, root string, opts Options) (*Scanner, error) {
opts.defaults()
// Path-style exclusions are matched against absolute paths.
excl := make([]string, len(opts.Excludes))
for i, p := range opts.Excludes {
excl[i] = p
if strings.ContainsAny(p, `/\`) {
if a, err := filepath.Abs(p); err == nil {
excl[i] = a
}
}
}
opts.Excludes = excl
abs, err := filepath.Abs(root)
if err != nil {
return nil, err
+6
View File
@@ -237,6 +237,12 @@ func TestExcludes(t *testing.T) {
if tr.Stats.Excluded != 2 || tr.Node(0).Files != 1 {
t.Fatalf("excluded=%d files=%d", tr.Stats.Excluded, tr.Node(0).Files)
}
// Relative path patterns resolve against the working directory.
t.Chdir(root)
tr = runScan(t, root, Options{Workers: 2, Excludes: []string{"./skip"}})
if tr.Stats.Excluded != 1 {
t.Fatalf("relative exclude: excluded=%d", tr.Stats.Excluded)
}
}
func TestUnicodeAndHostileNames(t *testing.T) {