Skip to content

Commit 03b7738

Browse files
authored
Enhances tracking of installed platforms (#998)
1 parent 4444653 commit 03b7738

File tree

11 files changed

+4926
-5780
lines changed

11 files changed

+4926
-5780
lines changed

arduino/cores/cores.go

+6
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,18 @@ type Platform struct {
3535
Package *Package `json:"-"`
3636
}
3737

38+
// PlatformReleaseHelp represents the help URL for this Platform release
39+
type PlatformReleaseHelp struct {
40+
Online string `json:"-"`
41+
}
42+
3843
// PlatformRelease represents a release of a plaform package.
3944
type PlatformRelease struct {
4045
Resource *resources.DownloadResource
4146
Version *semver.Version
4247
BoardsManifest []*BoardManifest
4348
Dependencies ToolDependencies // The Dependency entries to load tools.
49+
Help PlatformReleaseHelp `json:"-"`
4450
Platform *Platform `json:"-"`
4551
Properties *properties.Map `json:"-"`
4652
Boards map[string]*Board `json:"-"`

arduino/cores/packageindex/index.go

+80-1
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,15 @@ type indexToolReleaseFlavour struct {
8686
// indexBoard represents a single Board as written in package_index.json file.
8787
type indexBoard struct {
8888
Name string `json:"name"`
89-
ID []indexBoardID `json:"id"`
89+
ID []indexBoardID `json:"id,omitempty"`
9090
}
9191

92+
// indexBoardID represents the ID of a single board. i.e. uno, yun, diecimila, micro and the likes
9293
type indexBoardID struct {
9394
USB string `json:"usb"`
9495
}
9596

97+
// indexHelp represents the help URL
9698
type indexHelp struct {
9799
Online string `json:"online,omitempty"`
98100
}
@@ -105,6 +107,82 @@ func (index Index) MergeIntoPackages(outPackages cores.Packages) {
105107
}
106108
}
107109

110+
// IndexFromPlatformRelease creates an Index that contains a single indexPackage
111+
// which in turn contains a single indexPlatformRelease converted from the one
112+
// passed as argument
113+
func IndexFromPlatformRelease(pr *cores.PlatformRelease) Index {
114+
boards := []indexBoard{}
115+
for _, manifest := range pr.BoardsManifest {
116+
board := indexBoard{
117+
Name: manifest.Name,
118+
}
119+
for _, id := range manifest.ID {
120+
if id.USB != "" {
121+
board.ID = []indexBoardID{{USB: id.USB}}
122+
}
123+
}
124+
boards = append(boards, board)
125+
}
126+
127+
tools := []indexToolDependency{}
128+
for _, t := range pr.Dependencies {
129+
tools = append(tools, indexToolDependency{
130+
Packager: t.ToolPackager,
131+
Name: t.ToolName,
132+
Version: t.ToolVersion,
133+
})
134+
}
135+
136+
packageTools := []*indexToolRelease{}
137+
for name, tool := range pr.Platform.Package.Tools {
138+
for _, toolRelease := range tool.Releases {
139+
flavours := []indexToolReleaseFlavour{}
140+
for _, flavour := range toolRelease.Flavors {
141+
flavours = append(flavours, indexToolReleaseFlavour{
142+
OS: flavour.OS,
143+
URL: flavour.Resource.URL,
144+
ArchiveFileName: flavour.Resource.ArchiveFileName,
145+
Size: json.Number(fmt.Sprintf("%d", flavour.Resource.Size)),
146+
Checksum: flavour.Resource.Checksum,
147+
})
148+
}
149+
packageTools = append(packageTools, &indexToolRelease{
150+
Name: name,
151+
Version: toolRelease.Version,
152+
Systems: flavours,
153+
})
154+
}
155+
}
156+
157+
return Index{
158+
IsTrusted: pr.IsTrusted,
159+
Packages: []*indexPackage{
160+
{
161+
Name: pr.Platform.Package.Name,
162+
Maintainer: pr.Platform.Package.Maintainer,
163+
WebsiteURL: pr.Platform.Package.WebsiteURL,
164+
URL: pr.Platform.Package.URL,
165+
Email: pr.Platform.Package.Email,
166+
Platforms: []*indexPlatformRelease{{
167+
Name: pr.Platform.Name,
168+
Architecture: pr.Platform.Architecture,
169+
Version: pr.Version,
170+
Category: pr.Platform.Category,
171+
URL: pr.Resource.URL,
172+
ArchiveFileName: pr.Resource.ArchiveFileName,
173+
Checksum: pr.Resource.Checksum,
174+
Size: json.Number(fmt.Sprintf("%d", pr.Resource.Size)),
175+
Boards: boards,
176+
Help: indexHelp{Online: pr.Help.Online},
177+
ToolDependencies: tools,
178+
}},
179+
Tools: packageTools,
180+
Help: indexHelp{Online: pr.Platform.Package.Help.Online},
181+
},
182+
},
183+
}
184+
}
185+
108186
func (inPackage indexPackage) extractPackageIn(outPackages cores.Packages, trusted bool) {
109187
outPackage := outPackages.GetOrCreatePackage(inPackage.Name)
110188
outPackage.Maintainer = inPackage.Maintainer
@@ -144,6 +222,7 @@ func (inPlatformRelease indexPlatformRelease) extractPlatformIn(outPackage *core
144222
URL: inPlatformRelease.URL,
145223
CachePath: "packages",
146224
}
225+
outPlatformRelease.Help = cores.PlatformReleaseHelp{Online: inPlatformRelease.Help.Online}
147226
outPlatformRelease.BoardsManifest = inPlatformRelease.extractBoardsManifest()
148227
if deps, err := inPlatformRelease.extractDeps(); err == nil {
149228
outPlatformRelease.Dependencies = deps

0 commit comments

Comments
 (0)