Skip to content

Commit 8bfdfc3

Browse files
committed
Reverted packageindex structs visibility
1 parent f2bd18a commit 8bfdfc3

File tree

4 files changed

+2060
-219
lines changed

4 files changed

+2060
-219
lines changed

arduino/cores/packageindex/index.go

+108-32
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,24 @@ import (
2929

3030
// Index represents Cores and Tools struct as seen from package_index.json file.
3131
type Index struct {
32-
Packages []*IndexPackage `json:"packages"`
32+
Packages []*indexPackage `json:"packages"`
3333
IsTrusted bool
3434
}
3535

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 {
3838
Name string `json:"name,required"`
3939
Maintainer string `json:"maintainer,required"`
4040
WebsiteURL string `json:"websiteUrl"`
4141
URL string `json:"Url"`
4242
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"`
4646
}
4747

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 {
5050
Name string `json:"name,required"`
5151
Architecture string `json:"architecture"`
5252
Version *semver.Version `json:"version,required"`
@@ -55,47 +55,47 @@ type IndexPlatformRelease struct {
5555
ArchiveFileName string `json:"archiveFileName,required"`
5656
Checksum string `json:"checksum,required"`
5757
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"`
6161
}
6262

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 {
6565
Packager string `json:"packager,required"`
6666
Name string `json:"name,required"`
6767
Version *semver.RelaxedVersion `json:"version,required"`
6868
}
6969

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 {
7272
Name string `json:"name,required"`
7373
Version *semver.RelaxedVersion `json:"version,required"`
74-
Systems []IndexToolReleaseFlavour `json:"systems,required"`
74+
Systems []indexToolReleaseFlavour `json:"systems,required"`
7575
}
7676

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 {
7979
OS string `json:"host,required"`
8080
URL string `json:"url,required"`
8181
ArchiveFileName string `json:"archiveFileName,required"`
8282
Size json.Number `json:"size,required"`
8383
Checksum string `json:"checksum,required"`
8484
}
8585

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 {
8888
Name string `json:"name"`
89-
ID []IndexBoardID `json:"id,omitempty"`
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
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 {
9494
USB string `json:"usb"`
9595
}
9696

97-
// IndexHelp represents the help URL
98-
type IndexHelp struct {
97+
// indexHelp represents the help URL
98+
type indexHelp struct {
9999
Online string `json:"online,omitempty"`
100100
}
101101

@@ -107,7 +107,83 @@ func (index Index) MergeIntoPackages(outPackages cores.Packages) {
107107
}
108108
}
109109

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) {
111187
outPackage := outPackages.GetOrCreatePackage(inPackage.Name)
112188
outPackage.Maintainer = inPackage.Maintainer
113189
outPackage.WebsiteURL = inPackage.WebsiteURL
@@ -124,7 +200,7 @@ func (inPackage IndexPackage) extractPackageIn(outPackages cores.Packages, trust
124200
}
125201
}
126202

127-
func (inPlatformRelease IndexPlatformRelease) extractPlatformIn(outPackage *cores.Package, trusted bool) error {
203+
func (inPlatformRelease indexPlatformRelease) extractPlatformIn(outPackage *cores.Package, trusted bool) error {
128204
outPlatform := outPackage.GetOrCreatePlatform(inPlatformRelease.Architecture)
129205
// FIXME: shall we use the Name and Category of the latest release? or maybe move Name and Category in PlatformRelease?
130206
outPlatform.Name = inPlatformRelease.Name
@@ -156,7 +232,7 @@ func (inPlatformRelease IndexPlatformRelease) extractPlatformIn(outPackage *core
156232
return nil
157233
}
158234

159-
func (inPlatformRelease IndexPlatformRelease) extractDeps() (cores.ToolDependencies, error) {
235+
func (inPlatformRelease indexPlatformRelease) extractDeps() (cores.ToolDependencies, error) {
160236
ret := make(cores.ToolDependencies, len(inPlatformRelease.ToolDependencies))
161237
for i, dep := range inPlatformRelease.ToolDependencies {
162238
ret[i] = &cores.ToolDependency{
@@ -168,7 +244,7 @@ func (inPlatformRelease IndexPlatformRelease) extractDeps() (cores.ToolDependenc
168244
return ret, nil
169245
}
170246

171-
func (inPlatformRelease IndexPlatformRelease) extractBoardsManifest() []*cores.BoardManifest {
247+
func (inPlatformRelease indexPlatformRelease) extractBoardsManifest() []*cores.BoardManifest {
172248
boards := make([]*cores.BoardManifest, len(inPlatformRelease.Boards))
173249
for i, board := range inPlatformRelease.Boards {
174250
manifest := &cores.BoardManifest{Name: board.Name}
@@ -182,15 +258,15 @@ func (inPlatformRelease IndexPlatformRelease) extractBoardsManifest() []*cores.B
182258
return boards
183259
}
184260

185-
func (inToolRelease IndexToolRelease) extractToolIn(outPackage *cores.Package) {
261+
func (inToolRelease indexToolRelease) extractToolIn(outPackage *cores.Package) {
186262
outTool := outPackage.GetOrCreateTool(inToolRelease.Name)
187263

188264
outToolRelease := outTool.GetOrCreateRelease(inToolRelease.Version)
189265
outToolRelease.Flavors = inToolRelease.extractFlavours()
190266
}
191267

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 {
194270
ret := make([]*cores.Flavor, len(inToolRelease.Systems))
195271
for i, flavour := range inToolRelease.Systems {
196272
size, _ := flavour.Size.Int64()

arduino/cores/packagemanager/install_uninstall.go

+1-80
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
"encoding/json"
2020
"fmt"
2121
"runtime"
22-
"strconv"
2322

2423
"github.com/arduino/arduino-cli/arduino/cores"
2524
"github.com/arduino/arduino-cli/arduino/cores/packageindex"
@@ -48,86 +47,8 @@ func (pm *PackageManager) InstallPlatform(platformRelease *cores.PlatformRelease
4847
return nil
4948
}
5049

51-
func platformReleaseToIndex(pr *cores.PlatformRelease) packageindex.IndexPlatformRelease {
52-
boards := []packageindex.IndexBoard{}
53-
for _, manifest := range pr.BoardsManifest {
54-
board := packageindex.IndexBoard{
55-
Name: manifest.Name,
56-
}
57-
for _, id := range manifest.ID {
58-
if id.USB != "" {
59-
board.ID = []packageindex.IndexBoardID{{USB: id.USB}}
60-
}
61-
}
62-
boards = append(boards, board)
63-
}
64-
65-
tools := []packageindex.IndexToolDependency{}
66-
for _, t := range pr.Dependencies {
67-
tools = append(tools, packageindex.IndexToolDependency{
68-
Packager: t.ToolPackager,
69-
Name: t.ToolName,
70-
Version: t.ToolVersion,
71-
})
72-
}
73-
return packageindex.IndexPlatformRelease{
74-
Name: pr.Platform.Name,
75-
Architecture: pr.Platform.Architecture,
76-
Version: pr.Version,
77-
Category: pr.Platform.Category,
78-
URL: pr.Resource.URL,
79-
ArchiveFileName: pr.Resource.ArchiveFileName,
80-
Checksum: pr.Resource.Checksum,
81-
Size: json.Number(strconv.FormatInt(pr.Resource.Size, 10)),
82-
Boards: boards,
83-
Help: packageindex.IndexHelp{Online: pr.Help.Online},
84-
ToolDependencies: tools,
85-
}
86-
}
87-
88-
func packageToolsToIndex(tools map[string]*cores.Tool) []*packageindex.IndexToolRelease {
89-
ret := []*packageindex.IndexToolRelease{}
90-
for name, tool := range tools {
91-
for _, toolRelease := range tool.Releases {
92-
flavours := []packageindex.IndexToolReleaseFlavour{}
93-
for _, flavour := range toolRelease.Flavors {
94-
flavours = append(flavours, packageindex.IndexToolReleaseFlavour{
95-
OS: flavour.OS,
96-
URL: flavour.Resource.URL,
97-
ArchiveFileName: flavour.Resource.ArchiveFileName,
98-
Size: json.Number(strconv.FormatInt(flavour.Resource.Size, 10)),
99-
Checksum: flavour.Resource.Checksum,
100-
})
101-
}
102-
ret = append(ret, &packageindex.IndexToolRelease{
103-
Name: name,
104-
Version: toolRelease.Version,
105-
Systems: flavours,
106-
})
107-
}
108-
}
109-
return ret
110-
}
111-
11250
func (pm *PackageManager) cacheInstalledJSON(platformRelease *cores.PlatformRelease) error {
113-
indexPlatformRelease := platformReleaseToIndex(platformRelease)
114-
indexPackageToolReleases := packageToolsToIndex(platformRelease.Platform.Package.Tools)
115-
116-
index := packageindex.Index{
117-
IsTrusted: platformRelease.IsTrusted,
118-
Packages: []*packageindex.IndexPackage{
119-
{
120-
Name: platformRelease.Platform.Package.Name,
121-
Maintainer: platformRelease.Platform.Package.Maintainer,
122-
WebsiteURL: platformRelease.Platform.Package.WebsiteURL,
123-
URL: platformRelease.Platform.Package.URL,
124-
Email: platformRelease.Platform.Package.Email,
125-
Platforms: []*packageindex.IndexPlatformRelease{&indexPlatformRelease},
126-
Tools: indexPackageToolReleases,
127-
Help: packageindex.IndexHelp{Online: platformRelease.Platform.Package.Help.Online},
128-
},
129-
},
130-
}
51+
index := packageindex.IndexFromPlatformRelease(platformRelease)
13152
platformJSON, err := json.MarshalIndent(index, "", " ")
13253
if err != nil {
13354
return err

0 commit comments

Comments
 (0)