Skip to content

Commit

Permalink
ref(tv): consolidate file systems into universal (#194)
Browse files Browse the repository at this point in the history
  • Loading branch information
plastikfan committed Sep 30, 2024
1 parent c011c6f commit 0a1e919
Show file tree
Hide file tree
Showing 32 changed files with 674 additions and 269 deletions.
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"--fast"
],
"cSpell.words": [
"afero",
"alloc",
"Aphex",
"argh",
Expand Down Expand Up @@ -107,11 +108,13 @@
"toplevel",
"tparallel",
"trimprefix",
"tsys",
"Turan",
"typecheck",
"unconvert",
"unlambda",
"unparam",
"usys",
"vals",
"varcheck",
"verr",
Expand Down
22 changes: 13 additions & 9 deletions builders.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,15 @@ type buildArtefacts struct {
ext extent
}

// Builders performs build orchestration via its buildAll method. Builders
// is instructed by the factories (via Configure) of which there are 2; one
// for Walk and one for Run. The Prime/Resume extents create the Builders
// instance.
type Builders struct {
using *pref.Using
readerFS pref.ReadDirFileSystemBuilder
queryFS pref.QueryStatusFileSystemBuilder
using *pref.Using
universalFS pref.TraverseFileSystemBuilder
// readerFS pref.ReadDirFileSystemBuilder
// queryFS pref.QueryStatusFileSystemBuilder
options optionsBuilder
navigator kernel.NavigatorBuilder
plugins pluginsBuilder
Expand All @@ -29,10 +34,11 @@ type Builders struct {
func (bs *Builders) buildAll() (*buildArtefacts, error) {
// BUILD FILE SYSTEM & EXTENT
//
reader := bs.readerFS.Build()
usys := bs.universalFS.Build(bs.using.Root)
ext := bs.extent.build(
reader,
bs.queryFS.Build(reader),
usys,
usys,
usys,
)

// BUILD OPTIONS
Expand All @@ -50,9 +56,7 @@ func (bs *Builders) buildAll() (*buildArtefacts, error) {
//
artefacts, navErr := bs.navigator.Build(o, &types.Resources{
FS: FileSystems{
N: ext.navFS(),
Q: ext.queryFS(),
R: ext.resFS(),
T: ext.universalFS(),
},
Supervisor: measure.New(),
Binder: binder,
Expand Down
9 changes: 8 additions & 1 deletion director-prime_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,18 @@ import (
"github.com/snivilised/traverse/core"
"github.com/snivilised/traverse/cycle"
"github.com/snivilised/traverse/enums"
lab "github.com/snivilised/traverse/internal/laboratory"
"github.com/snivilised/traverse/internal/opts"
"github.com/snivilised/traverse/internal/services"
"github.com/snivilised/traverse/locale"
"github.com/snivilised/traverse/pref"
)

var _ = Describe("Director(Prime)", Ordered, func() {
var (
root string
)

BeforeAll(func() {
Expect(li18ngo.Use(
func(o *li18ngo.UseOptions) {
Expand All @@ -27,6 +32,8 @@ var _ = Describe("Director(Prime)", Ordered, func() {
}
},
)).To(Succeed())

root = lab.Repo("test")
})

BeforeEach(func() {
Expand All @@ -44,7 +51,7 @@ var _ = Describe("Director(Prime)", Ordered, func() {

_, err := tv.Walk().Configure().Extent(tv.Prime(
&tv.Using{
Root: RootPath,
Root: root,
Subscription: tv.SubscribeFiles,
Handler: noOpHandler,
},
Expand Down
18 changes: 9 additions & 9 deletions director-resume_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package tv_test

import (
"context"
"io/fs"
"os"
"sync"
"testing/fstest"
Expand All @@ -16,14 +15,16 @@ import (
"github.com/snivilised/traverse/core"
"github.com/snivilised/traverse/cycle"
"github.com/snivilised/traverse/enums"
lab "github.com/snivilised/traverse/internal/laboratory"
"github.com/snivilised/traverse/internal/services"
"github.com/snivilised/traverse/lfs"
"github.com/snivilised/traverse/locale"
"github.com/snivilised/traverse/pref"
)

var _ = Describe("Director(Resume)", Ordered, func() {
var (
emptyFS fstest.MapFS
emptyFS *lab.TestTraverseFS
restore pref.Option
)

Expand All @@ -33,9 +34,11 @@ var _ = Describe("Director(Resume)", Ordered, func() {

return nil
}
emptyFS = fstest.MapFS{
".": &fstest.MapFile{
Mode: os.ModeDir,
emptyFS = &lab.TestTraverseFS{
MapFS: fstest.MapFS{
".": &fstest.MapFile{
Mode: os.ModeDir,
},
},
}

Expand Down Expand Up @@ -67,10 +70,7 @@ var _ = Describe("Director(Resume)", Ordered, func() {
Using: tv.Using{
Subscription: tv.SubscribeFiles,
Handler: noOpHandler,
GetReadDirFS: func() fs.ReadDirFS {
return emptyFS
},
GetQueryStatusFS: func(_ fs.FS) fs.StatFS {
GetTraverseFS: func(_ string) lfs.TraverseFS {
return emptyFS
},
},
Expand Down
81 changes: 53 additions & 28 deletions director.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,19 @@ import (
"github.com/snivilised/traverse/internal/opts"
"github.com/snivilised/traverse/internal/third/lo"
"github.com/snivilised/traverse/internal/types"
"github.com/snivilised/traverse/lfs"
"github.com/snivilised/traverse/pref"
)

type ifActive func(o *pref.Options, using *pref.Using, mediator types.Mediator) types.Plugin
const (
noOverwrite = true
)

type (
ifActive func(o *pref.Options,
using *pref.Using, mediator types.Mediator,
) types.Plugin
)

// features interrogates options and invokes requests on behalf of the user
// to activate features according to option selections. other plugins will
Expand Down Expand Up @@ -76,26 +85,34 @@ func Prime(using *pref.Using, settings ...pref.Option) *Builders {
//
return &Builders{
using: using,
readerFS: pref.CreateReadDirFS(func() fs.ReadDirFS {
if using.GetReadDirFS != nil {
return using.GetReadDirFS()
}

return NewLocalFS(using.Root)
}),
queryFS: pref.CreateQueryStatusFS(func(qsys fs.FS) fs.StatFS {
if using.GetQueryStatusFS != nil {
return using.GetQueryStatusFS(qsys)
universalFS: pref.CreateTraverseFS(func(root string) lfs.TraverseFS {
if using.GetTraverseFS != nil {
return using.GetTraverseFS(root)
}

return NewQueryStatusFS(qsys)
return lfs.NewTraverseFS(root, noOverwrite)
}),
extent: extension(func(rsys fs.ReadDirFS, qsys fs.StatFS) extent {
// readerFS: pref.CreateReadDirFS(func() fs.ReadDirFS {
// if using.GetReadDirFS != nil {
// return using.GetReadDirFS()
// }

// return NewLocalFS(using.Root)
// }),
// queryFS: pref.CreateQueryStatusFS(func(qsys fs.FS) fs.StatFS {
// if using.GetQueryStatusFS != nil {
// return using.GetQueryStatusFS(qsys)
// }

// return QueryStatusFromFS(qsys)
// }),
extent: extension(func(usys lfs.TraverseFS, rsys fs.ReadDirFS, qsys fs.StatFS) extent {
return &primeExtent{
baseExtent: baseExtent{
fileSys: fileSystems{
nas: rsys,
qus: qsys,
usys: usys,
nas: rsys,
qus: qsys,
},
},
u: using,
Expand Down Expand Up @@ -137,25 +154,33 @@ func Resume(was *Was, settings ...pref.Option) *Builders {
//
return &Builders{
using: &was.Using,
readerFS: pref.CreateReadDirFS(func() fs.ReadDirFS {
if was.Using.GetReadDirFS != nil {
return was.Using.GetReadDirFS()
}
return NewLocalFS(was.Root)
}),
queryFS: pref.CreateQueryStatusFS(func(fsys fs.FS) fs.StatFS {
if was.Using.GetQueryStatusFS != nil {
return was.Using.GetQueryStatusFS(fsys)
universalFS: pref.CreateTraverseFS(func(root string) lfs.TraverseFS {
if was.Using.GetTraverseFS != nil {
return was.Using.GetTraverseFS(root)
}

return NewQueryStatusFS(fsys)
return lfs.NewTraverseFS(root, noOverwrite)
}),
extent: extension(func(rsys fs.ReadDirFS, qsys fs.StatFS) extent {
// readerFS: pref.CreateReadDirFS(func() fs.ReadDirFS {
// if was.Using.GetReadDirFS != nil {
// return was.Using.GetReadDirFS()
// }
// return NewLocalFS(was.Root)
// }),
// queryFS: pref.CreateQueryStatusFS(func(fsys fs.FS) fs.StatFS {
// if was.Using.GetQueryStatusFS != nil {
// return was.Using.GetQueryStatusFS(fsys)
// }

// return QueryStatusFromFS(fsys)
// }),
extent: extension(func(usys lfs.TraverseFS, rsys fs.ReadDirFS, qsys fs.StatFS) extent {
return &resumeExtent{
baseExtent: baseExtent{
fileSys: fileSystems{
nas: rsys,
qus: qsys,
usys: usys,
nas: rsys,
qus: qsys,
},
},
w: was,
Expand Down
13 changes: 10 additions & 3 deletions extent.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"github.com/snivilised/traverse/internal/kernel"
"github.com/snivilised/traverse/internal/opts"
"github.com/snivilised/traverse/internal/types"
"github.com/snivilised/traverse/lfs"
"github.com/snivilised/traverse/pref"
)

Expand All @@ -15,22 +16,28 @@ type extent interface {
was() *pref.Was
plugin(*kernel.Artefacts) types.Plugin
options(...pref.Option) (*pref.Options, *opts.Binder, error)
universalFS() lfs.TraverseFS
navFS() fs.ReadDirFS
queryFS() fs.StatFS
resFS() fs.FS
complete() bool
}

type fileSystems struct {
nas fs.ReadDirFS
qus fs.StatFS
res fs.FS
usys lfs.TraverseFS
nas fs.ReadDirFS
qus fs.StatFS
res fs.FS
}

type baseExtent struct {
fileSys fileSystems
}

func (ex *baseExtent) universalFS() lfs.TraverseFS {
return ex.fileSys.usys
}

func (ex *baseExtent) navFS() fs.ReadDirFS {
return ex.fileSys.nas
}
Expand Down
9 changes: 5 additions & 4 deletions internal-traverse-defs.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (

"github.com/snivilised/traverse/internal/opts"
"github.com/snivilised/traverse/internal/types"
"github.com/snivilised/traverse/lfs"
"github.com/snivilised/traverse/pref"
)

Expand Down Expand Up @@ -56,13 +57,13 @@ func (fn filesystem) build(path string) fs.FS {
}

type extentBuilder interface {
build(rsys fs.ReadDirFS, qsys fs.StatFS) extent
build(usys lfs.TraverseFS, rsys fs.ReadDirFS, qsys fs.StatFS) extent
}

type extension func(rsys fs.ReadDirFS, qsys fs.StatFS) extent
type extension func(usys lfs.TraverseFS, rsys fs.ReadDirFS, qsys fs.StatFS) extent

func (fn extension) build(rsys fs.ReadDirFS, qsys fs.StatFS) extent {
return fn(rsys, qsys)
func (fn extension) build(usys lfs.TraverseFS, rsys fs.ReadDirFS, qsys fs.StatFS) extent {
return fn(usys, rsys, qsys)
}

// We need an entity that manages the decoration of the client handler. The
Expand Down
14 changes: 4 additions & 10 deletions internal/feat/hiber/hibernate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"fmt"
"io/fs"
"path/filepath"
"testing/fstest"

. "github.com/onsi/ginkgo/v2" //nolint:revive // ok
. "github.com/onsi/gomega" //nolint:revive // ok
Expand All @@ -17,11 +16,12 @@ import (
lab "github.com/snivilised/traverse/internal/laboratory"
"github.com/snivilised/traverse/internal/services"
"github.com/snivilised/traverse/internal/third/lo"
"github.com/snivilised/traverse/lfs"
)

var _ = Describe("feature", Ordered, func() {
var (
FS fstest.MapFS
FS *lab.TestTraverseFS
root string
)

Expand Down Expand Up @@ -57,10 +57,7 @@ var _ = Describe("feature", Ordered, func() {
)
return nil
},
GetReadDirFS: func() fs.ReadDirFS {
return FS
},
GetQueryStatusFS: func(_ fs.FS) fs.StatFS {
GetTraverseFS: func(_ string) lfs.TraverseFS {
return FS
},
},
Expand Down Expand Up @@ -154,10 +151,7 @@ var _ = Describe("feature", Ordered, func() {
Root: path,
Subscription: entry.Subscription,
Handler: client,
GetReadDirFS: func() fs.ReadDirFS {
return FS
},
GetQueryStatusFS: func(_ fs.FS) fs.StatFS {
GetTraverseFS: func(_ string) lfs.TraverseFS {
return FS
},
},
Expand Down
Loading

0 comments on commit 0a1e919

Please sign in to comment.