@@ -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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4