This PR closes a TODO in the fileLoader type to
replace the string representing a git repo url
with a struct called holding validated fields.
New struct is called RepoSpec.
It holds what we need in coming PRs for remote
repo base containment checks, and will also allow
the overlay cycle prevention code to take into
account different host schemes or branches.
The struct is in a new file called repospec.go.
The new file is mostly just a code move of url
parsing code that was in cloner.go. Git "blame"
history preserved through the move.
No change in execution (see final commit by itself).
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.