Skip to content

Commit a8f5f26

Browse files
committed
Don't fail if multiple core version are found
use the latest one based on semver a dependency was added (github.com/blang/semver), hopefully we'll use it somwhere else since it's really useful
1 parent db653b2 commit a8f5f26

File tree

3 files changed

+27
-8
lines changed

3 files changed

+27
-8
lines changed

src/arduino.cc/builder/constants/constants.go

+1
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,7 @@ const MSG_CANT_FIND_SKETCH_IN_PATH = "Unable to find {0} in {1}"
213213
const MSG_INVALID_QUOTING = "Invalid quoting: no closing [{0}] char found."
214214
const MSG_LIB_LEGACY = "(legacy)"
215215
const MSG_LIBRARIES_MULTIPLE_LIBS_FOUND_FOR = "Multiple libraries were found for \"{0}\""
216+
const MSG_CORES_MULTIPLE_CORES_FOUND_FOR = "Multiple versions of {0} core were found, using {1}"
216217
const MSG_LIBRARIES_NOT_USED = " Not used: {0}"
217218
const MSG_LIBRARIES_USED = " Used: {0}"
218219
const MSG_LIBRARY_CAN_USE_SRC_AND_UTILITY_FOLDERS = "Library can't use both 'src' and 'utility' folders. Double check {0}"

src/arduino.cc/builder/hardware_loader.go

+9-4
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func (s *HardwareLoader) Run(context map[string]interface{}) error {
8484
}
8585

8686
targetPackage := getOrCreatePackage(packages, packageId)
87-
err = loadPackage(targetPackage, subfolderPath, logger)
87+
err = loadPackage(targetPackage, subfolderPath, logger, context)
8888
if err != nil {
8989
return utils.WrapError(err)
9090
}
@@ -110,7 +110,7 @@ func getOrCreatePackage(packages *types.Packages, packageId string) *types.Packa
110110
return &targetPackage
111111
}
112112

113-
func loadPackage(targetPackage *types.Package, folder string, logger i18n.Logger) error {
113+
func loadPackage(targetPackage *types.Package, folder string, logger i18n.Logger, context map[string]interface{}) error {
114114
packagePlatformTxt, err := props.SafeLoad(filepath.Join(folder, constants.FILE_PLATFORM_TXT), logger)
115115
if err != nil {
116116
return utils.WrapError(err)
@@ -131,9 +131,14 @@ func loadPackage(targetPackage *types.Package, folder string, logger i18n.Logger
131131

132132
_, err := os.Stat(filepath.Join(subfolderPath, constants.FILE_BOARDS_TXT))
133133
if err != nil && os.IsNotExist(err) {
134-
theOnlySubfolder, err := utils.TheOnlySubfolderOf(subfolderPath)
134+
theOnlySubfolder, err := utils.TheBestSubfolderOf(subfolderPath)
135135
if err != nil {
136-
return utils.WrapError(err)
136+
if theOnlySubfolder != constants.EMPTY_STRING {
137+
logger := context[constants.CTX_LOGGER].(i18n.Logger)
138+
logger.Fprintln(os.Stdout, constants.LOG_LEVEL_WARN, constants.MSG_CORES_MULTIPLE_CORES_FOUND_FOR, platformId, err.Error())
139+
} else {
140+
return utils.WrapError(err)
141+
}
137142
}
138143

139144
if theOnlySubfolder != constants.EMPTY_STRING {

src/arduino.cc/builder/utils/utils.go

+17-4
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
"arduino.cc/builder/types"
3737
"crypto/md5"
3838
"encoding/hex"
39+
"github.com/blang/semver"
3940
"github.com/go-errors/errors"
4041
"io/ioutil"
4142
"os"
@@ -358,17 +359,29 @@ func ReadFileToRows(file string) ([]string, error) {
358359
return strings.Split(txt, "\n"), nil
359360
}
360361

361-
func TheOnlySubfolderOf(folder string) (string, error) {
362+
func TheBestSubfolderOf(folder string) (string, error) {
362363
subfolders, err := ReadDirFiltered(folder, FilterDirs)
363364
if err != nil {
364365
return constants.EMPTY_STRING, WrapError(err)
365366
}
366367

367-
if len(subfolders) != 1 {
368+
if len(subfolders) > 0 {
369+
latest, _ := semver.Make(subfolders[0].Name())
370+
latest_index := 0
371+
for i, _ := range subfolders {
372+
test, _ := semver.Make(subfolders[i].Name())
373+
if test.GT(latest) {
374+
latest = test
375+
latest_index = i
376+
}
377+
}
378+
if len(subfolders) > 1 {
379+
err = errors.New(subfolders[latest_index].Name())
380+
}
381+
return subfolders[latest_index].Name(), err
382+
} else {
368383
return constants.EMPTY_STRING, nil
369384
}
370-
371-
return subfolders[0].Name(), nil
372385
}
373386

374387
func FilterOutFoldersByNames(folders []os.FileInfo, names ...string) []os.FileInfo {

0 commit comments

Comments
 (0)