Some bugfix in profile parsing / Better support for platforms having … · arduino/arduino-cli@be841ff (original) (raw)
`@@ -151,18 +151,8 @@ func (index Index) MergeIntoPackages(outPackages cores.Packages) {
`
151
151
`// which in turn contains a single indexPlatformRelease converted from the one
`
152
152
`// passed as argument
`
153
153
`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
``
`-
}
`
``
154
`+
// While enumerating the dependencies we also build a set of required packages.
`
``
155
`+
requiredPackages := map[string]bool{}
`
166
156
``
167
157
`tools := []indexToolDependency{}
`
168
158
`for _, t := range pr.ToolDependencies {
`
`@@ -171,6 +161,7 @@ func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index {
`
171
161
`Name: t.ToolName,
`
172
162
`Version: t.ToolVersion,
`
173
163
` })
`
``
164
`+
requiredPackages[t.ToolPackager] = true
`
174
165
` }
`
175
166
``
176
167
`discoveries := []indexDiscoveryDependency{}
`
`@@ -179,6 +170,7 @@ func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index {
`
179
170
`Packager: d.Packager,
`
180
171
`Name: d.Name,
`
181
172
` })
`
``
173
`+
requiredPackages[d.Packager] = true
`
182
174
` }
`
183
175
``
184
176
`monitors := []indexMonitorDependency{}
`
`@@ -187,58 +179,98 @@ func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index {
`
187
179
`Packager: m.Packager,
`
188
180
`Name: m.Name,
`
189
181
` })
`
``
182
`+
requiredPackages[m.Packager] = true
`
190
183
` }
`
191
184
``
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,
`
``
185
`+
// Helper functions: those are needed to build an extract of the package_index.json
`
``
186
`+
// that is compatible with the one used by the CLI.
`
``
187
`+
// The installed.json is a simplified version of the cores.Packages
`
``
188
`+
// and therefore we need to extract the relevant information from the
`
``
189
`+
// cores.PlatformRelease and cores.Package structures.
`
``
190
`+
extractIndexPackage := func(pack *cores.Package) *indexPackage {
`
``
191
`+
packageTools := []*indexToolRelease{}
`
``
192
`+
for name, tool := range pack.Tools {
`
``
193
`+
for _, toolRelease := range tool.Releases {
`
``
194
`+
flavours := []indexToolReleaseFlavour{}
`
``
195
`+
for _, flavour := range toolRelease.Flavors {
`
``
196
`+
flavours = append(flavours, indexToolReleaseFlavour{
`
``
197
`+
OS: flavour.OS,
`
``
198
`+
URL: flavour.Resource.URL,
`
``
199
`+
ArchiveFileName: flavour.Resource.ArchiveFileName,
`
``
200
`+
Size: json.Number(fmt.Sprintf("%d", flavour.Resource.Size)),
`
``
201
`+
Checksum: flavour.Resource.Checksum,
`
``
202
`+
})
`
``
203
`+
}
`
``
204
`+
packageTools = append(packageTools, &indexToolRelease{
`
``
205
`+
Name: name,
`
``
206
`+
Version: toolRelease.Version,
`
``
207
`+
Systems: flavours,
`
203
208
` })
`
204
209
` }
`
205
``
`-
packageTools = append(packageTools, &indexToolRelease{
`
206
``
`-
Name: name,
`
207
``
`-
Version: toolRelease.Version,
`
208
``
`-
Systems: flavours,
`
209
``
`-
})
`
``
210
`+
}
`
``
211
`+
return &indexPackage{
`
``
212
`+
Name: pack.Name,
`
``
213
`+
Maintainer: pack.Maintainer,
`
``
214
`+
WebsiteURL: pack.WebsiteURL,
`
``
215
`+
URL: pack.URL,
`
``
216
`+
Email: pack.Email,
`
``
217
`+
Platforms: nil,
`
``
218
`+
Tools: packageTools,
`
``
219
`+
Help: indexHelp{Online: pack.Help.Online},
`
``
220
`+
}
`
``
221
`+
}
`
``
222
`+
extractIndexPlatformRelease := func(pr *cores.PlatformRelease) *indexPlatformRelease {
`
``
223
`+
boards := []indexBoard{}
`
``
224
`+
for _, manifest := range pr.BoardsManifest {
`
``
225
`+
board := indexBoard{
`
``
226
`+
Name: manifest.Name,
`
``
227
`+
}
`
``
228
`+
for _, id := range manifest.ID {
`
``
229
`+
if id.USB != "" {
`
``
230
`+
board.ID = []indexBoardID{{USB: id.USB}}
`
``
231
`+
}
`
``
232
`+
}
`
``
233
`+
boards = append(boards, board)
`
``
234
`+
}
`
``
235
+
``
236
`+
return &indexPlatformRelease{
`
``
237
`+
Name: pr.Name,
`
``
238
`+
Architecture: pr.Platform.Architecture,
`
``
239
`+
Version: pr.Version,
`
``
240
`+
Deprecated: pr.Deprecated,
`
``
241
`+
Category: pr.Category,
`
``
242
`+
URL: pr.Resource.URL,
`
``
243
`+
ArchiveFileName: pr.Resource.ArchiveFileName,
`
``
244
`+
Checksum: pr.Resource.Checksum,
`
``
245
`+
Size: json.Number(fmt.Sprintf("%d", pr.Resource.Size)),
`
``
246
`+
Help: indexHelp{Online: pr.Help.Online},
`
``
247
`+
Boards: boards,
`
``
248
`+
ToolDependencies: nil,
`
``
249
`+
DiscoveryDependencies: nil,
`
``
250
`+
MonitorDependencies: nil,
`
``
251
`+
}
`
``
252
`+
}
`
``
253
+
``
254
`+
mainPlatform := extractIndexPlatformRelease(pr)
`
``
255
`+
mainPlatform.ToolDependencies = tools
`
``
256
`+
mainPlatform.DiscoveryDependencies = discoveries
`
``
257
`+
mainPlatform.MonitorDependencies = monitors
`
``
258
`+
delete(requiredPackages, pr.Platform.Package.Name)
`
``
259
+
``
260
`+
mainPackage := extractIndexPackage(pr.Platform.Package)
`
``
261
`+
mainPackage.Platforms = []*indexPlatformRelease{mainPlatform}
`
``
262
+
``
263
`+
packages := []*indexPackage{mainPackage}
`
``
264
`+
for requiredPackageName := range requiredPackages {
`
``
265
`+
requiredPackage, ok := pr.Platform.Package.Packages.GetPackage(requiredPackageName)
`
``
266
`+
if ok {
`
``
267
`+
packages = append(packages, extractIndexPackage(requiredPackage))
`
210
268
` }
`
211
269
` }
`
212
270
``
213
271
`return Index{
`
214
272
`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
``
`-
},
`
``
273
`+
Packages: packages,
`
242
274
` }
`
243
275
`}
`
244
276
``