Skip to content

Commit cb1d520

Browse files
facchinmcmaglie
authored andcommitted
[RFC] test coreDependencies json property
Inherits all tools from latest version of a specific core "coreDependencies": [ { "packager": "arduino", "name": "avr" } ]
1 parent dd7df21 commit cb1d520

File tree

3 files changed

+159
-0
lines changed

3 files changed

+159
-0
lines changed

json_package_index/package_index.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ package json_package_index
3131

3232
import (
3333
"encoding/json"
34+
"errors"
35+
"github.com/blang/semver"
3436
"io/ioutil"
3537
"net/http"
3638
"os"
@@ -55,6 +57,10 @@ type core struct {
5557
Name string `json:"name"`
5658
Version string `json:"version"`
5759
} `json:"toolsDependencies"`
60+
CoreDependencies []struct {
61+
Packager string `json:"packager"`
62+
Name string `json:"name"`
63+
} `json:"coreDependencies"`
5864
}
5965

6066
type tool struct {
@@ -114,6 +120,7 @@ func PackageIndexFoldersToPropertiesMap(folders []string) (map[string]properties
114120
func PackageIndexesToPropertiesMap(urls []string) (map[string]properties.Map, error) {
115121

116122
globalProperties = make(map[string]properties.Map)
123+
coreDependencyMap := make(map[string]string)
117124

118125
data, err := PackageIndexesToGlobalIndex(urls)
119126

@@ -128,12 +135,49 @@ func PackageIndexesToPropertiesMap(urls []string) (map[string]properties.Map, er
128135
"{" + constants.BUILD_PROPERTIES_RUNTIME_TOOLS_PREFIX + dep.Name + "-" + dep.Packager + "-" + dep.Version + constants.BUILD_PROPERTIES_RUNTIME_TOOLS_SUFFIX + "}"
129136
}
130137
}
138+
for _, coredep := range a.CoreDependencies {
139+
// inherit all the tools from latest coredep
140+
version, err := findLatestCore(data, coredep.Packager, coredep.Name)
141+
if err == nil {
142+
coreDependencyMap[p.Name+":"+a.Architecture+":"+a.Version] =
143+
coredep.Packager + ":" + coredep.Name + ":" + version
144+
}
145+
}
131146
globalProperties[p.Name+":"+a.Architecture+":"+a.Version] = localProperties.Clone()
132147
}
133148
}
149+
150+
for idx, parentCore := range coreDependencyMap {
151+
if (globalProperties[parentCore]) != nil {
152+
globalProperties[idx] = globalProperties[parentCore].Clone()
153+
}
154+
}
155+
134156
return globalProperties, err
135157
}
136158

159+
func findLatestCore(data index, Packager string, Name string) (string, error) {
160+
latest, _ := semver.Make("0.0.0")
161+
for _, p := range data.Packages {
162+
for _, a := range p.Platforms {
163+
if p.Name == Packager && a.Architecture == Name {
164+
test, _ := semver.Make(a.Version)
165+
if test.GT(latest) {
166+
latest = test
167+
}
168+
}
169+
}
170+
}
171+
var err error
172+
test, _ := semver.Make("0.0.0")
173+
if latest.EQ(test) {
174+
err = errors.New("No such core available")
175+
} else {
176+
err = nil
177+
}
178+
return latest.String(), err
179+
}
180+
137181
func PackageIndexesToGlobalIndex(urls []string) (index, error) {
138182

139183
// firststub of arduino-pdpm

json_package_index/package_index_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,13 @@ func TestPackageIndexFoldersToPropertiesMap(t *testing.T) {
5353

5454
require.Equal(t, "{runtime.tools.avr-gcc-4.9.2-atmel3.5.3-arduino2.path}", p["arduino:avr:1.6.12"]["runtime.tools.avr-gcc.path"])
5555
}
56+
57+
func TestCoreDependencyProperty(t *testing.T) {
58+
var paths []string
59+
paths = append(paths, "testdata")
60+
61+
p, err := PackageIndexFoldersToPropertiesMap(paths)
62+
require.NoError(t, err)
63+
64+
require.Equal(t, "{runtime.tools.avr-gcc-4.9.2-atmel3.5.3-arduino2.path}", p["attiny:avr:1.0.2"]["runtime.tools.avr-gcc.path"])
65+
}
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
{
2+
"packages": [
3+
{
4+
"name": "attiny",
5+
"maintainer": "David A. Mellis",
6+
"websiteURL": "https://github.com/damellis/attiny",
7+
"email": "",
8+
"help": {
9+
"online": ""
10+
},
11+
"platforms": [
12+
{
13+
"name": "attiny",
14+
"architecture": "avr",
15+
"version": "1.0.0",
16+
"category": "attiny",
17+
"help": {
18+
"online": ""
19+
},
20+
"url": "https://github.com/damellis/attiny/archive/702aa287455f7e052cf94fd4949398fec0ef21b8.zip",
21+
"archiveFileName": "702aa287455f7e052cf94fd4949398fec0ef21b8.zip",
22+
"checksum": "SHA-256:bfffa4a700e42ae993895f5eea22bc369ba5ac3ea36eca18ac5f72a05bb60ab5",
23+
"size": "5005",
24+
"boards": [
25+
{"name": "ATtiny45"},
26+
{"name": "ATtiny85"},
27+
{"name": "ATtiny44"},
28+
{"name": "ATtiny84"}
29+
],
30+
"toolsDependencies": [
31+
{
32+
"packager": "arduino",
33+
"name": "avr-gcc",
34+
"version": "4.8.1-arduino5"
35+
},
36+
{
37+
"packager": "arduino",
38+
"name": "avrdude",
39+
"version": "6.0.1-arduino5"
40+
}
41+
]
42+
},
43+
{
44+
"name": "attiny",
45+
"architecture": "avr",
46+
"version": "1.0.1",
47+
"category": "attiny",
48+
"help": {
49+
"online": ""
50+
},
51+
"url": "https://github.com/damellis/attiny/archive/76ca88ce3c195fcba8e8a645084e352965dc80e0.zip",
52+
"archiveFileName": "76ca88ce3c195fcba8e8a645084e352965dc80e0.zip",
53+
"checksum": "SHA-256:49a4dfc3796caf2533050b0b962ae0affb2471b8ded1283936d7b712cc1fdff1",
54+
"size": "5719",
55+
"boards": [
56+
{"name": "ATtiny45"},
57+
{"name": "ATtiny85"},
58+
{"name": "ATtiny44"},
59+
{"name": "ATtiny84"}
60+
],
61+
"toolsDependencies": [
62+
{
63+
"packager": "arduino",
64+
"name": "avr-gcc",
65+
"version": "4.8.1-arduino5"
66+
},
67+
{
68+
"packager": "arduino",
69+
"name": "avrdude",
70+
"version": "6.0.1-arduino5"
71+
}
72+
]
73+
},
74+
{
75+
"name": "attiny",
76+
"architecture": "avr",
77+
"version": "1.0.2",
78+
"category": "attiny",
79+
"help": {
80+
"online": ""
81+
},
82+
"url": "https://github.com/damellis/attiny/archive/6bba7d452af59d5190025bc870ec9e53d170e4d9.zip",
83+
"archiveFileName": "6bba7d452af59d5190025bc870ec9e53d170e4d9.zip",
84+
"checksum": "SHA-256:1654a8968fea7d599255bd18430786f9c84340606e7a678b9cf9a3cd49d94ad7",
85+
"size": "5913",
86+
"boards": [
87+
{"name": "ATtiny25"},
88+
{"name": "ATtiny45"},
89+
{"name": "ATtiny85"},
90+
{"name": "ATtiny24"},
91+
{"name": "ATtiny44"},
92+
{"name": "ATtiny84"}
93+
],
94+
"coreDependencies": [
95+
{
96+
"packager": "arduino",
97+
"name": "avr"
98+
}
99+
]
100+
}
101+
],
102+
"tools": []
103+
}
104+
]
105+
}

0 commit comments

Comments
 (0)