Skip to content

Commit dbdcc3a

Browse files
silvanocerzacmaglie
authored andcommitted
Fix FindToolsRequiredFromPlatformRelease not returning discoveries
1 parent d2640c2 commit dbdcc3a

File tree

2 files changed

+85
-0
lines changed

2 files changed

+85
-0
lines changed

arduino/cores/packagemanager/package_manager.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,18 @@ func (pm *PackageManager) FindToolsRequiredFromPlatformRelease(platform *cores.P
481481
requiredTools = append(requiredTools, tool)
482482
delete(foundTools, tool.Tool.Name)
483483
}
484+
485+
platform.DiscoveryDependencies.Sort()
486+
for _, discoveryDep := range platform.DiscoveryDependencies {
487+
pm.Log.WithField("discovery", discoveryDep).Infof("Required discovery")
488+
tool := pm.FindDiscoveryDependency(discoveryDep)
489+
if tool == nil {
490+
return nil, fmt.Errorf("discovery release not found: %s", discoveryDep)
491+
}
492+
requiredTools = append(requiredTools, tool)
493+
delete(foundTools, tool.Tool.Name)
494+
}
495+
484496
for _, toolRel := range foundTools {
485497
requiredTools = append(requiredTools, toolRel)
486498
}
@@ -536,3 +548,13 @@ func (pm *PackageManager) FindToolDependency(dep *cores.ToolDependency) *cores.T
536548
}
537549
return toolRelease
538550
}
551+
552+
func (pm *PackageManager) FindDiscoveryDependency(discovery *cores.DiscoveryDependency) *cores.ToolRelease {
553+
if pack := pm.Packages[discovery.Packager]; pack == nil {
554+
return nil
555+
} else if toolRelease := pack.Tools[discovery.Name]; toolRelease == nil {
556+
return nil
557+
} else {
558+
return toolRelease.GetLatestInstalled()
559+
}
560+
}

arduino/cores/packagemanager/package_manager_test.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,3 +339,66 @@ func TestPackageManagerClear(t *testing.T) {
339339
// Verifies both PackageManagers are now equal
340340
require.Equal(t, &packageManager, &emptyPackageManager)
341341
}
342+
343+
func TestFindToolsRequiredFromPlatformRelease(t *testing.T) {
344+
// Create all the necessary data to load discoveries
345+
fakePath := paths.New("fake-path")
346+
347+
pm := packagemanager.NewPackageManager(fakePath, fakePath, fakePath, fakePath)
348+
pack := pm.Packages.GetOrCreatePackage("arduino")
349+
// some tool
350+
tool := pack.GetOrCreateTool("some-tool")
351+
toolRelease := tool.GetOrCreateRelease(semver.ParseRelaxed("4.2.0"))
352+
// We set this to fake the tool is installed
353+
toolRelease.InstallDir = fakePath
354+
// some tool
355+
tool = pack.GetOrCreateTool("some-tool")
356+
toolRelease = tool.GetOrCreateRelease(semver.ParseRelaxed("5.6.7"))
357+
// We set this to fake the tool is installed
358+
toolRelease.InstallDir = fakePath
359+
// some other tool
360+
tool = pack.GetOrCreateTool("some-other-tool")
361+
toolRelease = tool.GetOrCreateRelease(semver.ParseRelaxed("6.6.6"))
362+
// We set this to fake the tool is installed
363+
toolRelease.InstallDir = fakePath
364+
// ble-discovery tool
365+
tool = pack.GetOrCreateTool("ble-discovery")
366+
toolRelease = tool.GetOrCreateRelease(semver.ParseRelaxed("1.0.0"))
367+
// We set this to fake the tool is installed
368+
toolRelease.InstallDir = fakePath
369+
tool.GetOrCreateRelease(semver.ParseRelaxed("0.1.0"))
370+
371+
// serial-discovery tool
372+
tool = pack.GetOrCreateTool("serial-discovery")
373+
tool.GetOrCreateRelease(semver.ParseRelaxed("1.0.0"))
374+
toolRelease = tool.GetOrCreateRelease(semver.ParseRelaxed("0.1.0"))
375+
// We set this to fake the tool is installed
376+
toolRelease.InstallDir = fakePath
377+
378+
platform := pack.GetOrCreatePlatform("avr")
379+
release := platform.GetOrCreateRelease(semver.MustParse("1.0.0"))
380+
release.ToolDependencies = append(release.ToolDependencies, &cores.ToolDependency{
381+
ToolName: "some-tool",
382+
ToolVersion: semver.ParseRelaxed("4.2.0"),
383+
ToolPackager: "arduino",
384+
})
385+
release.ToolDependencies = append(release.ToolDependencies, &cores.ToolDependency{
386+
ToolName: "some-other-tool",
387+
ToolVersion: semver.ParseRelaxed("6.6.6"),
388+
ToolPackager: "arduino",
389+
})
390+
release.DiscoveryDependencies = append(release.DiscoveryDependencies, &cores.DiscoveryDependency{
391+
Name: "ble-discovery",
392+
Packager: "arduino",
393+
})
394+
release.DiscoveryDependencies = append(release.DiscoveryDependencies, &cores.DiscoveryDependency{
395+
Name: "serial-discovery",
396+
Packager: "arduino",
397+
})
398+
// We set this to fake the platform is installed
399+
release.InstallDir = fakePath
400+
401+
tools, err := pm.FindToolsRequiredFromPlatformRelease(release)
402+
require.NoError(t, err)
403+
require.Len(t, tools, 4)
404+
}

0 commit comments

Comments
 (0)