作者:ricklo
项目:arduino-builde
func (s *PlatformKeysRewriteLoader) Run(context map[string]interface{}) error {
folders := context[constants.CTX_HARDWARE_FOLDERS].([]string)
platformKeysRewriteTxtPath, err := findPlatformKeysRewriteTxt(folders)
if err != nil {
return utils.WrapError(err)
}
if platformKeysRewriteTxtPath == constants.EMPTY_STRING {
return nil
}
platformKeysRewrite := types.PlatforKeysRewrite{}
platformKeysRewrite.Rewrites = []types.PlatforKeyRewrite{}
txt, err := props.Load(platformKeysRewriteTxtPath)
keys := utils.KeysOfMapOfString(txt)
sort.Strings(keys)
for _, key := range keys {
keyParts := strings.Split(key, ".")
if keyParts[0] == constants.PLATFORM_REWRITE_OLD {
rewriteKey := strings.Join(keyParts[2:], ".")
oldValue := txt[key]
newValue := txt[constants.PLATFORM_REWRITE_NEW+"."+strings.Join(keyParts[1:], ".")]
platformKeyRewrite := types.PlatforKeyRewrite{Key: rewriteKey, OldValue: oldValue, NewValue: newValue}
platformKeysRewrite.Rewrites = append(platformKeysRewrite.Rewrites, platformKeyRewrite)
}
}
context[constants.CTX_PLATFORM_KEYS_REWRITE] = platformKeysRewrite
return nil
}
作者:andy52
项目:arduino-builde
func loadBoards(boards map[string]*types.Board, packageId string, platformId string, folder string, logger i18n.Logger) error {
properties, err := props.Load(filepath.Join(folder, constants.FILE_BOARDS_TXT), logger)
if err != nil {
return utils.WrapError(err)
}
localProperties, err := props.SafeLoad(filepath.Join(folder, constants.FILE_BOARDS_LOCAL_TXT), logger)
if err != nil {
return utils.WrapError(err)
}
properties = utils.MergeMapsOfStrings(properties, localProperties)
propertiesByBoardId := props.FirstLevelOf(properties)
delete(propertiesByBoardId, constants.BOARD_PROPERTIES_MENU)
for boardId, properties := range propertiesByBoardId {
properties[constants.ID] = boardId
board := getOrCreateBoard(boards, boardId)
board.Properties = utils.MergeMapsOfStrings(board.Properties, properties)
boards[boardId] = board
}
return nil
}
作者:me-no-de
项目:arduino-builde
func libraryAlreadyDownloadedAndUnpacked(targetPath string, library Library) bool {
_, err := os.Stat(filepath.Join(targetPath, strings.Replace(library.Name, " ", "_", -1)))
if os.IsNotExist(err) {
return false
}
libProps, err := props.Load(filepath.Join(targetPath, strings.Replace(library.Name, " ", "_", -1), "library.properties"), i18n.HumanLogger{})
if err != nil {
return false
}
return libProps["version"] == library.Version || libProps["version"] == library.VersionInLibProperties
}
作者:spiderkey
项目:arduino-builde
func TestPropertiesBoardsTxt(t *testing.T) {
properties, err := props.Load(filepath.Join("props", "boards.txt"), i18n.HumanLogger{})
NoError(t, err)
require.Equal(t, "Processor", properties["menu.cpu"])
require.Equal(t, "32256", properties["ethernet.upload.maximum_size"])
require.Equal(t, "{build.usb_flags}", properties["robotMotor.build.extra_flags"])
ethernet := properties.SubTree("ethernet")
require.Equal(t, "Arduino Ethernet", ethernet[constants.LIBRARY_NAME])
}
作者:spiderkey
项目:arduino-builde
func TestPropertiesRedBeearLabBoardsTxt(t *testing.T) {
properties, err := props.Load(filepath.Join("props", "redbearlab_boards.txt"), i18n.HumanLogger{})
NoError(t, err)
require.Equal(t, 83, len(properties))
require.Equal(t, "Blend", properties["blend.name"])
require.Equal(t, "arduino:arduino", properties["blend.build.core"])
require.Equal(t, "0x2404", properties["blendmicro16.pid.0"])
ethernet := properties.SubTree("blend")
require.Equal(t, "arduino:arduino", ethernet[constants.BUILD_PROPERTIES_BUILD_CORE])
}
作者:me-no-de
项目:arduino-builde
func coreAlreadyDownloadedAndUnpacked(targetPath string, core Core) (bool, error) {
corePath := filepath.Join(targetPath, core.Maintainer, core.Arch)
_, err := os.Stat(corePath)
if os.IsNotExist(err) {
return false, nil
}
platform, err := props.Load(filepath.Join(corePath, "platform.txt"), i18n.HumanLogger{})
if err != nil {
return false, i18n.WrapError(err)
}
if core.Version != platform["version"] {
err := os.RemoveAll(corePath)
return false, i18n.WrapError(err)
}
return true, nil
}
作者:spiderkey
项目:arduino-builde
func TestPropertiesTestTxt(t *testing.T) {
properties, err := props.Load(filepath.Join("props", "test.txt"), i18n.HumanLogger{})
NoError(t, err)
require.Equal(t, 4, len(properties))
require.Equal(t, "value = 1", properties["key"])
switch value := runtime.GOOS; value {
case "linux":
require.Equal(t, "is linux", properties["which.os"])
case "windows":
require.Equal(t, "is windows", properties["which.os"])
case "darwin":
require.Equal(t, "is macosx", properties["which.os"])
default:
require.FailNow(t, "unsupported OS")
}
}
作者:me-no-de
项目:arduino-builde
func (s *PlatformKeysRewriteLoader) Run(ctx *types.Context) error {
logger := ctx.GetLogger()
folders := ctx.HardwareFolders
platformKeysRewriteTxtPath, err := findPlatformKeysRewriteTxt(folders)
if err != nil {
return i18n.WrapError(err)
}
if platformKeysRewriteTxtPath == constants.EMPTY_STRING {
return nil
}
platformKeysRewrite := types.PlatforKeysRewrite{}
platformKeysRewrite.Rewrites = []types.PlatforKeyRewrite{}
txt, err := props.Load(platformKeysRewriteTxtPath, logger)
keys := utils.KeysOfMapOfString(txt)
sort.Strings(keys)
for _, key := range keys {
keyParts := strings.Split(key, ".")
if keyParts[0] == constants.PLATFORM_REWRITE_OLD {
index, err := strconv.Atoi(keyParts[1])
if err != nil {
return i18n.WrapError(err)
}
rewriteKey := strings.Join(keyParts[2:], ".")
oldValue := txt[key]
newValue := txt[constants.PLATFORM_REWRITE_NEW+"."+strings.Join(keyParts[1:], ".")]
platformKeyRewrite := types.PlatforKeyRewrite{Key: rewriteKey, OldValue: oldValue, NewValue: newValue}
platformKeysRewrite.Rewrites = growSliceOfRewrites(platformKeysRewrite.Rewrites, index)
platformKeysRewrite.Rewrites[index] = platformKeyRewrite
}
}
ctx.PlatformKeyRewrites = platformKeysRewrite
return nil
}
作者:andy52
项目:arduino-builde
func makeNewLibrary(libraryFolder string, debugLevel int, logger i18n.Logger) (*types.Library, error) {
properties, err := props.Load(filepath.Join(libraryFolder, constants.LIBRARY_PROPERTIES), logger)
if err != nil {
return nil, utils.WrapError(err)
}
if properties[constants.LIBRARY_MAINTAINER] == constants.EMPTY_STRING && properties[constants.LIBRARY_EMAIL] != constants.EMPTY_STRING {
properties[constants.LIBRARY_MAINTAINER] = properties[constants.LIBRARY_EMAIL]
}
for _, propName := range LIBRARY_NOT_SO_MANDATORY_PROPERTIES {
if properties[propName] == constants.EMPTY_STRING {
properties[propName] = "-"
}
}
library := &types.Library{}
if stat, err := os.Stat(filepath.Join(libraryFolder, constants.LIBRARY_FOLDER_SRC)); err == nil && stat.IsDir() {
library.Layout = types.LIBRARY_RECURSIVE
library.SrcFolder = filepath.Join(libraryFolder, constants.LIBRARY_FOLDER_SRC)
} else {
library.Layout = types.LIBRARY_FLAT
library.SrcFolder = libraryFolder
}
subFolders, err := utils.ReadDirFiltered(libraryFolder, utils.FilterDirs)
if err != nil {
return nil, utils.WrapError(err)
}
if debugLevel > 0 {
for _, subFolder := range subFolders {
if utils.IsSCCSOrHiddenFile(subFolder) {
if !utils.IsSCCSFile(subFolder) && utils.IsHiddenFile(subFolder) {
logger.Fprintln(os.Stdout, constants.LOG_LEVEL_WARN, constants.MSG_WARNING_SPURIOUS_FILE_IN_LIB, filepath.Base(subFolder.Name()), properties[constants.LIBRARY_NAME])
}
}
}
}
if properties[constants.LIBRARY_ARCHITECTURES] == constants.EMPTY_STRING {
properties[constants.LIBRARY_ARCHITECTURES] = constants.LIBRARY_ALL_ARCHS
}
library.Archs = []string{}
for _, arch := range strings.Split(properties[constants.LIBRARY_ARCHITECTURES], ",") {
library.Archs = append(library.Archs, strings.TrimSpace(arch))
}
properties[constants.LIBRARY_CATEGORY] = strings.TrimSpace(properties[constants.LIBRARY_CATEGORY])
if !LIBRARY_CATEGORIES[properties[constants.LIBRARY_CATEGORY]] {
logger.Fprintln(os.Stdout, constants.LOG_LEVEL_WARN, constants.MSG_WARNING_LIB_INVALID_CATEGORY, properties[constants.LIBRARY_CATEGORY], properties[constants.LIBRARY_NAME], constants.LIB_CATEGORY_UNCATEGORIZED)
properties[constants.LIBRARY_CATEGORY] = constants.LIB_CATEGORY_UNCATEGORIZED
}
library.Category = properties[constants.LIBRARY_CATEGORY]
if properties[constants.LIBRARY_LICENSE] == constants.EMPTY_STRING {
properties[constants.LIBRARY_LICENSE] = constants.LIB_LICENSE_UNSPECIFIED
}
library.License = properties[constants.LIBRARY_LICENSE]
library.Folder = libraryFolder
library.Name = filepath.Base(libraryFolder)
library.Version = strings.TrimSpace(properties[constants.LIBRARY_VERSION])
library.Author = strings.TrimSpace(properties[constants.LIBRARY_AUTHOR])
library.Maintainer = strings.TrimSpace(properties[constants.LIBRARY_MAINTAINER])
library.Sentence = strings.TrimSpace(properties[constants.LIBRARY_SENTENCE])
library.Paragraph = strings.TrimSpace(properties[constants.LIBRARY_PARAGRAPH])
library.URL = strings.TrimSpace(properties[constants.LIBRARY_URL])
library.IsLegacy = false
library.DotALinkage = strings.TrimSpace(properties[constants.LIBRARY_DOT_A_LINKAGE]) == "true"
library.Properties = properties
return library, nil
}
作者:spiderkey
项目:arduino-builde
func TestPropertiesBroken(t *testing.T) {
_, err := props.Load(filepath.Join("props", "broken.txt"), i18n.HumanLogger{})
require.Error(t, err)
}