diff options
author | Sebastien Douheret <sebastien.douheret@iot.bzh> | 2017-05-18 11:01:13 +0200 |
---|---|---|
committer | Sebastien Douheret <sebastien.douheret@iot.bzh> | 2017-05-18 11:01:13 +0200 |
commit | 2c9ae6a5a27ae2f2e23495c613e7a53aed8e786c (patch) | |
tree | b23dbe9051c50a7ed8f666ae71c833fd52823770 /lib/crosssdk/sdks.go | |
parent | 51da3506a296b7d5d4185b17364f188292136888 (diff) |
Add Cross SDKs support (part 2)
Diffstat (limited to 'lib/crosssdk/sdks.go')
-rw-r--r-- | lib/crosssdk/sdks.go | 57 |
1 files changed, 55 insertions, 2 deletions
diff --git a/lib/crosssdk/sdks.go b/lib/crosssdk/sdks.go index 435aae6..87bb85d 100644 --- a/lib/crosssdk/sdks.go +++ b/lib/crosssdk/sdks.go @@ -3,6 +3,7 @@ package crosssdk import ( "path" "path/filepath" + "sync" "github.com/Sirupsen/logrus" "github.com/iotbzh/xds-server/lib/common" @@ -10,7 +11,11 @@ import ( ) // SDKs List of installed SDK -type SDKs []*SDK +type SDKs struct { + Sdks []SDK + + mutex sync.Mutex +} // Init creates a new instance of Syncthing func Init(cfg *xdsconfig.Config, log *logrus.Logger) (*SDKs, error) { @@ -27,13 +32,61 @@ func Init(cfg *xdsconfig.Config, log *logrus.Logger) (*SDKs, error) { log.Debugf("Error while retrieving SDKs: dir=%s, error=%s", sdkRD, err.Error()) return &s, err } + s.mutex.Lock() + defer s.mutex.Unlock() + for _, d := range dirs { sdk, err := NewCrossSDK(d) if err != nil { log.Debugf("Error while processing SDK dir=%s, err=%s", d, err.Error()) } - s = append(s, sdk) + s.Sdks = append(s.Sdks, *sdk) } } + + log.Debugf("SDKs: %d cross sdks found", len(s.Sdks)) + return &s, nil } + +// GetAll returns all existing SDKs +func (s *SDKs) GetAll() []SDK { + s.mutex.Lock() + defer s.mutex.Unlock() + res := s.Sdks + return res +} + +// Get returns an SDK from id +func (s *SDKs) Get(id int) SDK { + s.mutex.Lock() + defer s.mutex.Unlock() + + if id < 0 || id > len(s.Sdks) { + return SDK{} + } + res := s.Sdks[id] + return res +} + +// GetEnvCmd returns the command used to initialized the environment for an SDK +func (s *SDKs) GetEnvCmd(id string, defaultID string) string { + if id == "" && defaultID == "" { + // no env cmd + return "" + } + + s.mutex.Lock() + defer s.mutex.Unlock() + defaultEnv := "" + for _, sdk := range s.Sdks { + if sdk.ID == id { + return sdk.GetEnvCmd() + } + if sdk.ID == defaultID { + defaultEnv = sdk.GetEnvCmd() + } + } + // Return default env that may be empty + return defaultEnv +} |