Skip to content

Commit fbfa9de

Browse files
committed
Use iteration on map to baseline vfs from map
1 parent edde1e1 commit fbfa9de

File tree

2 files changed

+28
-29
lines changed

2 files changed

+28
-29
lines changed

internal/execute/testsys_test.go

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package execute_test
22

33
import (
4-
"errors"
54
"fmt"
65
"io"
76
"io/fs"
@@ -385,43 +384,22 @@ func (s *testSys) baselineFSwithDiff(baseline io.Writer) {
385384

386385
testFs := s.testFs()
387386
diffs := map[string]string{}
388-
err := s.fsFromFileMap().WalkDir("/", func(path string, d vfs.DirEntry, e error) error {
389-
if e != nil {
390-
return e
391-
}
392387

393-
fileInfo := d.Type()
394-
if fileInfo&fs.ModeSymlink != 0 {
388+
for path, file := range s.mapFs().Entries() {
389+
if file.Mode&fs.ModeSymlink != 0 {
395390
target, ok := s.mapFs().GetTargetOfSymlink(path)
396391
if !ok {
397392
panic("Failed to resolve symlink target: " + path)
398393
}
399394
newEntry := &diffEntry{symlinkTarget: target}
400395
snap[path] = newEntry
401396
s.addFsEntryDiff(diffs, newEntry, path)
402-
return nil
403-
}
404-
405-
if !fileInfo.IsRegular() {
406-
return nil
407-
}
408-
409-
newContents, ok := s.fsFromFileMap().ReadFile(path)
410-
if !ok {
411-
return nil
412-
}
413-
stat := s.fsFromFileMap().Stat(path)
414-
if stat == nil {
415-
panic("stat is nil: " + path)
397+
continue
398+
} else if file.Mode.IsRegular() {
399+
newEntry := &diffEntry{content: string(file.Data), mTime: file.ModTime, isWritten: testFs.writtenFiles.Has(path)}
400+
snap[path] = newEntry
401+
s.addFsEntryDiff(diffs, newEntry, path)
416402
}
417-
newEntry := &diffEntry{content: newContents, mTime: stat.ModTime(), isWritten: testFs.writtenFiles.Has(path)}
418-
snap[path] = newEntry
419-
s.addFsEntryDiff(diffs, newEntry, path)
420-
421-
return nil
422-
})
423-
if err != nil && !errors.Is(err, fs.ErrNotExist) {
424-
panic("walkdir error during diff: " + err.Error())
425403
}
426404
if s.serializedDiff != nil {
427405
for path := range s.serializedDiff.snap {

internal/vfs/vfstest/vfstest.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"errors"
55
"fmt"
66
"io/fs"
7+
"iter"
78
"maps"
89
"path"
910
"slices"
@@ -550,6 +551,26 @@ func (m *MapFS) GetTargetOfSymlink(path string) (string, bool) {
550551
return "", false
551552
}
552553

554+
func (m *MapFS) Entries() iter.Seq2[string, *fstest.MapFile] {
555+
return func(yield func(string, *fstest.MapFile) bool) {
556+
m.mu.RLock()
557+
defer m.mu.RUnlock()
558+
inputKeys := slices.Collect(maps.Keys(m.m))
559+
slices.SortFunc(inputKeys, comparePathsByParts)
560+
561+
for _, p := range inputKeys {
562+
file := m.m[p]
563+
path := file.Sys.(*sys).realpath
564+
if !tspath.PathIsAbsolute(path) {
565+
path = "/" + path
566+
}
567+
if !yield(path, file) {
568+
break
569+
}
570+
}
571+
}
572+
}
573+
553574
func must[T any](v T, err error) T {
554575
if err != nil {
555576
panic(err)

0 commit comments

Comments
 (0)