@@ -32,6 +32,7 @@ package json_package_index
32
32
import (
33
33
"arduino.cc/builder/constants"
34
34
_ "arduino.cc/builder/i18n"
35
+ "arduino.cc/builder/types"
35
36
"arduino.cc/properties"
36
37
"encoding/json"
37
38
"errors"
@@ -51,14 +52,14 @@ type core struct {
51
52
Name string `json:"archiveFileName"`
52
53
Checksum string `json:"checksum"`
53
54
destination string
55
+ installed bool
54
56
Dependencies []struct {
55
57
Packager string `json:"packager"`
56
58
Name string `json:"name"`
57
59
Version string `json:"version"`
58
60
} `json:"toolsDependencies"`
59
61
CoreDependencies []struct {
60
62
Packager string `json:"packager"`
61
- Name string `json:"name"`
62
63
} `json:"coreDependencies"`
63
64
}
64
65
@@ -98,9 +99,10 @@ var systems = map[string]string{
98
99
99
100
var globalProperties map [string ]properties.Map
100
101
101
- func PackageIndexFoldersToPropertiesMap (folders []string ) (map [string ]properties.Map , error ) {
102
+ func PackageIndexFoldersToPropertiesMap (packages * types. Packages , folders []string ) (map [string ]properties.Map , error ) {
102
103
103
104
var paths []string
105
+
104
106
for _ , folder := range folders {
105
107
folder , err := filepath .Abs (folder )
106
108
if err != nil {
@@ -113,15 +115,15 @@ func PackageIndexFoldersToPropertiesMap(folders []string) (map[string]properties
113
115
}
114
116
}
115
117
}
116
- return PackageIndexesToPropertiesMap (paths )
118
+ return PackageIndexesToPropertiesMap (packages , paths )
117
119
}
118
120
119
- func PackageIndexesToPropertiesMap (urls []string ) (map [string ]properties.Map , error ) {
121
+ func PackageIndexesToPropertiesMap (packages * types. Packages , urls []string ) (map [string ]properties.Map , error ) {
120
122
121
123
globalProperties = make (map [string ]properties.Map )
122
124
coreDependencyMap := make (map [string ]string )
123
125
124
- data , err := PackageIndexesToGlobalIndex (urls )
126
+ data , err := PackageIndexesToGlobalIndex (packages , urls )
125
127
126
128
for _ , p := range data .Packages {
127
129
for _ , a := range p .Platforms {
@@ -136,32 +138,32 @@ func PackageIndexesToPropertiesMap(urls []string) (map[string]properties.Map, er
136
138
}
137
139
for _ , coredep := range a .CoreDependencies {
138
140
// inherit all the tools from latest coredep
139
- version , err := findLatestCore (data , coredep .Packager , coredep .Name )
140
141
if err == nil {
141
142
coreDependencyMap [p .Name + ":" + a .Architecture + ":" + a .Version ] =
142
- coredep .Packager + ":" + coredep . Name + ":" + version
143
+ coredep .Packager + ":" + a . Architecture
143
144
}
144
145
}
145
146
globalProperties [p .Name + ":" + a .Architecture + ":" + a .Version ] = localProperties .Clone ()
146
147
}
147
148
}
148
149
149
150
for idx , parentCore := range coreDependencyMap {
150
- if (globalProperties [parentCore ]) != nil {
151
- globalProperties [idx ] = globalProperties [parentCore ].Clone ()
151
+ version , err := findLatestInstalledCore (data , strings .Split (parentCore , ":" )[0 ], strings .Split (parentCore , ":" )[1 ])
152
+ if err == nil {
153
+ globalProperties [idx ] = globalProperties [parentCore + ":" + version ].Clone ()
152
154
}
153
155
}
154
156
155
157
return globalProperties , err
156
158
}
157
159
158
- func findLatestCore (data index , Packager string , Name string ) (string , error ) {
160
+ func findLatestInstalledCore (data index , Packager string , Name string ) (string , error ) {
159
161
latest , _ := semver .Make ("0.0.0" )
160
162
for _ , p := range data .Packages {
161
163
for _ , a := range p .Platforms {
162
164
if p .Name == Packager && a .Architecture == Name {
163
165
test , _ := semver .Make (a .Version )
164
- if test .GT (latest ) {
166
+ if test .GT (latest ) && a . installed {
165
167
latest = test
166
168
}
167
169
}
@@ -177,9 +179,9 @@ func findLatestCore(data index, Packager string, Name string) (string, error) {
177
179
return latest .String (), err
178
180
}
179
181
180
- func PackageIndexesToGlobalIndex (urls []string ) (index , error ) {
182
+ func PackageIndexesToGlobalIndex (packages * types. Packages , urls []string ) (index , error ) {
181
183
182
- // firststub of arduino-pdpm
184
+ // first stub of arduino-pdpm
183
185
var data index
184
186
var err error
185
187
@@ -210,5 +212,29 @@ func PackageIndexesToGlobalIndex(urls []string) (index, error) {
210
212
data .Packages = append (data .Packages , entry )
211
213
}
212
214
}
215
+
216
+ for i , p := range data .Packages {
217
+ for j , a := range p .Platforms {
218
+ if packages != nil && packages .Packages [p .Name ] != nil &&
219
+ packages .Packages [p .Name ].Platforms [a .Architecture ] != nil &&
220
+ packages .Packages [p .Name ].Platforms [a .Architecture ].Properties ["version" ] == a .Version {
221
+ data .Packages [i ].Platforms [j ].installed = true
222
+ }
223
+ }
224
+ }
225
+
213
226
return data , err
214
227
}
228
+
229
+ func CompareVersions (fv string , sv string ) int {
230
+ v1 , _ := semver .Make (fv )
231
+ v2 , _ := semver .Make (sv )
232
+ if v1 .EQ (v2 ) {
233
+ return 0
234
+ }
235
+ if v1 .GT (v2 ) {
236
+ return 1
237
+ } else {
238
+ return - 1
239
+ }
240
+ }
0 commit comments