diff --git a/pkg/commands/build.go b/pkg/commands/build.go index 41b24cc00..e268dfff5 100644 --- a/pkg/commands/build.go +++ b/pkg/commands/build.go @@ -74,7 +74,7 @@ func (o *buildOptions) Validate(args []string) error { // RunBuild runs build command. func (o *buildOptions) RunBuild(out io.Writer, fSys fs.FileSystem) error { - rootLoader, err := loader.NewLoader(o.kustomizationPath, fSys) + rootLoader, err := loader.NewLoader(o.kustomizationPath, "", fSys) if err != nil { return err } diff --git a/pkg/commands/diff.go b/pkg/commands/diff.go index 8b9053b1d..70f3a7c2e 100644 --- a/pkg/commands/diff.go +++ b/pkg/commands/diff.go @@ -67,7 +67,7 @@ func (o *diffOptions) Validate(args []string) error { // RunDiff gets the differences between Application.MakeCustomizedResMap() and Application.MakeUncustomizedResMap(). func (o *diffOptions) RunDiff(out, errOut io.Writer, fSys fs.FileSystem) error { - rootLoader, err := loader.NewLoader(o.kustomizationPath, fSys) + rootLoader, err := loader.NewLoader(o.kustomizationPath, "", fSys) if err != nil { return err } diff --git a/pkg/loader/fileloader.go b/pkg/loader/fileloader.go index 2fe58479d..cb32b953c 100644 --- a/pkg/loader/fileloader.go +++ b/pkg/loader/fileloader.go @@ -53,17 +53,7 @@ func (l *fileLoader) Root() string { // Example: "/home/seans/project" or "/home/seans/project/" // NOT "/home/seans/project/file.yaml". func (l *fileLoader) New(newRoot string) (Loader, error) { - if isRepoUrl(newRoot) { - return newGithubLoader(newRoot, l.fSys) - } - if !l.IsAbsPath(l.root, newRoot) { - return nil, fmt.Errorf("Not abs path: l.root='%s', loc='%s'\n", l.root, newRoot) - } - root, err := l.fullLocation(l.root, newRoot) - if err != nil { - return nil, err - } - return newFileLoaderAtRoot(root, l.fSys), nil + return NewLoader(newRoot, l.root, l.fSys) } // IsAbsPath return true if the location calculated with the root diff --git a/pkg/loader/fileloader_test.go b/pkg/loader/fileloader_test.go index 7d8ffe41d..5a2a3cc10 100644 --- a/pkg/loader/fileloader_test.go +++ b/pkg/loader/fileloader_test.go @@ -47,7 +47,7 @@ func TestLoader_Root(t *testing.T) { if err != nil { t.Fatalf("Unexpected in New(): %v\n", err) } - if "/home/seans/project/" != loader.Root() { + if "/home/seans/project" != loader.Root() { t.Fatalf("Incorrect Loader Root: %s\n", loader.Root()) } diff --git a/pkg/loader/githubloader.go b/pkg/loader/githubloader.go index e48551d1b..f6c452589 100644 --- a/pkg/loader/githubloader.go +++ b/pkg/loader/githubloader.go @@ -31,7 +31,6 @@ import ( type githubLoader struct { repo string checkoutDir string - fSys fs.FileSystem loader *fileLoader } @@ -70,7 +69,6 @@ func newGithubLoader(repoUrl string, fs fs.FileSystem) (*githubLoader, error) { return &githubLoader{ repo: repoUrl, checkoutDir: target, - fSys: fs, loader: l, }, nil } diff --git a/pkg/loader/loader.go b/pkg/loader/loader.go index 74c5444c1..3a3f1893b 100644 --- a/pkg/loader/loader.go +++ b/pkg/loader/loader.go @@ -38,23 +38,38 @@ type Loader interface { // NewLoader returns a Loader given a target // The target can be a local disk directory or a github Url -func NewLoader(target string, fSys fs.FileSystem) (Loader, error) { +func NewLoader(target, r string, fSys fs.FileSystem) (Loader, error) { + if !isValidLoaderPath(target, r) { + return nil, fmt.Errorf("Not valid path: root='%s', loc='%s'\n", r, target) + } + if isRepoUrl(target) { return newGithubLoader(target, fSys) } - l := NewFileLoader(fSys) - absPath, err := filepath.Abs(target) - if err != nil { - return nil, err + l := newFileLoaderAtRoot(r, fSys) + if isRootLoaderPath(r) { + absPath, err := filepath.Abs(target) + if err != nil { + return nil, err + } + target = absPath } - if !l.IsAbsPath(l.root, absPath) { - return nil, fmt.Errorf("Not abs path: l.root='%s', loc='%s'\n", l.root, absPath) + if !l.IsAbsPath(l.root, target) { + return nil, fmt.Errorf("Not abs path: l.root='%s', loc='%s'\n", l.root, target) } - root, err := l.fullLocation(l.root, absPath) + root, err := l.fullLocation(l.root, target) if err != nil { return nil, err } return newFileLoaderAtRoot(root, l.fSys), nil } + +func isValidLoaderPath(target, root string) bool { + return target != "" || root != "" +} + +func isRootLoaderPath(root string) bool { + return root == "" +}