Skip to content

Commit feffb70

Browse files
committed
Fix builtin discoveries not loaded if no platform is installed
1 parent 22ac0f3 commit feffb70

File tree

4 files changed

+55
-28
lines changed

4 files changed

+55
-28
lines changed

Diff for: arduino/cores/packagemanager/loader.go

+35-16
Original file line numberDiff line numberDiff line change
@@ -683,6 +683,39 @@ func (pm *PackageManager) LoadDiscoveries() []*status.Status {
683683
for _, platform := range pm.InstalledPlatformReleases() {
684684
statuses = append(statuses, pm.loadDiscoveries(platform)...)
685685
}
686+
if st := pm.loadBuiltinDiscoveries(); len(st) > 0 {
687+
statuses = append(statuses, st...)
688+
}
689+
return statuses
690+
}
691+
692+
// loadDiscovery loads the discovery tool with id, if it cannot be found a non-nil status is returned
693+
func (pm *PackageManager) loadDiscovery(id string) *status.Status {
694+
tool := pm.GetTool(id)
695+
if tool == nil {
696+
return status.Newf(codes.FailedPrecondition, tr("discovery not found: %s"), id)
697+
}
698+
toolRelease := tool.GetLatestInstalled()
699+
if toolRelease == nil {
700+
return status.Newf(codes.FailedPrecondition, tr("discovery not installed: %s"), id)
701+
}
702+
discoveryPath := toolRelease.InstallDir.Join(tool.Name).String()
703+
d, err := discovery.New(id, discoveryPath)
704+
if err != nil {
705+
return status.Newf(codes.FailedPrecondition, tr("creating discovery: %s"), err)
706+
}
707+
pm.discoveryManager.Add(d)
708+
return nil
709+
}
710+
711+
// loadBuiltinDiscoveries loads the discovery tools that are part of the builtin package
712+
func (pm *PackageManager) loadBuiltinDiscoveries() []*status.Status {
713+
statuses := []*status.Status{}
714+
for _, id := range []string{"builtin:serial-discovery", "builtin:mdns-discovery"} {
715+
if st := pm.loadDiscovery(id); st != nil {
716+
statuses = append(statuses, st)
717+
}
718+
}
686719
return statuses
687720
}
688721

@@ -705,23 +738,9 @@ func (pm *PackageManager) loadDiscoveries(release *cores.PlatformRelease) []*sta
705738
//
706739
// If both indexed and unindexed properties are found the unindexed are ignored
707740
for _, id := range discoveryProperties.ExtractSubIndexLists("required") {
708-
tool := pm.GetTool(id)
709-
if tool == nil {
710-
statuses = append(statuses, status.Newf(codes.FailedPrecondition, tr("discovery not found: %s"), id))
711-
continue
712-
}
713-
toolRelease := tool.GetLatestInstalled()
714-
if toolRelease == nil {
715-
statuses = append(statuses, status.Newf(codes.FailedPrecondition, tr("discovery not installed: %s"), id))
716-
continue
717-
}
718-
discoveryPath := toolRelease.InstallDir.Join(tool.Name).String()
719-
d, err := discovery.New(id, discoveryPath)
720-
if err != nil {
721-
statuses = append(statuses, status.Newf(codes.FailedPrecondition, tr("creating discovery: %s"), err))
722-
continue
741+
if st := pm.loadDiscovery(id); st != nil {
742+
statuses = append(statuses, st)
723743
}
724-
pm.discoveryManager.Add(d)
725744
}
726745

727746
discoveryIDs := discoveryProperties.FirstLevelOf()

Diff for: arduino/cores/packagemanager/loader_test.go

+12-4
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,9 @@ func TestLoadDiscoveries(t *testing.T) {
141141
})
142142

143143
errs := packageManager.LoadDiscoveries()
144-
require.Len(t, errs, 0)
144+
require.Len(t, errs, 2)
145+
require.Equal(t, errs[0].Message(), "discovery not found: builtin:serial-discovery")
146+
require.Equal(t, errs[1].Message(), "discovery not found: builtin:mdns-discovery")
145147
discoveries := packageManager.DiscoveryManager().IDs()
146148
require.Len(t, discoveries, 1)
147149
require.Contains(t, discoveries, "arduino:ble-discovery")
@@ -154,7 +156,9 @@ func TestLoadDiscoveries(t *testing.T) {
154156
})
155157

156158
errs = packageManager.LoadDiscoveries()
157-
require.Len(t, errs, 0)
159+
require.Len(t, errs, 2)
160+
require.Equal(t, errs[0].Message(), "discovery not found: builtin:serial-discovery")
161+
require.Equal(t, errs[1].Message(), "discovery not found: builtin:mdns-discovery")
158162
discoveries = packageManager.DiscoveryManager().IDs()
159163
require.Len(t, discoveries, 2)
160164
require.Contains(t, discoveries, "arduino:ble-discovery")
@@ -169,7 +173,9 @@ func TestLoadDiscoveries(t *testing.T) {
169173
})
170174

171175
errs = packageManager.LoadDiscoveries()
172-
require.Len(t, errs, 0)
176+
require.Len(t, errs, 2)
177+
require.Equal(t, errs[0].Message(), "discovery not found: builtin:serial-discovery")
178+
require.Equal(t, errs[1].Message(), "discovery not found: builtin:mdns-discovery")
173179
discoveries = packageManager.DiscoveryManager().IDs()
174180
require.Len(t, discoveries, 3)
175181
require.Contains(t, discoveries, "arduino:ble-discovery")
@@ -186,7 +192,9 @@ func TestLoadDiscoveries(t *testing.T) {
186192
})
187193

188194
errs = packageManager.LoadDiscoveries()
189-
require.Len(t, errs, 0)
195+
require.Len(t, errs, 2)
196+
require.Equal(t, errs[0].Message(), "discovery not found: builtin:serial-discovery")
197+
require.Equal(t, errs[1].Message(), "discovery not found: builtin:mdns-discovery")
190198
discoveries = packageManager.DiscoveryManager().IDs()
191199
require.Len(t, discoveries, 3)
192200
require.Contains(t, discoveries, "arduino:ble-discovery")

Diff for: i18n/data/en.po

+4-4
Original file line numberDiff line numberDiff line change
@@ -2447,7 +2447,7 @@ msgstr "can't find latest release of %s"
24472447
msgid "can't find main Sketch file in %s"
24482448
msgstr "can't find main Sketch file in %s"
24492449

2450-
#: arduino/cores/packagemanager/loader.go:749
2450+
#: arduino/cores/packagemanager/loader.go:768
24512451
msgid "can't find pattern for discovery with id %s"
24522452
msgstr "can't find pattern for discovery with id %s"
24532453

@@ -2518,7 +2518,7 @@ msgstr "computing hash: %s"
25182518
msgid "could not find a valid build artifact"
25192519
msgstr "could not find a valid build artifact"
25202520

2521-
#: arduino/cores/packagemanager/loader.go:721
2521+
#: arduino/cores/packagemanager/loader.go:705
25222522
msgid "creating discovery: %s"
25232523
msgstr "creating discovery: %s"
25242524

@@ -2555,11 +2555,11 @@ msgstr "destination dir %s already exists, cannot install"
25552555
msgid "discovery %[1]s process not started: %[2]w"
25562556
msgstr "discovery %[1]s process not started: %[2]w"
25572557

2558-
#: arduino/cores/packagemanager/loader.go:710
2558+
#: arduino/cores/packagemanager/loader.go:696
25592559
msgid "discovery not found: %s"
25602560
msgstr "discovery not found: %s"
25612561

2562-
#: arduino/cores/packagemanager/loader.go:715
2562+
#: arduino/cores/packagemanager/loader.go:700
25632563
msgid "discovery not installed: %s"
25642564
msgstr "discovery not installed: %s"
25652565

Diff for: i18n/rice-box.go

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)