From e16f92ad65129b06de3ac85bde7fbfb892f0534e Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Thu, 8 Mar 2018 16:29:37 +0100 Subject: [PATCH] Moving hardware loader in packagemanager (WIP 3/4) --- cores/loader.go | 47 +--------------------------------- cores/packagemanager/loader.go | 47 ++++++++++++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 48 deletions(-) diff --git a/cores/loader.go b/cores/loader.go index 8fcc506aec4..42149594da7 100644 --- a/cores/loader.go +++ b/cores/loader.go @@ -30,57 +30,12 @@ package cores import ( - "fmt" - "os" "path/filepath" properties "github.com/arduino/go-properties-map" ) -func (platform *PlatformRelease) Load(folder string) error { - if _, err := os.Stat(filepath.Join(folder, "boards.txt")); err != nil && !os.IsNotExist(err) { - return fmt.Errorf("opening boards.txt: %s", err) - } else if os.IsNotExist(err) { - return fmt.Errorf("invalid platform directory %s: boards.txt not found", folder) - } - platform.Folder = folder - - // Some useful paths - platformTxtPath := filepath.Join(folder, "platform.txt") - platformTxtLocalPath := filepath.Join(folder, "platform.local.txt") - programmersTxtPath := filepath.Join(folder, "programmers.txt") - - // Create platform properties - platform.Properties = platform.Properties.Clone() // TODO: why CLONE? - if p, err := properties.SafeLoad(platformTxtPath); err == nil { - platform.Properties.Merge(p) - } else { - return fmt.Errorf("loading %s: %s", platformTxtPath, err) - } - if p, err := properties.SafeLoad(platformTxtLocalPath); err == nil { - platform.Properties.Merge(p) - } else { - return fmt.Errorf("loading %s: %s", platformTxtLocalPath, err) - } - - // Create programmers properties - if programmersProperties, err := properties.SafeLoad(programmersTxtPath); err == nil { - platform.Programmers = properties.MergeMapsOfProperties( - map[string]properties.Map{}, - platform.Programmers, // TODO: Very weird, why not an empty one? - programmersProperties.FirstLevelOf()) - } else { - return err - } - - if err := platform.loadBoards(); err != nil { - return err - } - - return nil -} - -func (platform *PlatformRelease) loadBoards() error { +func (platform *PlatformRelease) LoadBoards() error { boardsTxtPath := filepath.Join(platform.Folder, "boards.txt") boardsLocalTxtPath := filepath.Join(platform.Folder, "boards.local.txt") diff --git a/cores/packagemanager/loader.go b/cores/packagemanager/loader.go index fe34ec434eb..35f219ad850 100644 --- a/cores/packagemanager/loader.go +++ b/cores/packagemanager/loader.go @@ -148,7 +148,7 @@ func (pm *packageManager) LoadPlatforms(targetPackage *cores.Package, packageFol platform := targetPackage.GetOrCreatePlatform(architecure) release := platform.GetOrCreateRelease("") - if err := release.Load(platformPath); err != nil { + if err := pm.LoadPlatformRelease(release, platformPath); err != nil { return fmt.Errorf("loading platform release: %s", err) } @@ -169,7 +169,7 @@ func (pm *packageManager) LoadPlatforms(targetPackage *cores.Package, packageFol release := platform.GetOrCreateRelease(version) platformWithVersionPath := filepath.Join(platformPath, version) - if err := release.Load(platformWithVersionPath); err != nil { + if err := pm.LoadPlatformRelease(release, platformWithVersionPath); err != nil { return fmt.Errorf("loading platform release %s: %s", version, err) } } @@ -180,3 +180,46 @@ func (pm *packageManager) LoadPlatforms(targetPackage *cores.Package, packageFol return nil } + +func (pm *packageManager) LoadPlatformRelease(platform *cores.PlatformRelease, folder string) error { + if _, err := os.Stat(filepath.Join(folder, "boards.txt")); err != nil && !os.IsNotExist(err) { + return fmt.Errorf("opening boards.txt: %s", err) + } else if os.IsNotExist(err) { + return fmt.Errorf("invalid platform directory %s: boards.txt not found", folder) + } + platform.Folder = folder + + // Some useful paths + platformTxtPath := filepath.Join(folder, "platform.txt") + platformTxtLocalPath := filepath.Join(folder, "platform.local.txt") + programmersTxtPath := filepath.Join(folder, "programmers.txt") + + // Create platform properties + platform.Properties = platform.Properties.Clone() // TODO: why CLONE? + if p, err := properties.SafeLoad(platformTxtPath); err == nil { + platform.Properties.Merge(p) + } else { + return fmt.Errorf("loading %s: %s", platformTxtPath, err) + } + if p, err := properties.SafeLoad(platformTxtLocalPath); err == nil { + platform.Properties.Merge(p) + } else { + return fmt.Errorf("loading %s: %s", platformTxtLocalPath, err) + } + + // Create programmers properties + if programmersProperties, err := properties.SafeLoad(programmersTxtPath); err == nil { + platform.Programmers = properties.MergeMapsOfProperties( + map[string]properties.Map{}, + platform.Programmers, // TODO: Very weird, why not an empty one? + programmersProperties.FirstLevelOf()) + } else { + return err + } + + if err := platform.LoadBoards(); err != nil { + return err + } + + return nil +}