summaryrefslogtreecommitdiffstats
path: root/lib/crosssdk/sdks.go
diff options
context:
space:
mode:
authorSebastien Douheret <sebastien.douheret@iot.bzh>2017-05-18 11:01:13 +0200
committerSebastien Douheret <sebastien.douheret@iot.bzh>2017-05-18 11:01:13 +0200
commit2c9ae6a5a27ae2f2e23495c613e7a53aed8e786c (patch)
treeb23dbe9051c50a7ed8f666ae71c833fd52823770 /lib/crosssdk/sdks.go
parent51da3506a296b7d5d4185b17364f188292136888 (diff)
Add Cross SDKs support (part 2)
Diffstat (limited to 'lib/crosssdk/sdks.go')
-rw-r--r--lib/crosssdk/sdks.go57
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
+}