fs: rewrite Reader to build fs tree up front

This adds proper support for filenames that include directories. For
example, `/foo/bar` would result in an error when trying to open `/foo`.

The directory tree is now build upfront. This ensures let's the
directory tree construction be handled only once. All accessors then
only have to look up the constructed directory entries.
This commit is contained in:
Michael Eischer
2025-04-11 21:37:32 +02:00
parent 16850c61fa
commit 236f81758e
5 changed files with 177 additions and 117 deletions

View File

@@ -174,12 +174,10 @@ func TestArchiverSaveFileReaderFS(t *testing.T) {
ts := time.Now()
filename := "xx"
readerFs := &fs.Reader{
ModTime: ts,
Mode: 0123,
Name: filename,
ReadCloser: io.NopCloser(strings.NewReader(test.Data)),
}
readerFs := fs.NewReader(filename, io.NopCloser(strings.NewReader(test.Data)), fs.ReaderOptions{
ModTime: ts,
Mode: 0123,
})
node, stats := saveFile(t, repo, filename, readerFs)
@@ -288,12 +286,10 @@ func TestArchiverSaveReaderFS(t *testing.T) {
ts := time.Now()
filename := "xx"
readerFs := &fs.Reader{
ModTime: ts,
Mode: 0123,
Name: filename,
ReadCloser: io.NopCloser(strings.NewReader(test.Data)),
}
readerFs := fs.NewReader(filename, io.NopCloser(strings.NewReader(test.Data)), fs.ReaderOptions{
ModTime: ts,
Mode: 0123,
})
arch := New(repo, readerFs, Options{})
arch.Error = func(item string, err error) error {