From 76589af07d786a11452acdbef265baccd8fd963a Mon Sep 17 00:00:00 2001 From: Ian Wahbe Date: Fri, 11 Nov 2022 18:16:53 -0800 Subject: [PATCH] Account for version when caching schemas We also make it an explicitly handled error to get back a schema with the wrong version. --- pkg/codegen/schema/loader.go | 23 ++++++++++++++++++++--- sdk/go/common/workspace/plugins.go | 6 +++++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/pkg/codegen/schema/loader.go b/pkg/codegen/schema/loader.go index 5e1b560fc729..baba5b628570 100644 --- a/pkg/codegen/schema/loader.go +++ b/pkg/codegen/schema/loader.go @@ -182,14 +182,31 @@ func (l *pluginLoader) LoadPackageReference(pkg string, version *semver.Version) } func LoadPackageReference(loader Loader, pkg string, version *semver.Version) (PackageReference, error) { + var ref PackageReference + var err error if refLoader, ok := loader.(ReferenceLoader); ok { - return refLoader.LoadPackageReference(pkg, version) + ref, err = refLoader.LoadPackageReference(pkg, version) + } else { + p, pErr := loader.LoadPackage(pkg, version) + err = pErr + if err == nil { + ref = p.Reference() + } } - p, err := loader.LoadPackage(pkg, version) + if err != nil { return nil, err } - return p.Reference(), nil + + if pkg != ref.Name() || version != nil && ref.Version() != nil && !ref.Version().Equals(*version) { + if l, ok := loader.(*pluginLoader); ok { + return nil, fmt.Errorf("req: %s@%v: entries: %v (returned %s@%v)", pkg, version, + l.entries, ref.Name(), ref.Version()) + } + return nil, fmt.Errorf("loader returned %s@%v: expected %s@%v", ref.Name(), ref.Version(), pkg, version) + } + + return ref, nil } func (l *pluginLoader) loadSchemaBytes(pkg string, version *semver.Version) ([]byte, *semver.Version, error) { diff --git a/sdk/go/common/workspace/plugins.go b/sdk/go/common/workspace/plugins.go index 37f160f6ed5e..d4fb50a27aaa 100644 --- a/sdk/go/common/workspace/plugins.go +++ b/sdk/go/common/workspace/plugins.go @@ -672,7 +672,11 @@ func (info *PluginInfo) SetFileMetadata(path string) error { info.LastUsedTime = tinfo.AccessTime() if info.Kind == ResourcePlugin { - info.SchemaPath = filepath.Join(filepath.Dir(path), "schema-"+info.Name+".json") + var v string + if info.Version != nil { + v = "-" + info.Version.String() + "-" + } + info.SchemaPath = filepath.Join(filepath.Dir(path), "schema-"+info.Name+v+".json") info.SchemaTime = tinfo.ModTime() }