summaryrefslogtreecommitdiff
path: root/internal/datafs/stdinfs.go
diff options
context:
space:
mode:
authorDave Henderson <dhenderson@gmail.com>2024-12-16 16:11:27 -0500
committerGitHub <noreply@github.com>2024-12-16 21:11:27 +0000
commitcd74bb8eae53597d8272bcdffdaa34e1b839a700 (patch)
tree8bc9529c053e1561ec8b611f6b9827a3153693ff /internal/datafs/stdinfs.go
parenta69bb645210bd335e2ce3cece1b54af3a286db7a (diff)
fix(fs): Cache data in stdinfs (#2288)
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
Diffstat (limited to 'internal/datafs/stdinfs.go')
-rw-r--r--internal/datafs/stdinfs.go38
1 files changed, 34 insertions, 4 deletions
diff --git a/internal/datafs/stdinfs.go b/internal/datafs/stdinfs.go
index 46cb030a..f6a02c51 100644
--- a/internal/datafs/stdinfs.go
+++ b/internal/datafs/stdinfs.go
@@ -18,7 +18,8 @@ func NewStdinFS(_ *url.URL) (fs.FS, error) {
}
type stdinFS struct {
- ctx context.Context
+ ctx context.Context
+ data []byte
}
//nolint:gochecknoglobals
@@ -46,9 +47,15 @@ func (f *stdinFS) Open(name string) (fs.File, error) {
}
}
- stdin := StdinFromContext(f.ctx)
+ if err := f.readData(); err != nil {
+ return nil, &fs.PathError{
+ Op: "open",
+ Path: name,
+ Err: err,
+ }
+ }
- return &stdinFile{name: name, body: stdin}, nil
+ return &stdinFile{name: name, body: bytes.NewReader(f.data)}, nil
}
func (f *stdinFS) ReadFile(name string) ([]byte, error) {
@@ -60,9 +67,32 @@ func (f *stdinFS) ReadFile(name string) ([]byte, error) {
}
}
+ if err := f.readData(); err != nil {
+ return nil, &fs.PathError{
+ Op: "readFile",
+ Path: name,
+ Err: err,
+ }
+ }
+
+ return f.data, nil
+}
+
+func (f *stdinFS) readData() error {
+ if f.data != nil {
+ return nil
+ }
+
stdin := StdinFromContext(f.ctx)
- return io.ReadAll(stdin)
+ b, err := io.ReadAll(stdin)
+ if err != nil {
+ return err
+ }
+
+ f.data = b
+
+ return nil
}
type stdinFile struct {