mirror of https://github.com/databricks/cli.git
67 lines
1.1 KiB
Go
67 lines
1.1 KiB
Go
package vfs
|
|
|
|
import (
|
|
"context"
|
|
"io/fs"
|
|
"path/filepath"
|
|
|
|
"github.com/databricks/cli/libs/filer"
|
|
)
|
|
|
|
type filerPath struct {
|
|
ctx context.Context
|
|
path string
|
|
fs FS
|
|
|
|
construct func(path string) (filer.Filer, error)
|
|
}
|
|
|
|
func NewFilerPath(ctx context.Context, path string, construct func(path string) (filer.Filer, error)) (Path, error) {
|
|
f, err := construct(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &filerPath{
|
|
ctx: ctx,
|
|
path: path,
|
|
fs: filer.NewFS(ctx, f).(FS),
|
|
|
|
construct: construct,
|
|
}, nil
|
|
}
|
|
|
|
func (f filerPath) Open(name string) (fs.File, error) {
|
|
return f.fs.Open(name)
|
|
}
|
|
|
|
func (f filerPath) Stat(name string) (fs.FileInfo, error) {
|
|
return f.fs.Stat(name)
|
|
}
|
|
|
|
func (f filerPath) ReadDir(name string) ([]fs.DirEntry, error) {
|
|
return f.fs.ReadDir(name)
|
|
}
|
|
|
|
func (f filerPath) ReadFile(name string) ([]byte, error) {
|
|
return f.fs.ReadFile(name)
|
|
}
|
|
|
|
func (f filerPath) Parent() Path {
|
|
if f.path == "/" {
|
|
return nil
|
|
}
|
|
|
|
dir := filepath.Dir(f.path)
|
|
nf, err := NewFilerPath(f.ctx, dir, f.construct)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return nf
|
|
}
|
|
|
|
func (f filerPath) Native() string {
|
|
return f.path
|
|
}
|