From 67860bd2489d579afed6b74846d1f434c2262327 Mon Sep 17 00:00:00 2001 From: "Chris S. Kim" Date: Wed, 1 Jun 2022 11:09:51 -0400 Subject: [PATCH] Reimplement fs.FileInfo interface (#13315) Co-authored-by: R.B. Boyer <4903+rboyer@users.noreply.github.com> --- agent/uiserver/buffered_file.go | 44 +++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/agent/uiserver/buffered_file.go b/agent/uiserver/buffered_file.go index a956dab16f..f5ebf0cf55 100644 --- a/agent/uiserver/buffered_file.go +++ b/agent/uiserver/buffered_file.go @@ -1,20 +1,31 @@ package uiserver import ( - "io" + "bytes" "io/fs" + "os" + "time" ) // bufferedFile implements fs.File and allows us to modify a file from disk by // writing out the new version into a buffer and then serving file reads from // that. type bufferedFile struct { - buf io.Reader + buf *bytes.Buffer info fs.FileInfo } +var _ fs.FileInfo = (*bufferedFile)(nil) + +func newBufferedFile(buf *bytes.Buffer, info fs.FileInfo) *bufferedFile { + return &bufferedFile{ + buf: buf, + info: info, + } +} + func (b *bufferedFile) Stat() (fs.FileInfo, error) { - return b.info, nil + return b, nil } func (b *bufferedFile) Read(bytes []byte) (int, error) { @@ -25,9 +36,26 @@ func (b *bufferedFile) Close() error { return nil } -func newBufferedFile(buf io.Reader, info fs.FileInfo) *bufferedFile { - return &bufferedFile{ - buf: buf, - info: info, - } +func (b *bufferedFile) Name() string { + return b.info.Name() +} + +func (b *bufferedFile) Size() int64 { + return int64(b.buf.Len()) +} + +func (b *bufferedFile) Mode() os.FileMode { + return b.info.Mode() +} + +func (b *bufferedFile) ModTime() time.Time { + return b.info.ModTime() +} + +func (b *bufferedFile) IsDir() bool { + return false +} + +func (b *bufferedFile) Sys() any { + return nil }