1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
package crosssdk
import (
"fmt"
"path"
"path/filepath"
"strings"
"sync"
"github.com/Sirupsen/logrus"
common "github.com/iotbzh/xds-common/golib"
"github.com/iotbzh/xds-server/lib/xdsconfig"
)
// SDKs List of installed SDK
type SDKs struct {
Sdks map[string]*SDK
mutex sync.Mutex
}
// Init creates a new instance of Syncthing
func Init(cfg *xdsconfig.Config, log *logrus.Logger) (*SDKs, error) {
s := SDKs{
Sdks: make(map[string]*SDK),
}
// Retrieve installed sdks
sdkRD := cfg.FileConf.SdkRootDir
if common.Exists(sdkRD) {
// Assume that SDK install tree is <rootdir>/<profile>/<version>/<arch>
dirs, err := filepath.Glob(path.Join(sdkRD, "*", "*", "*"))
if err != nil {
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 {
if !common.IsDir(d) {
continue
}
sdk, err := NewCrossSDK(d)
if err != nil {
log.Debugf("Error while processing SDK dir=%s, err=%s", d, err.Error())
continue
}
s.Sdks[sdk.ID] = sdk
}
}
log.Debugf("SDKs: %d cross sdks found", len(s.Sdks))
return &s, nil
}
// ResolveID Complete an SDK ID (helper for user that can use partial ID value)
func (s *SDKs) ResolveID(id string) (string, error) {
if id == "" {
return "", nil
}
match := []string{}
for iid := range s.Sdks {
fmt.Printf("SEB prefix iid=%v id=%v\n", iid, id)
if strings.HasPrefix(iid, id) {
match = append(match, iid)
fmt.Printf(" SEB match (%d): %v\n", len(match), match)
}
}
fmt.Printf("SEB match (%d): %v\n", len(match), match)
if len(match) == 1 {
return match[0], nil
} else if len(match) == 0 {
return id, fmt.Errorf("Unknown id")
}
return id, fmt.Errorf("Multiple IDs found with provided prefix: " + id)
}
// Get returns an SDK from id
func (s *SDKs) Get(id string) *SDK {
s.mutex.Lock()
defer s.mutex.Unlock()
sc, exist := s.Sdks[id]
if !exist {
return nil
}
return sc
}
// GetAll returns all existing SDKs
func (s *SDKs) GetAll() []SDK {
s.mutex.Lock()
defer s.mutex.Unlock()
res := []SDK{}
for _, v := range s.Sdks {
res = append(res, *v)
}
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 []string{}
}
s.mutex.Lock()
defer s.mutex.Unlock()
if sdk, exist := s.Sdks[id]; exist {
return sdk.GetEnvCmd()
}
if sdk, exist := s.Sdks[defaultID]; defaultID != "" && exist {
return sdk.GetEnvCmd()
}
// Return default env that may be empty
return []string{}
}
|