Skip to content

Commit 666236a

Browse files
committed
ref: replace extendio storage with traverse.fs (#216)
1 parent ad76826 commit 666236a

31 files changed

+1557
-329
lines changed

.vscode/settings.json

+3
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
"faydeaudeau",
3737
"fieldalignment",
3838
"flif",
39+
"fsys",
3940
"GOARCH",
4041
"goconst",
4142
"gocritic",
@@ -66,6 +67,7 @@
6667
"mockgen",
6768
"modcache",
6869
"mohae",
70+
"Musico",
6971
"nakedret",
7072
"natefinch",
7173
"navi",
@@ -92,6 +94,7 @@
9294
"thelper",
9395
"toplevel",
9496
"tparallel",
97+
"tsys",
9598
"typecheck",
9699
"unconvert",
97100
"unparam",

go.mod

+6-2
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,22 @@ require (
66
github.com/charmbracelet/bubbletea v1.1.1
77
github.com/charmbracelet/lipgloss v0.13.0
88
github.com/muesli/go-app-paths v0.2.2
9+
github.com/onsi/ginkgo v1.16.5
910
github.com/onsi/ginkgo/v2 v2.20.2
1011
github.com/onsi/gomega v1.34.2
1112
github.com/pkg/errors v0.9.1
1213
github.com/samber/lo v1.47.0
1314
github.com/snivilised/extendio v0.7.0
1415
github.com/snivilised/li18ngo v0.1.4
1516
github.com/snivilised/lorax v0.5.2
17+
github.com/snivilised/pants v0.1.2
18+
github.com/snivilised/traverse v0.1.2
1619
github.com/spf13/cobra v1.8.1
1720
github.com/spf13/viper v1.18.2
1821
go.uber.org/mock v0.4.0
1922
go.uber.org/zap v1.27.0
2023
go.uber.org/zap/exp v0.2.0
21-
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56
24+
golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa
2225
)
2326

2427
require (
@@ -41,7 +44,7 @@ require (
4144
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
4245
github.com/muesli/cancelreader v0.2.2 // indirect
4346
github.com/muesli/termenv v0.15.2 // indirect
44-
github.com/onsi/ginkgo v1.16.5 // indirect
47+
github.com/nxadm/tail v1.4.8 // indirect
4548
github.com/rivo/uniseg v0.4.7 // indirect
4649
github.com/sagikazarmark/locafero v0.4.0 // indirect
4750
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
@@ -50,6 +53,7 @@ require (
5053
golang.org/x/sync v0.8.0 // indirect
5154
golang.org/x/tools v0.24.0 // indirect
5255
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
56+
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
5357
)
5458

5559
require (

go.sum

+8-4
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH
112112
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
113113
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
114114
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
115-
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
116-
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
115+
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
116+
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
117117
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
118118
github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
119119
github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
@@ -129,6 +129,10 @@ github.com/snivilised/li18ngo v0.1.4 h1:y6EECoVFpmkud2yDEeBnMnebPmSvdrEZ/LAq1PoP
129129
github.com/snivilised/li18ngo v0.1.4/go.mod h1:Or3qUhpR6AM1X51i82RtyCvORWy2/hrxY9lg1i1gFTE=
130130
github.com/snivilised/lorax v0.5.2 h1:iReIJl63tydiPSSD0YzsNQFX1CctmvMkYx0aSxoZJKo=
131131
github.com/snivilised/lorax v0.5.2/go.mod h1:7H1JPgSn4h4p8NSqfl64raacYefdm/FiFkfcZ51PVHY=
132+
github.com/snivilised/pants v0.1.2 h1:6Abj02gV5rFYyKfCsmeEiOi1pLdRyITKUY5oDoRgYuU=
133+
github.com/snivilised/pants v0.1.2/go.mod h1:BOZa24yLxVjjnTCFWQeCzUWL8eK4TLtXtkz3pMdEFQM=
134+
github.com/snivilised/traverse v0.1.2 h1:cg0AtPAu40Us+sKhVtIi+q9e0SpovfM2dXz2fM0FHe8=
135+
github.com/snivilised/traverse v0.1.2/go.mod h1:yDe4oJLGLPvC0BGob1UlXRjPZ0bsPVl0HDl9PhGEjVw=
132136
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
133137
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
134138
github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
@@ -165,8 +169,8 @@ go.uber.org/zap/exp v0.2.0/go.mod h1:t0gqAIdh1MfKv9EwN/dLwfZnJxe9ITAZN78HEWPFWDQ
165169
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
166170
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
167171
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
168-
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
169-
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
172+
golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDTwym6AYBu0qzT8AcHdI=
173+
golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ=
170174
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
171175
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
172176
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=

src/app/cfg/cfg-suite_test.go

+5
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,8 @@ func TestCfg(t *testing.T) {
1111
gomega.RegisterFailHandler(ginkgo.Fail)
1212
ginkgo.RunSpecs(t, "Cfg Suite")
1313
}
14+
15+
const (
16+
NoOverwrite = false
17+
home = "/home"
18+
)

src/app/cfg/config-runner.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ import (
1111
"github.com/snivilised/cobrass/src/assistant/configuration"
1212
ci18n "github.com/snivilised/cobrass/src/assistant/i18n"
1313
"github.com/snivilised/extendio/collections"
14-
"github.com/snivilised/extendio/xfs/storage"
1514
"github.com/snivilised/li18ngo"
1615
"github.com/snivilised/pixa/src/app/proxy/common"
16+
"github.com/snivilised/traverse/lfs"
1717
"github.com/spf13/viper"
1818
"golang.org/x/text/language"
1919
)
@@ -35,7 +35,7 @@ func New(
3535
ci *common.ConfigInfo,
3636
sourceID string,
3737
applicationName string,
38-
vfs storage.VirtualFS,
38+
tfs lfs.TraverseFS,
3939
) (common.ConfigRunner, error) {
4040
home, err := os.UserHomeDir()
4141

@@ -45,7 +45,7 @@ func New(
4545
sourceID: sourceID,
4646
applicationName: applicationName,
4747
home: home,
48-
vfs: vfs,
48+
tfs: tfs,
4949
useXDG: common.IsUsingXDG(ci.Viper),
5050
}, err
5151
}
@@ -56,7 +56,7 @@ type configRunner struct {
5656
sourceID string
5757
applicationName string
5858
home string
59-
vfs storage.VirtualFS
59+
tfs lfs.TraverseFS
6060
useXDG bool
6161
}
6262

@@ -191,12 +191,12 @@ func (c *configRunner) export() error {
191191
file := filepath.Join(path, common.Definitions.Pixa.ConfigType)
192192
content := []byte(defaultConfig)
193193

194-
if !c.vfs.FileExists(file) {
195-
if err := c.vfs.MkdirAll(path, common.Permissions.Write); err != nil {
194+
if c.tfs.FileExists(file) {
195+
if err := c.tfs.MkDirAll(path, common.Permissions.Write); err != nil {
196196
return err
197197
}
198198

199-
return c.vfs.WriteFile(file, content, common.Permissions.Write)
199+
return c.tfs.WriteFile(file, content, common.Permissions.Write)
200200
}
201201

202202
return nil

src/app/cfg/config-runner_test.go

+22-12
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,21 @@ package cfg_test
33
import (
44
"errors"
55
"fmt"
6+
"os"
67
"path/filepath"
8+
"testing/fstest"
79

810
. "github.com/onsi/ginkgo/v2" //nolint:revive // foo
911
. "github.com/onsi/gomega" //nolint:revive // foo
10-
"github.com/spf13/viper"
11-
"go.uber.org/mock/gomock"
12-
1312
"github.com/snivilised/cobrass/src/assistant/mocks"
14-
"github.com/snivilised/extendio/xfs/storage"
15-
"github.com/snivilised/li18ngo"
13+
_ "github.com/snivilised/pants"
1614
"github.com/snivilised/pixa/src/app/cfg"
1715
"github.com/snivilised/pixa/src/app/proxy/common"
1816
"github.com/snivilised/pixa/src/internal/helpers"
17+
lab "github.com/snivilised/pixa/src/internal/laboratory"
18+
"github.com/snivilised/traverse/lfs"
19+
"github.com/spf13/viper"
20+
"go.uber.org/mock/gomock"
1921
)
2022

2123
var (
@@ -63,22 +65,30 @@ var _ = Describe("ConfigRunner", Ordered, func() {
6365
var (
6466
repo string
6567
configPath string
66-
vfs storage.VirtualFS
68+
FS lfs.TraverseFS
6769
ctrl *gomock.Controller
6870
mock *mocks.MockViperConfig
6971
)
7072

7173
BeforeAll(func() {
72-
Expect(li18ngo.Use()).To(Succeed())
74+
repo = helpers.Repo("")
75+
Expect(lab.UseI18n(lab.Path(repo, "test/data/l10n"))).To(Succeed())
76+
_ = FS
7377
})
7478

7579
BeforeEach(func() {
7680
viper.Reset()
77-
vfs = storage.UseMemFS()
81+
FS = &lab.TestTraverseFS{
82+
MapFS: fstest.MapFS{
83+
home: &fstest.MapFile{
84+
Mode: os.ModeDir,
85+
},
86+
},
87+
}
7888
ctrl = gomock.NewController(GinkgoT())
7989
mock = mocks.NewMockViperConfig(ctrl)
80-
repo = helpers.Repo("")
81-
configPath = helpers.Path(repo, "test/data/configuration")
90+
91+
configPath = lab.Path(repo, "test/data/configuration")
8292
})
8393

8494
AfterEach(func() {
@@ -107,7 +117,7 @@ var _ = Describe("ConfigRunner", Ordered, func() {
107117
mock.EXPECT().InConfig(gomock.Any()).AnyTimes()
108118
mock.EXPECT().GetString(gomock.Any()).AnyTimes()
109119

110-
runner, err := cfg.New(&ci, sourceID, common.Definitions.Pixa.AppName, vfs)
120+
runner, err := cfg.New(&ci, sourceID, common.Definitions.Pixa.AppName, FS)
111121
if entry.created != nil {
112122
entry.created(entry, runner)
113123
}
@@ -192,7 +202,7 @@ var _ = Describe("ConfigRunner", Ordered, func() {
192202
path := filepath.Join(runner.DefaultPath(), name)
193203
content := []byte(cfg.GetDefaultConfigContent())
194204

195-
_ = vfs.WriteFile(path, content, common.Permissions.Write)
205+
_ = FS.WriteFile(path, content, common.Permissions.Write)
196206
},
197207
assert: func(_ *runnerTE, runner common.ConfigRunner, err error) {
198208
Expect(err).Error().To(BeNil())

src/app/command/bootstrap.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ import (
1616
"github.com/snivilised/cobrass/src/assistant"
1717
"github.com/snivilised/cobrass/src/assistant/configuration"
1818
ci18n "github.com/snivilised/cobrass/src/assistant/i18n"
19-
"github.com/snivilised/extendio/xfs/storage"
2019
"github.com/snivilised/extendio/xfs/utils"
2120
"github.com/snivilised/li18ngo"
2221
"github.com/snivilised/pixa/src/app/cfg"
2322
"github.com/snivilised/pixa/src/app/plog"
2423
"github.com/snivilised/pixa/src/app/proxy"
2524
"github.com/snivilised/pixa/src/app/proxy/common"
2625
"github.com/snivilised/pixa/src/locale"
26+
"github.com/snivilised/traverse/lfs"
2727
)
2828

2929
type LocaleDetector interface {
@@ -64,7 +64,7 @@ type Bootstrap struct {
6464
Container *assistant.CobraContainer
6565
OptionsInfo ConfigureOptionsInfo
6666
Configs *common.Configs
67-
Vfs storage.VirtualFS
67+
FS lfs.TraverseFS
6868
Logger *slog.Logger
6969
Presentation common.PresentationOptions
7070
Observers common.Observers
@@ -105,7 +105,7 @@ func (b *Bootstrap) Root(options ...ConfigureOptionFn) *cobra.Command {
105105
ci,
106106
common.Definitions.Pixa.SourceID,
107107
common.Definitions.Pixa.AppName,
108-
b.Vfs,
108+
b.FS,
109109
)
110110

111111
if err != nil {
@@ -120,7 +120,7 @@ func (b *Bootstrap) Root(options ...ConfigureOptionFn) *cobra.Command {
120120

121121
b.configure()
122122
b.viper()
123-
b.Logger = plog.New(b.Configs.Logging, b.Vfs, ci.Scope, vc)
123+
b.Logger = plog.New(b.Configs.Logging, b.FS, ci.Scope, vc)
124124

125125
b.Container = assistant.NewCobraContainer(
126126
&cobra.Command{

src/app/command/bootstrap_test.go

+8-34
Original file line numberDiff line numberDiff line change
@@ -4,64 +4,38 @@ import (
44
. "github.com/onsi/ginkgo/v2" //nolint:revive // foo
55
. "github.com/onsi/gomega" //nolint:revive // foo
66
"github.com/snivilised/cobrass/src/assistant/configuration"
7-
"github.com/snivilised/extendio/xfs/storage"
87
"github.com/snivilised/pixa/src/app/command"
98
"github.com/snivilised/pixa/src/app/proxy/common"
109
"github.com/snivilised/pixa/src/internal/helpers"
11-
"golang.org/x/text/language"
10+
lab "github.com/snivilised/pixa/src/internal/laboratory"
11+
"github.com/snivilised/traverse/lfs"
1212
)
1313

14-
type DetectorStub struct {
15-
}
16-
17-
type ExecutorStub struct {
18-
Name string
19-
}
20-
21-
func (e *ExecutorStub) ProgName() string {
22-
return e.Name
23-
}
24-
25-
func (e *ExecutorStub) Look() (string, error) {
26-
return "", nil
27-
}
28-
29-
func (e *ExecutorStub) Execute(_ ...string) error {
30-
return nil
31-
}
32-
33-
func (j *DetectorStub) Scan() language.Tag {
34-
return language.BritishEnglish
35-
}
36-
3714
var _ = Describe("Bootstrap", Ordered, func() {
38-
3915
var (
4016
repo string
4117
l10nPath string
4218
configPath string
43-
vfs storage.VirtualFS
19+
FS lfs.TraverseFS
4420
)
4521

4622
BeforeAll(func() {
4723
repo = helpers.Repo("")
48-
l10nPath = helpers.Path(repo, "test/data/l10n")
49-
configPath = helpers.Path(repo, "test/data/configuration")
24+
l10nPath = lab.Path(repo, "test/data/l10n")
25+
configPath = lab.Path(repo, "test/data/configuration")
5026
})
5127

5228
BeforeEach(func() {
53-
vfs, _ = helpers.SetupTest(
54-
"nasa-scientist-index.xml", configPath, l10nPath, helpers.Silent,
55-
)
29+
FS, _ = lab.SetupTest("nasa-scientist-index.xml", configPath, l10nPath, lab.Silent)
5630
})
5731

5832
Context("given: root defined with magick sub-command", func() {
5933
It("🧪 should: setup command without error", func() {
6034
bootstrap := command.Bootstrap{
61-
Vfs: vfs,
35+
FS: FS,
6236
}
6337
rootCmd := bootstrap.Root(func(co *command.ConfigureOptionsInfo) {
64-
co.Detector = &DetectorStub{}
38+
co.Detector = &lab.DetectorStub{}
6539
co.Config.Name = common.Definitions.Pixa.ConfigTestFilename
6640
co.Config.ConfigPath = configPath
6741
co.Config.Viper = &configuration.GlobalViperConfig{}

0 commit comments

Comments
 (0)