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