Fix resolving base property from dependent mods. Closes #1578

This commit is contained in:
kaidaguerre
2022-03-07 18:00:00 +00:00
committed by GitHub
parent d4aa6f2ebf
commit 584bd2cfb7
7 changed files with 28 additions and 39 deletions

View File

@@ -337,7 +337,7 @@ func (i *ModInstaller) getModRefSatisfyingConstraints(modVersion *modconfig.ModV
// find a version which satisfies the version constraint
var version = getVersionSatisfyingConstraint(modVersion.Constraint, availableVersions)
if version == nil {
return nil, fmt.Errorf("no version of %s found satisfying verison constraint: %s", modVersion.Name, modVersion.Constraint.Original)
return nil, fmt.Errorf("no version of %s found satisfying version constraint: %s", modVersion.Name, modVersion.Constraint.Original)
}
return NewResolvedModRef(modVersion, version)

View File

@@ -77,6 +77,9 @@ func LoadMod(modPath string, parentRunCtx *parse.RunContext) (mod *modconfig.Mod
// now we have loaded dependencies, set the current mod on the run context
runCtx.CurrentMod = mod
// now populate the resource maps of the current mod using the dependency mods
mod.ResourceMaps = runCtx.GetResourceMaps()
// if flag is set, create pseudo resources by mapping files
var pseudoResources []modconfig.MappableResource
if runCtx.CreatePseudoResources() {

View File

@@ -259,9 +259,6 @@ func (m *Mod) OnDecoded(block *hcl.Block, resourceMapProvider ModResourcesProvid
m.Require = m.LegacyRequire
}
// populate resource map references
m.ResourceMaps.PopulateReferences()
// initialise our Require
if m.Require == nil {
return nil

View File

@@ -332,8 +332,19 @@ func (r *RunContext) GetMod(modShortName string) *modconfig.Mod {
}
func (r *RunContext) GetResourceMaps() *modconfig.ModResources {
// TODO [reports] add dep mods
return r.CurrentMod.GetResourceMaps()
dependencyResourceMaps := make([]*modconfig.ModResources, len(r.LoadedDependencyMods))
idx := 0
// use the current mod as the base resource map
resourceMap := r.CurrentMod.GetResourceMaps()
// merge in the dependency mods
for _, m := range r.LoadedDependencyMods {
dependencyResourceMaps[idx] = m.GetResourceMaps()
idx++
}
resourceMap = resourceMap.Merge(dependencyResourceMaps)
return resourceMap
}
func (r *RunContext) newDependencyGraph() *topsort.Graph {

View File

@@ -45,9 +45,6 @@ type Workspace struct {
// callback function to reset display after the file watche displays messages
onFileWatcherEventMessages func()
loadPseudoResources bool
// maps of mod resources from this mod and ALL DEPENDENCIES, keyed by long and short names
resourceMaps *modconfig.ModResources
}
// Load creates a Workspace and loads the workspace mod
@@ -219,6 +216,9 @@ func (w *Workspace) loadWorkspaceMod(ctx context.Context) error {
return err
}
// populate the mod references map references
m.ResourceMaps.PopulateReferences()
// now set workspace properties
w.Mod = m
@@ -227,9 +227,6 @@ func (w *Workspace) loadWorkspaceMod(ctx context.Context) error {
// NOTE: add in the workspace mod to the dependency mods
w.Mods[w.Mod.Name()] = w.Mod
// populate the workspace resource map
w.populateResourceMaps()
// verify all runtime dependencies can be resolved
return w.verifyResourceRuntimeDependencies()
}
@@ -320,7 +317,7 @@ func (w *Workspace) loadWorkspaceResourceName() (*modconfig.WorkspaceResources,
}
func (w *Workspace) verifyResourceRuntimeDependencies() error {
for _, d := range w.resourceMaps.Dashboards {
for _, d := range w.Mod.ResourceMaps.Dashboards {
if err := d.BuildRuntimeDependencyTree(w); err != nil {
return err
}

View File

@@ -50,7 +50,7 @@ func (w *Workspace) reloadResourceMaps(ctx context.Context) (*modconfig.ModResou
// get the pre-load resource maps
// NOTE: do not call GetResourceMaps - we DO NOT want to lock loadLock
prevResourceMaps := w.resourceMaps
prevResourceMaps := w.Mod.ResourceMaps
// if there is an outstanding watcher error, set prevResourceMaps to empty to force refresh
if w.watcherError != nil {
prevResourceMaps = modconfig.NewWorkspaceResourceMaps(w.Mod)
@@ -73,7 +73,7 @@ func (w *Workspace) reloadResourceMaps(ctx context.Context) (*modconfig.ModResou
w.watcherError = nil
// reload the resource maps
resourceMaps := w.resourceMaps
resourceMaps := w.Mod.ResourceMaps
return prevResourceMaps, resourceMaps, nil

View File

@@ -6,10 +6,10 @@ func (w *Workspace) GetQuery(queryName string) (*modconfig.Query, bool) {
w.loadLock.Lock()
defer w.loadLock.Unlock()
if query, ok := w.resourceMaps.LocalQueries[queryName]; ok {
if query, ok := w.Mod.ResourceMaps.LocalQueries[queryName]; ok {
return query, true
}
if query, ok := w.resourceMaps.Queries[queryName]; ok {
if query, ok := w.Mod.ResourceMaps.Queries[queryName]; ok {
return query, true
}
return nil, false
@@ -19,10 +19,10 @@ func (w *Workspace) GetControl(controlName string) (*modconfig.Control, bool) {
w.loadLock.Lock()
defer w.loadLock.Unlock()
if control, ok := w.resourceMaps.LocalControls[controlName]; ok {
if control, ok := w.Mod.ResourceMaps.LocalControls[controlName]; ok {
return control, true
}
if control, ok := w.resourceMaps.Controls[controlName]; ok {
if control, ok := w.Mod.ResourceMaps.Controls[controlName]; ok {
return control, true
}
return nil, false
@@ -33,24 +33,5 @@ func (w *Workspace) GetResourceMaps() *modconfig.ModResources {
w.loadLock.Lock()
defer w.loadLock.Unlock()
// this will only occur for unit tests
if w.resourceMaps == nil {
w.populateResourceMaps()
}
return w.resourceMaps
}
func (w *Workspace) populateResourceMaps() {
dependencyResourceMaps := make([]*modconfig.ModResources, len(w.Mods))
idx := 0
for _, m := range w.Mods {
dependencyResourceMaps[idx] = m.GetResourceMaps()
idx++
}
w.resourceMaps = w.Mod.GetResourceMaps().Merge(dependencyResourceMaps)
// now populate references in the resource map
w.resourceMaps.PopulateReferences()
return w.Mod.ResourceMaps
}