Skip to content

Commit 5159f45

Browse files
authored
Refactored bundle tool initialization (#1349)
Also fixed a bug that prevented tools-reload after auto install in some rare circumstances (almost impossible to trigger actually).
1 parent 1b04809 commit 5159f45

File tree

3 files changed

+11
-43
lines changed

3 files changed

+11
-43
lines changed

commands/bundled_tools_ctags.go

+2-8
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import (
2222
semver "go.bug.st/relaxed-semver"
2323
)
2424

25-
func loadBuiltinCtagsMetadata(pm *packagemanager.PackageManager) {
25+
func getBuiltinCtagsTool(pm *packagemanager.PackageManager) *cores.ToolRelease {
2626
builtinPackage := pm.Packages.GetOrCreatePackage("builtin")
2727
ctagsTool := builtinPackage.GetOrCreateTool("ctags")
2828
ctagsRel := ctagsTool.GetOrCreateRelease(semver.ParseRelaxed("5.8-arduino11"))
@@ -88,11 +88,5 @@ func loadBuiltinCtagsMetadata(pm *packagemanager.PackageManager) {
8888
},
8989
},
9090
}
91-
}
92-
93-
var ctagsVersion = semver.ParseRelaxed("5.8-arduino11")
94-
95-
func getBuiltinCtagsTool(pm *packagemanager.PackageManager) (*cores.ToolRelease, error) {
96-
loadBuiltinCtagsMetadata(pm)
97-
return pm.Package("builtin").Tool("ctags").Release(ctagsVersion).Get()
91+
return ctagsRel
9892
}

commands/bundled_tools_serial_discovery.go

+4-11
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,7 @@ func ListBoards(pm *packagemanager.PackageManager) ([]*discovery.Port, error) {
112112
defer listBoardMutex.Unlock()
113113

114114
// get the bundled tool
115-
t, err := getBuiltinSerialDiscoveryTool(pm)
116-
if err != nil {
117-
return nil, err
118-
}
115+
t := getBuiltinSerialDiscoveryTool(pm)
119116

120117
// determine if it's installed
121118
if !t.IsInstalled() {
@@ -146,11 +143,7 @@ func ListBoards(pm *packagemanager.PackageManager) ([]*discovery.Port, error) {
146143

147144
// WatchListBoards returns a channel that receives events from the bundled discovery tool
148145
func WatchListBoards(pm *packagemanager.PackageManager) (<-chan *discovery.Event, error) {
149-
t, err := getBuiltinSerialDiscoveryTool(pm)
150-
if err != nil {
151-
return nil, err
152-
}
153-
146+
t := getBuiltinSerialDiscoveryTool(pm)
154147
if !t.IsInstalled() {
155148
return nil, fmt.Errorf("missing serial-discovery tool")
156149
}
@@ -175,10 +168,10 @@ func WatchListBoards(pm *packagemanager.PackageManager) (<-chan *discovery.Event
175168
return disc.EventChannel(10), nil
176169
}
177170

178-
func getBuiltinSerialDiscoveryTool(pm *packagemanager.PackageManager) (*cores.ToolRelease, error) {
171+
func getBuiltinSerialDiscoveryTool(pm *packagemanager.PackageManager) *cores.ToolRelease {
179172
builtinPackage := pm.Packages.GetOrCreatePackage("builtin")
180173
serialDiscoveryTool := builtinPackage.GetOrCreateTool("serial-discovery")
181174
serialDiscoveryToolRel := serialDiscoveryTool.GetOrCreateRelease(serialDiscoveryVersion)
182175
serialDiscoveryToolRel.Flavors = serialDiscoveryFlavors
183-
return pm.Package("builtin").Tool("serial-discovery").Release(serialDiscoveryVersion).Get()
176+
return serialDiscoveryToolRel
184177
}

commands/instances.go

+5-24
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,8 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) *sta
181181
// If this is not done the information of the uninstall core is kept in memory,
182182
// even if it should not.
183183
instance.PackageManager.Clear()
184+
ctagsTool := getBuiltinCtagsTool(instance.PackageManager)
185+
serialDiscoveryTool := getBuiltinSerialDiscoveryTool(instance.PackageManager)
184186

185187
// Load Platforms
186188
urls := []string{globals.DefaultIndexURL}
@@ -254,48 +256,27 @@ func Init(req *rpc.InitRequest, responseCallback func(r *rpc.InitResponse)) *sta
254256
}
255257

256258
// Install tools if necessary
257-
toolHasBeenInstalled := false
258-
ctagsTool, err := getBuiltinCtagsTool(instance.PackageManager)
259+
ctagsHasBeenInstalled, err := instance.installToolIfMissing(ctagsTool, downloadCallback, taskCallback)
259260
if err != nil {
260261
s := status.Newf(codes.Internal, err.Error())
261262
responseCallback(&rpc.InitResponse{
262263
Message: &rpc.InitResponse_Error{
263264
Error: s.Proto(),
264265
},
265266
})
266-
} else {
267-
toolHasBeenInstalled, err = instance.installToolIfMissing(ctagsTool, downloadCallback, taskCallback)
268-
if err != nil {
269-
s := status.Newf(codes.Internal, err.Error())
270-
responseCallback(&rpc.InitResponse{
271-
Message: &rpc.InitResponse_Error{
272-
Error: s.Proto(),
273-
},
274-
})
275-
}
276267
}
277268

278-
serialDiscoveryTool, _ := getBuiltinSerialDiscoveryTool(instance.PackageManager)
269+
serialHasBeenInstalled, err := instance.installToolIfMissing(serialDiscoveryTool, downloadCallback, taskCallback)
279270
if err != nil {
280271
s := status.Newf(codes.Internal, err.Error())
281272
responseCallback(&rpc.InitResponse{
282273
Message: &rpc.InitResponse_Error{
283274
Error: s.Proto(),
284275
},
285276
})
286-
} else {
287-
toolHasBeenInstalled, err = instance.installToolIfMissing(serialDiscoveryTool, downloadCallback, taskCallback)
288-
if err != nil {
289-
s := status.Newf(codes.Internal, err.Error())
290-
responseCallback(&rpc.InitResponse{
291-
Message: &rpc.InitResponse_Error{
292-
Error: s.Proto(),
293-
},
294-
})
295-
}
296277
}
297278

298-
if toolHasBeenInstalled {
279+
if ctagsHasBeenInstalled || serialHasBeenInstalled {
299280
// We installed at least one new tool after loading hardware
300281
// so we must reload again otherwise we would never found them.
301282
for _, err := range instance.PackageManager.LoadHardware() {

0 commit comments

Comments
 (0)