Skip to content

Commit 211d123

Browse files
committed
Slightly refactored IndexFromPlatformRelease function
This will help to simplify the next commits.
1 parent ce102cc commit 211d123

File tree

1 file changed

+73
-56
lines changed
  • internal/arduino/cores/packageindex

1 file changed

+73
-56
lines changed

internal/arduino/cores/packageindex/index.go

Lines changed: 73 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -151,19 +151,6 @@ func (index Index) MergeIntoPackages(outPackages cores.Packages) {
151151
// which in turn contains a single indexPlatformRelease converted from the one
152152
// passed as argument
153153
func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index {
154-
boards := []indexBoard{}
155-
for _, manifest := range pr.BoardsManifest {
156-
board := indexBoard{
157-
Name: manifest.Name,
158-
}
159-
for _, id := range manifest.ID {
160-
if id.USB != "" {
161-
board.ID = []indexBoardID{{USB: id.USB}}
162-
}
163-
}
164-
boards = append(boards, board)
165-
}
166-
167154
tools := []indexToolDependency{}
168155
for _, t := range pr.ToolDependencies {
169156
tools = append(tools, indexToolDependency{
@@ -189,56 +176,86 @@ func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index {
189176
})
190177
}
191178

192-
packageTools := []*indexToolRelease{}
193-
for name, tool := range pr.Platform.Package.Tools {
194-
for _, toolRelease := range tool.Releases {
195-
flavours := []indexToolReleaseFlavour{}
196-
for _, flavour := range toolRelease.Flavors {
197-
flavours = append(flavours, indexToolReleaseFlavour{
198-
OS: flavour.OS,
199-
URL: flavour.Resource.URL,
200-
ArchiveFileName: flavour.Resource.ArchiveFileName,
201-
Size: json.Number(fmt.Sprintf("%d", flavour.Resource.Size)),
202-
Checksum: flavour.Resource.Checksum,
179+
// Helper functions: those are needed to build an extract of the package_index.json
180+
// that is compatible with the one used by the CLI.
181+
// The installed.json is a simplified version of the cores.Packages
182+
// and therefore we need to extract the relevant information from the
183+
// cores.PlatformRelease and cores.Package structures.
184+
extractIndexPackage := func(pack *cores.Package) *indexPackage {
185+
packageTools := []*indexToolRelease{}
186+
for name, tool := range pack.Tools {
187+
for _, toolRelease := range tool.Releases {
188+
flavours := []indexToolReleaseFlavour{}
189+
for _, flavour := range toolRelease.Flavors {
190+
flavours = append(flavours, indexToolReleaseFlavour{
191+
OS: flavour.OS,
192+
URL: flavour.Resource.URL,
193+
ArchiveFileName: flavour.Resource.ArchiveFileName,
194+
Size: json.Number(fmt.Sprintf("%d", flavour.Resource.Size)),
195+
Checksum: flavour.Resource.Checksum,
196+
})
197+
}
198+
packageTools = append(packageTools, &indexToolRelease{
199+
Name: name,
200+
Version: toolRelease.Version,
201+
Systems: flavours,
203202
})
204203
}
205-
packageTools = append(packageTools, &indexToolRelease{
206-
Name: name,
207-
Version: toolRelease.Version,
208-
Systems: flavours,
209-
})
204+
}
205+
return &indexPackage{
206+
Name: pack.Name,
207+
Maintainer: pack.Maintainer,
208+
WebsiteURL: pack.WebsiteURL,
209+
URL: pack.URL,
210+
Email: pack.Email,
211+
Platforms: nil,
212+
Tools: packageTools,
213+
Help: indexHelp{Online: pack.Help.Online},
214+
}
215+
}
216+
extractIndexPlatformRelease := func(pr *cores.PlatformRelease) *indexPlatformRelease {
217+
boards := []indexBoard{}
218+
for _, manifest := range pr.BoardsManifest {
219+
board := indexBoard{
220+
Name: manifest.Name,
221+
}
222+
for _, id := range manifest.ID {
223+
if id.USB != "" {
224+
board.ID = []indexBoardID{{USB: id.USB}}
225+
}
226+
}
227+
boards = append(boards, board)
228+
}
229+
230+
return &indexPlatformRelease{
231+
Name: pr.Name,
232+
Architecture: pr.Platform.Architecture,
233+
Version: pr.Version,
234+
Deprecated: pr.Deprecated,
235+
Category: pr.Category,
236+
URL: pr.Resource.URL,
237+
ArchiveFileName: pr.Resource.ArchiveFileName,
238+
Checksum: pr.Resource.Checksum,
239+
Size: json.Number(fmt.Sprintf("%d", pr.Resource.Size)),
240+
Help: indexHelp{Online: pr.Help.Online},
241+
Boards: boards,
242+
ToolDependencies: nil,
243+
DiscoveryDependencies: nil,
244+
MonitorDependencies: nil,
210245
}
211246
}
212247

248+
mainPlatform := extractIndexPlatformRelease(pr)
249+
mainPlatform.ToolDependencies = tools
250+
mainPlatform.DiscoveryDependencies = discoveries
251+
mainPlatform.MonitorDependencies = monitors
252+
253+
mainPackage := extractIndexPackage(pr.Platform.Package)
254+
mainPackage.Platforms = []*indexPlatformRelease{mainPlatform}
255+
213256
return Index{
214257
IsTrusted: pr.IsTrusted,
215-
Packages: []*indexPackage{
216-
{
217-
Name: pr.Platform.Package.Name,
218-
Maintainer: pr.Platform.Package.Maintainer,
219-
WebsiteURL: pr.Platform.Package.WebsiteURL,
220-
URL: pr.Platform.Package.URL,
221-
Email: pr.Platform.Package.Email,
222-
Platforms: []*indexPlatformRelease{{
223-
Name: pr.Name,
224-
Architecture: pr.Platform.Architecture,
225-
Version: pr.Version,
226-
Deprecated: pr.Deprecated,
227-
Category: pr.Category,
228-
URL: pr.Resource.URL,
229-
ArchiveFileName: pr.Resource.ArchiveFileName,
230-
Checksum: pr.Resource.Checksum,
231-
Size: json.Number(fmt.Sprintf("%d", pr.Resource.Size)),
232-
Boards: boards,
233-
Help: indexHelp{Online: pr.Help.Online},
234-
ToolDependencies: tools,
235-
DiscoveryDependencies: discoveries,
236-
MonitorDependencies: monitors,
237-
}},
238-
Tools: packageTools,
239-
Help: indexHelp{Online: pr.Platform.Package.Help.Online},
240-
},
241-
},
258+
Packages: []*indexPackage{mainPackage},
242259
}
243260
}
244261

0 commit comments

Comments
 (0)