@@ -29,24 +29,24 @@ import (
29
29
30
30
// Index represents Cores and Tools struct as seen from package_index.json file.
31
31
type Index struct {
32
- Packages []* IndexPackage `json:"packages"`
32
+ Packages []* indexPackage `json:"packages"`
33
33
IsTrusted bool
34
34
}
35
35
36
- // IndexPackage represents a single entry from package_index.json file.
37
- type IndexPackage struct {
36
+ // indexPackage represents a single entry from package_index.json file.
37
+ type indexPackage struct {
38
38
Name string `json:"name,required"`
39
39
Maintainer string `json:"maintainer,required"`
40
40
WebsiteURL string `json:"websiteUrl"`
41
41
URL string `json:"Url"`
42
42
Email string `json:"email"`
43
- Platforms []* IndexPlatformRelease `json:"platforms,required"`
44
- Tools []* IndexToolRelease `json:"tools,required"`
45
- Help IndexHelp `json:"help,omitempty"`
43
+ Platforms []* indexPlatformRelease `json:"platforms,required"`
44
+ Tools []* indexToolRelease `json:"tools,required"`
45
+ Help indexHelp `json:"help,omitempty"`
46
46
}
47
47
48
- // IndexPlatformRelease represents a single Core Platform from package_index.json file.
49
- type IndexPlatformRelease struct {
48
+ // indexPlatformRelease represents a single Core Platform from package_index.json file.
49
+ type indexPlatformRelease struct {
50
50
Name string `json:"name,required"`
51
51
Architecture string `json:"architecture"`
52
52
Version * semver.Version `json:"version,required"`
@@ -55,47 +55,47 @@ type IndexPlatformRelease struct {
55
55
ArchiveFileName string `json:"archiveFileName,required"`
56
56
Checksum string `json:"checksum,required"`
57
57
Size json.Number `json:"size,required"`
58
- Boards []IndexBoard `json:"boards"`
59
- Help IndexHelp `json:"help,omitempty"`
60
- ToolDependencies []IndexToolDependency `json:"toolsDependencies,required"`
58
+ Boards []indexBoard `json:"boards"`
59
+ Help indexHelp `json:"help,omitempty"`
60
+ ToolDependencies []indexToolDependency `json:"toolsDependencies,required"`
61
61
}
62
62
63
- // IndexToolDependency represents a single dependency of a core from a tool.
64
- type IndexToolDependency struct {
63
+ // indexToolDependency represents a single dependency of a core from a tool.
64
+ type indexToolDependency struct {
65
65
Packager string `json:"packager,required"`
66
66
Name string `json:"name,required"`
67
67
Version * semver.RelaxedVersion `json:"version,required"`
68
68
}
69
69
70
- // IndexToolRelease represents a single Tool from package_index.json file.
71
- type IndexToolRelease struct {
70
+ // indexToolRelease represents a single Tool from package_index.json file.
71
+ type indexToolRelease struct {
72
72
Name string `json:"name,required"`
73
73
Version * semver.RelaxedVersion `json:"version,required"`
74
- Systems []IndexToolReleaseFlavour `json:"systems,required"`
74
+ Systems []indexToolReleaseFlavour `json:"systems,required"`
75
75
}
76
76
77
- // IndexToolReleaseFlavour represents a single tool flavor in the package_index.json file.
78
- type IndexToolReleaseFlavour struct {
77
+ // indexToolReleaseFlavour represents a single tool flavor in the package_index.json file.
78
+ type indexToolReleaseFlavour struct {
79
79
OS string `json:"host,required"`
80
80
URL string `json:"url,required"`
81
81
ArchiveFileName string `json:"archiveFileName,required"`
82
82
Size json.Number `json:"size,required"`
83
83
Checksum string `json:"checksum,required"`
84
84
}
85
85
86
- // IndexBoard represents a single Board as written in package_index.json file.
87
- type IndexBoard struct {
86
+ // indexBoard represents a single Board as written in package_index.json file.
87
+ type indexBoard struct {
88
88
Name string `json:"name"`
89
- ID []IndexBoardID `json:"id,omitempty"`
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
93
- type IndexBoardID struct {
92
+ // indexBoardID represents the ID of a single board. i.e. uno, yun, diecimila, micro and the likes
93
+ type indexBoardID struct {
94
94
USB string `json:"usb"`
95
95
}
96
96
97
- // IndexHelp represents the help URL
98
- type IndexHelp struct {
97
+ // indexHelp represents the help URL
98
+ type indexHelp struct {
99
99
Online string `json:"online,omitempty"`
100
100
}
101
101
@@ -107,7 +107,83 @@ func (index Index) MergeIntoPackages(outPackages cores.Packages) {
107
107
}
108
108
}
109
109
110
- func (inPackage IndexPackage ) extractPackageIn (outPackages cores.Packages , trusted bool ) {
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
+
186
+ func (inPackage indexPackage ) extractPackageIn (outPackages cores.Packages , trusted bool ) {
111
187
outPackage := outPackages .GetOrCreatePackage (inPackage .Name )
112
188
outPackage .Maintainer = inPackage .Maintainer
113
189
outPackage .WebsiteURL = inPackage .WebsiteURL
@@ -124,7 +200,7 @@ func (inPackage IndexPackage) extractPackageIn(outPackages cores.Packages, trust
124
200
}
125
201
}
126
202
127
- func (inPlatformRelease IndexPlatformRelease ) extractPlatformIn (outPackage * cores.Package , trusted bool ) error {
203
+ func (inPlatformRelease indexPlatformRelease ) extractPlatformIn (outPackage * cores.Package , trusted bool ) error {
128
204
outPlatform := outPackage .GetOrCreatePlatform (inPlatformRelease .Architecture )
129
205
// FIXME: shall we use the Name and Category of the latest release? or maybe move Name and Category in PlatformRelease?
130
206
outPlatform .Name = inPlatformRelease .Name
@@ -156,7 +232,7 @@ func (inPlatformRelease IndexPlatformRelease) extractPlatformIn(outPackage *core
156
232
return nil
157
233
}
158
234
159
- func (inPlatformRelease IndexPlatformRelease ) extractDeps () (cores.ToolDependencies , error ) {
235
+ func (inPlatformRelease indexPlatformRelease ) extractDeps () (cores.ToolDependencies , error ) {
160
236
ret := make (cores.ToolDependencies , len (inPlatformRelease .ToolDependencies ))
161
237
for i , dep := range inPlatformRelease .ToolDependencies {
162
238
ret [i ] = & cores.ToolDependency {
@@ -168,7 +244,7 @@ func (inPlatformRelease IndexPlatformRelease) extractDeps() (cores.ToolDependenc
168
244
return ret , nil
169
245
}
170
246
171
- func (inPlatformRelease IndexPlatformRelease ) extractBoardsManifest () []* cores.BoardManifest {
247
+ func (inPlatformRelease indexPlatformRelease ) extractBoardsManifest () []* cores.BoardManifest {
172
248
boards := make ([]* cores.BoardManifest , len (inPlatformRelease .Boards ))
173
249
for i , board := range inPlatformRelease .Boards {
174
250
manifest := & cores.BoardManifest {Name : board .Name }
@@ -182,15 +258,15 @@ func (inPlatformRelease IndexPlatformRelease) extractBoardsManifest() []*cores.B
182
258
return boards
183
259
}
184
260
185
- func (inToolRelease IndexToolRelease ) extractToolIn (outPackage * cores.Package ) {
261
+ func (inToolRelease indexToolRelease ) extractToolIn (outPackage * cores.Package ) {
186
262
outTool := outPackage .GetOrCreateTool (inToolRelease .Name )
187
263
188
264
outToolRelease := outTool .GetOrCreateRelease (inToolRelease .Version )
189
265
outToolRelease .Flavors = inToolRelease .extractFlavours ()
190
266
}
191
267
192
- // extractFlavours extracts a map[OS]Flavor object from an IndexToolRelease entry.
193
- func (inToolRelease IndexToolRelease ) extractFlavours () []* cores.Flavor {
268
+ // extractFlavours extracts a map[OS]Flavor object from an indexToolRelease entry.
269
+ func (inToolRelease indexToolRelease ) extractFlavours () []* cores.Flavor {
194
270
ret := make ([]* cores.Flavor , len (inToolRelease .Systems ))
195
271
for i , flavour := range inToolRelease .Systems {
196
272
size , _ := flavour .Size .Int64 ()
0 commit comments