mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-13 10:00:56 +00:00
Consult history in fileloader.
Fixes #366 To reproduce #366, add ``` bases: - . ``` to `examples/helloWorld/kustomization.yaml`, attempt to build it, and enjoy the stack overflow. This PR fixes this by adding history to file loaders, allowing one to avoid cycles in overlay->base relationships. To make entry points clearer, this PR exposes only two public ways to make a fresh (no-history) loader * rooted at `/` * rooted at the process's current working directory. When making a new loader from an existing loader, retaining history along an overlay trace, the only allowed use is to go deeper into a file hierarchy, or go up and over to a never before visited sibling. This fix can probably be defeated by devious symbolic links.
This commit is contained in:
@@ -18,52 +18,14 @@ limitations under the License.
|
||||
package loader
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
"sigs.k8s.io/kustomize/pkg/ifc"
|
||||
|
||||
"sigs.k8s.io/kustomize/pkg/fs"
|
||||
"sigs.k8s.io/kustomize/pkg/ifc"
|
||||
)
|
||||
|
||||
// NewLoader returns a Loader given a target
|
||||
// The target can be a local disk directory or a github Url
|
||||
func NewLoader(target, r string, fSys fs.FileSystem) (ifc.Loader, error) {
|
||||
if !isValidLoaderPath(target, r) {
|
||||
return nil, fmt.Errorf("Not valid path: root='%s', loc='%s'\n", r, target)
|
||||
// NewLoader returns a Loader.
|
||||
func NewLoader(root string, fSys fs.FileSystem) (ifc.Loader, error) {
|
||||
if isRepoUrl(root) {
|
||||
return newGithubLoader(root, fSys)
|
||||
}
|
||||
|
||||
if !isLocalTarget(target, fSys) && isRepoUrl(target) {
|
||||
return newGithubLoader(target, fSys)
|
||||
}
|
||||
|
||||
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, target) {
|
||||
return nil, fmt.Errorf("Not abs path: l.root='%s', loc='%s'\n", l.root, target)
|
||||
}
|
||||
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 == ""
|
||||
}
|
||||
|
||||
// isLocalTarget checks if a file exists in the filesystem
|
||||
func isLocalTarget(s string, fs fs.FileSystem) bool {
|
||||
return fs.Exists(s)
|
||||
return newFileLoaderAt(fSys, root)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user