@@ -86,13 +86,15 @@ type indexToolReleaseFlavour struct {
8686// indexBoard represents a single Board as written in package_index.json file.
8787type 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
9293type indexBoardID struct {
9394 USB string `json:"usb"`
9495}
9596
97+ // indexHelp represents the help URL
9698type 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+
108186func (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