feat: absolute imports (#63)

* feat: go-like import style

jb now creates a directory structure inside of vendor/ that is similar to how go
does (github.com/grafana/jsonnet-libs). This is reflected in the final import
paths, which means they will be go-like

* refactor(spec/deps): named regexs

* feat: make goImportStyle configurable

Defaults to off, can be enabled in `jsonnetfile.json`

* fix: integration test

* doc: license headers

* fix(deps): remove GO_IMPORT_STYLE

not an option anymore, will always do so and symlink

* feat: symlink to legacy location

* feat: allow to disable legacy links

* fix(test): legacyImports in integration tests

* fix(spec): test

* fix: respect legacyName aliases

It was possible to alias packages by changing `name` previously.

While names are now absolute (and computed), legacy links should still respect
old aliases to avoid breaking code.

* fix(test): integration

* fix(init): keep legacyImports enabled for now

* feat: rewrite imports

adds a command to automatically rewrite imports from legacy to absolute style

* fix(tool): rewrite confused by prefixing packages

When a package was a prefix of another one, it broke.
Fixed that by using a proper regular expression. Added a test to make sure it
works as expected

* Update cmd/jb/init.go

* fix: exclude local packages from legacy linking

They actually still use the old style, which is fine. LegacyLinking
messed them up, but from now on it just ignores symlinks that match a localPackage.
This commit is contained in:
Tom 2020-01-24 08:02:34 +01:00 committed by GitHub
parent 184841238b
commit 7b8a7836a4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
22 changed files with 1129 additions and 361 deletions

View file

@ -13,3 +13,83 @@
// limitations under the License.
package pkg
import (
"testing"
"github.com/jsonnet-bundler/jsonnet-bundler/spec/deps"
)
func TestKnown(t *testing.T) {
deps := map[string]deps.Dependency{
"ksonnet-lib": deps.Dependency{
Source: deps.Source{GitSource: &deps.Git{
Scheme: deps.GitSchemeHTTPS,
Host: "github.com",
User: "ksonnet",
Repo: "ksonnet-lib",
Subdir: "/ksonnet.beta.4",
}},
},
}
paths := []string{
"github.com",
"github.com/ksonnet",
"github.com/ksonnet/ksonnet-lib",
"github.com/ksonnet/ksonnet-lib/ksonnet.beta.4",
"github.com/ksonnet/ksonnet-lib/ksonnet.beta.4/k.libsonnet",
"github.com/ksonnet-util", // don't know that one
"ksonnet.beta.4", // the symlink
}
want := []string{
"github.com",
"github.com/ksonnet",
"github.com/ksonnet/ksonnet",
"github.com/ksonnet/ksonnet-lib",
"github.com/ksonnet/ksonnet-lib/ksonnet.beta.4",
"github.com/ksonnet/ksonnet-lib/ksonnet.beta.4/k.libsonnet",
}
w := make(map[string]bool)
for _, k := range want {
w[k] = true
}
for _, p := range paths {
if known(deps, p) != w[p] {
t.Fatalf("expected %s to be %v", p, w[p])
}
}
}
func TestCleanLegacyName(t *testing.T) {
deps := func(name string) map[string]deps.Dependency {
return map[string]deps.Dependency{
"ksonnet-lib": deps.Dependency{
LegacyNameCompat: name,
Source: deps.Source{GitSource: &deps.Git{
Scheme: deps.GitSchemeHTTPS,
Host: "github.com",
User: "ksonnet",
Repo: "ksonnet-lib",
Subdir: "/ksonnet.beta.4",
}},
},
}
}
cases := map[string]bool{
"ksonnet": false,
"ksonnet.beta.4": true,
}
for name, want := range cases {
list := deps(name)
CleanLegacyName(list)
if (list["ksonnet-lib"].LegacyNameCompat == "") != want {
t.Fatalf("expected `%s` to be removed: %v", name, want)
}
}
}