diff --git a/api/go.mod b/api/go.mod index 64c3972e9..0427f8663 100644 --- a/api/go.mod +++ b/api/go.mod @@ -12,7 +12,6 @@ require ( github.com/imdario/mergo v0.3.5 github.com/pkg/errors v0.8.1 github.com/stretchr/testify v1.4.0 - github.com/yujunz/go-getter v1.5.1-lite.0.20201201013212-6d9c071adddf golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e gopkg.in/yaml.v2 v2.3.0 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c diff --git a/api/loader/fileloader.go b/api/loader/fileloader.go index 2d8e126da..9e8412de4 100644 --- a/api/loader/fileloader.go +++ b/api/loader/fileloader.go @@ -95,13 +95,6 @@ type fileLoader struct { // Used to clone repositories. cloner git.Cloner - // If this is non-nil, the files were - // obtained from the given resource - rscSpec *remoteTargetSpec - - // Used to get resources - getter remoteTargetGetter - // Used to clean up, as needed. cleaner func() error } @@ -134,21 +127,20 @@ func newLoaderOrDie( log.Fatalf("unable to make loader at '%s'; %v", path, err) } return newLoaderAtConfirmedDir( - lr, root, fSys, nil, git.ClonerUsingGitExec, getRemoteTarget) + lr, root, fSys, nil, git.ClonerUsingGitExec) } // newLoaderAtConfirmedDir returns a new fileLoader with given root. func newLoaderAtConfirmedDir( lr LoadRestrictorFunc, root filesys.ConfirmedDir, fSys filesys.FileSystem, - referrer *fileLoader, cloner git.Cloner, getter remoteTargetGetter) *fileLoader { + referrer *fileLoader, cloner git.Cloner) *fileLoader { return &fileLoader{ loadRestrictor: lr, root: root, referrer: referrer, fSys: fSys, cloner: cloner, - getter: getter, cleaner: func() error { return nil }, } } @@ -179,45 +171,38 @@ func (fl *fileLoader) New(path string) (ifc.Loader, error) { return nil, fmt.Errorf("new root cannot be empty") } - ldr, errGet := newLoaderAtGetter(path, fl.fSys, nil, fl.cloner, fl.getter) - if errGet == nil { - return ldr, nil - } - - repoSpec, errGit := git.NewRepoSpecFromUrl(path) - if errGit == nil { + repoSpec, err := git.NewRepoSpecFromUrl(path) + if err == nil { // Treat this as git repo clone request. - if errGit := fl.errIfRepoCycle(repoSpec); errGit != nil { - return nil, errGit + if err = fl.errIfRepoCycle(repoSpec); err != nil { + return nil, err } return newLoaderAtGitClone( - repoSpec, fl.fSys, fl, fl.cloner, fl.getter) + repoSpec, fl.fSys, fl, fl.cloner) } if filepath.IsAbs(path) { return nil, fmt.Errorf("new root '%s' cannot be absolute", path) } - root, errDir := demandDirectoryRoot(fl.fSys, fl.root.Join(path)) - if errDir != nil { - return nil, fmt.Errorf( - "error loading %s with git: %v, dir: %v, get: %v", - path, errGit, errDir, errGet) + root, err := demandDirectoryRoot(fl.fSys, fl.root.Join(path)) + if err != nil { + return nil, err } - if errDir := fl.errIfGitContainmentViolation(root); errDir != nil { - return nil, errDir + if err = fl.errIfGitContainmentViolation(root); err != nil { + return nil, err } - if errDir := fl.errIfArgEqualOrHigher(root); errDir != nil { - return nil, errDir + if err = fl.errIfArgEqualOrHigher(root); err != nil { + return nil, err } return newLoaderAtConfirmedDir( - fl.loadRestrictor, root, fl.fSys, fl, fl.cloner, fl.getter), nil + fl.loadRestrictor, root, fl.fSys, fl, fl.cloner), nil } // newLoaderAtGitClone returns a new Loader pinned to a temporary // directory holding a cloned git repo. func newLoaderAtGitClone( repoSpec *git.RepoSpec, fSys filesys.FileSystem, - referrer *fileLoader, cloner git.Cloner, getter remoteTargetGetter) (ifc.Loader, error) { + referrer *fileLoader, cloner git.Cloner) (ifc.Loader, error) { cleaner := repoSpec.Cleaner(fSys) err := cloner(repoSpec) if err != nil { @@ -247,7 +232,6 @@ func newLoaderAtGitClone( repoSpec: repoSpec, fSys: fSys, cloner: cloner, - getter: getter, cleaner: cleaner, }, nil } diff --git a/api/loader/fileloader_test.go b/api/loader/fileloader_test.go index ae3423f8d..983bb41b3 100644 --- a/api/loader/fileloader_test.go +++ b/api/loader/fileloader_test.go @@ -388,7 +388,7 @@ whatever } l, err := newLoaderAtGitClone( repoSpec, fSys, nil, - git.DoNothingCloner(filesys.ConfirmedDir(coRoot)), getNothing) + git.DoNothingCloner(filesys.ConfirmedDir(coRoot))) if err != nil { t.Fatalf("unexpected err: %v\n", err) } @@ -467,7 +467,7 @@ func TestLoaderDisallowsLocalBaseFromRemoteOverlay(t *testing.T) { } l1, err = newLoaderAtGitClone( repoSpec, fSys, nil, - git.DoNothingCloner(filesys.ConfirmedDir(cloneRoot)), getNothing) + git.DoNothingCloner(filesys.ConfirmedDir(cloneRoot))) if err != nil { t.Fatalf("unexpected err: %v\n", err) } @@ -506,7 +506,7 @@ func TestLocalLoaderReferencingGitBase(t *testing.T) { } l1 := newLoaderAtConfirmedDir( RestrictionRootOnly, root, fSys, nil, - git.DoNothingCloner(filesys.ConfirmedDir(cloneRoot)), getNothing) + git.DoNothingCloner(filesys.ConfirmedDir(cloneRoot))) if l1.Root() != topDir { t.Fatalf("unexpected root %s", l1.Root()) } @@ -532,7 +532,7 @@ func TestRepoDirectCycleDetection(t *testing.T) { } l1 := newLoaderAtConfirmedDir( RestrictionRootOnly, root, fSys, nil, - git.DoNothingCloner(filesys.ConfirmedDir(cloneRoot)), getNothing) + git.DoNothingCloner(filesys.ConfirmedDir(cloneRoot))) p1 := "github.com/someOrg/someRepo/foo" rs1, err := git.NewRepoSpecFromUrl(p1) if err != nil { @@ -561,7 +561,7 @@ func TestRepoIndirectCycleDetection(t *testing.T) { } l0 := newLoaderAtConfirmedDir( RestrictionRootOnly, root, fSys, nil, - git.DoNothingCloner(filesys.ConfirmedDir(cloneRoot)), getNothing) + git.DoNothingCloner(filesys.ConfirmedDir(cloneRoot))) p1 := "github.com/someOrg/someRepo1" p2 := "github.com/someOrg/someRepo2" diff --git a/api/loader/getter.go b/api/loader/getter.go deleted file mode 100644 index 257ad4208..000000000 --- a/api/loader/getter.go +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright 2020 The Kubernetes Authors. -// SPDX-License-Identifier: Apache-2.0 - -package loader - -import ( - "context" - "log" - "os" - "time" - - "github.com/yujunz/go-getter" - "sigs.k8s.io/kustomize/api/filesys" - "sigs.k8s.io/kustomize/api/ifc" - "sigs.k8s.io/kustomize/api/internal/git" - "sigs.k8s.io/kustomize/api/internal/utils" -) - -type remoteTargetSpec struct { - // Raw is the original resource in kustomization.yaml - Raw string - - // Dir is where the resource is saved - Dir filesys.ConfirmedDir - - // TempDir is the directory created to hold all resources, including Dir - TempDir filesys.ConfirmedDir -} - -// Getter is a function that can gets resource -type remoteTargetGetter func(rs *remoteTargetSpec) error - -func newLoaderAtGetter( - raw string, - fSys filesys.FileSystem, - referrer *fileLoader, - cloner git.Cloner, - getter remoteTargetGetter) (ifc.Loader, error) { - rs := &remoteTargetSpec{ - Raw: raw, - } - - cleaner := func() error { - return fSys.RemoveAll(rs.TempDir.String()) - } - - if err := getter(rs); err != nil { - cleaner() - return nil, err - } - - return &fileLoader{ - loadRestrictor: RestrictionRootOnly, - // TODO(yujunz): limit to getter root - root: rs.Dir, - referrer: referrer, - fSys: fSys, - cloner: cloner, - rscSpec: rs, - getter: getter, - cleaner: cleaner, - }, nil -} - -func getRemoteTarget(rs *remoteTargetSpec) error { - var err error - - rs.TempDir, err = filesys.NewTmpConfirmedDir() - if err != nil { - return err - } - - rs.Dir = filesys.ConfirmedDir(rs.TempDir.Join("repo")) - - // Get the pwd - pwd, err := os.Getwd() - if err != nil { - log.Fatalf("Error getting wd: %s", err) - } - - opts := []getter.ClientOption{} - client := &getter.Client{ - Ctx: context.TODO(), - Src: rs.Raw, - Dst: rs.Dir.String(), - Pwd: pwd, - Mode: getter.ClientModeAny, - Detectors: []getter.Detector{ - new(getter.GitHubDetector), - new(getter.GitLabDetector), - new(getter.GitDetector), - new(getter.BitBucketDetector), - }, - Options: opts, - } - return utils.TimedCall("go-getter client.Get", 21*time.Second, client.Get) -} - -func getNothing(rs *remoteTargetSpec) error { - var err error - rs.Dir, err = filesys.NewTmpConfirmedDir() - if err != nil { - return err - } - - // Get the pwd - pwd, err := os.Getwd() - if err != nil { - log.Fatalf("Error getting wd: %s", err) - } - - _, err = getter.Detect(rs.Raw, pwd, []getter.Detector{}) - return err -} diff --git a/api/loader/loader.go b/api/loader/loader.go index 3bbb5d4d4..c72a95965 100644 --- a/api/loader/loader.go +++ b/api/loader/loader.go @@ -5,8 +5,6 @@ package loader import ( - "fmt" - "sigs.k8s.io/kustomize/api/filesys" "sigs.k8s.io/kustomize/api/ifc" "sigs.k8s.io/kustomize/api/internal/git" @@ -21,23 +19,16 @@ import ( func NewLoader( lr LoadRestrictorFunc, target string, fSys filesys.FileSystem) (ifc.Loader, error) { - ldr, errGet := newLoaderAtGetter( - target, fSys, nil, git.ClonerUsingGitExec, getRemoteTarget) - if errGet == nil { - return ldr, nil - } - repoSpec, errGit := git.NewRepoSpecFromUrl(target) - if errGit == nil { + repoSpec, err := git.NewRepoSpecFromUrl(target) + if err == nil { // The target qualifies as a remote git target. return newLoaderAtGitClone( - repoSpec, fSys, nil, git.ClonerUsingGitExec, getRemoteTarget) + repoSpec, fSys, nil, git.ClonerUsingGitExec) } - root, errDir := demandDirectoryRoot(fSys, target) - if errDir == nil { - return newLoaderAtConfirmedDir( - lr, root, fSys, nil, git.ClonerUsingGitExec, getRemoteTarget), nil + root, err := demandDirectoryRoot(fSys, target) + if err != nil { + return nil, err } - return nil, fmt.Errorf( - "error creating new loader with git: %v, dir: %v, get: %v", - errGit, errDir, errGet) + return newLoaderAtConfirmedDir( + lr, root, fSys, nil, git.ClonerUsingGitExec), nil } diff --git a/kustomize/commands/build/build.go b/kustomize/commands/build/build.go index 99a797754..de749de70 100644 --- a/kustomize/commands/build/build.go +++ b/kustomize/commands/build/build.go @@ -4,6 +4,7 @@ package build import ( + "fmt" "io" "log" "path/filepath" @@ -36,31 +37,45 @@ func NewOptions(p, o string) *Options { } } -var examples = ` -To generate the resources specified in 'someDir/kustomization.yaml', run +type Help struct { + Use string + Short string + Long string + Example string +} - kustomize build someDir +func MakeHelp(pgmName, cmdName string) Help { + fN := konfig.DefaultKustomizationFileName() + return Help{ + Use: cmdName + "