Answer architecture round 10: the paired ruling at fb2c809 is better; a mounted module names its manifest from its files' root, and the mount wrapper returns nothing beside an error
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"path"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
@@ -49,7 +50,12 @@ func (s Source) Manifest() (Manifest, error) {
|
||||
}
|
||||
|
||||
// ManifestPath is the manifest's path as errors name it.
|
||||
func (s Source) ManifestPath() string { return s.labelled(ManifestFile) }
|
||||
func (s Source) ManifestPath() string {
|
||||
if m, isMounted := s.fsys.(mounted); isMounted {
|
||||
return s.labelled(path.Join(m.at, ManifestFile))
|
||||
}
|
||||
return s.labelled(ManifestFile)
|
||||
}
|
||||
|
||||
// decodeManifest decodes a manifest, refusing any key or shape it does not define, and
|
||||
// reports every mistake: first each entry's own, in path order, then each parent naming
|
||||
|
||||
@@ -22,7 +22,10 @@ func (m mounted) Open(name string) (fs.File, error) {
|
||||
}
|
||||
if ok {
|
||||
f, err := m.fsys.Open(".")
|
||||
return mountRoot{File: f, name: path.Base(name)}, err
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return mountRoot{File: f, name: path.Base(name)}, nil
|
||||
}
|
||||
if next, ok := m.towards(name); ok {
|
||||
return &mountDir{name: path.Base(name), next: next}, nil
|
||||
@@ -70,7 +73,10 @@ type mountRoot struct {
|
||||
|
||||
func (r mountRoot) Stat() (fs.FileInfo, error) {
|
||||
info, err := r.File.Stat()
|
||||
return renamed{FileInfo: info, name: r.name}, err
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return renamed{FileInfo: info, name: r.name}, nil
|
||||
}
|
||||
|
||||
func (r mountRoot) ReadDir(n int) ([]fs.DirEntry, error) {
|
||||
|
||||
Reference in New Issue
Block a user