@@ -86,13 +86,15 @@ type indexToolReleaseFlavour struct {
86
86
// indexBoard represents a single Board as written in package_index.json file.
87
87
type indexBoard struct {
88
88
Name string `json:"name"`
89
- ID []indexBoardID `json:"id"`
89
+ ID []indexBoardID `json:"id,omitempty "`
90
90
}
91
91
92
+ // indexBoardID represents the ID of a single board. i.e. uno, yun, diecimila, micro and the likes
92
93
type indexBoardID struct {
93
94
USB string `json:"usb"`
94
95
}
95
96
97
+ // indexHelp represents the help URL
96
98
type indexHelp struct {
97
99
Online string `json:"online,omitempty"`
98
100
}
@@ -105,6 +107,82 @@ func (index Index) MergeIntoPackages(outPackages cores.Packages) {
105
107
}
106
108
}
107
109
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
+
108
186
func (inPackage indexPackage ) extractPackageIn (outPackages cores.Packages , trusted bool ) {
109
187
outPackage := outPackages .GetOrCreatePackage (inPackage .Name )
110
188
outPackage .Maintainer = inPackage .Maintainer
@@ -144,6 +222,7 @@ func (inPlatformRelease indexPlatformRelease) extractPlatformIn(outPackage *core
144
222
URL : inPlatformRelease .URL ,
145
223
CachePath : "packages" ,
146
224
}
225
+ outPlatformRelease .Help = cores.PlatformReleaseHelp {Online : inPlatformRelease .Help .Online }
147
226
outPlatformRelease .BoardsManifest = inPlatformRelease .extractBoardsManifest ()
148
227
if deps , err := inPlatformRelease .extractDeps (); err == nil {
149
228
outPlatformRelease .Dependencies = deps
0 commit comments