Skip to content

Commit 98d34b4

Browse files
committed
Download ctags builtin tool during Init
1 parent 4c71280 commit 98d34b4

File tree

7 files changed

+50
-47
lines changed

7 files changed

+50
-47
lines changed

cli/compile/compile.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ func run(cmd *cobra.Command, args []string) {
111111
Quiet: flags.quiet,
112112
VidPid: flags.vidPid,
113113
ExportFile: flags.exportFile,
114-
}, os.Stdout, os.Stderr, cli.OutputTaskProgress(), cli.OutputProgressBar())
114+
}, os.Stdout, os.Stderr)
115115
if err == nil {
116116
outputCompileResp(compRes)
117117
} else {

commands/compile/ctags.go renamed to commands/bundled_tools_ctags.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@
1515
* a commercial license, send an email to [email protected].
1616
*/
1717

18-
package compile
18+
package commands
1919

2020
import (
2121
"github.com/arduino/arduino-cli/arduino/cores"
2222
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
2323
"github.com/arduino/arduino-cli/arduino/resources"
24-
"go.bug.st/relaxed-semver"
24+
semver "go.bug.st/relaxed-semver"
2525
)
2626

2727
func loadBuiltinCtagsMetadata(pm *packagemanager.PackageManager) {
@@ -85,5 +85,6 @@ func loadBuiltinCtagsMetadata(pm *packagemanager.PackageManager) {
8585
var ctagsVersion = semver.ParseRelaxed("5.8-arduino11")
8686

8787
func getBuiltinCtagsTool(pm *packagemanager.PackageManager) (*cores.ToolRelease, error) {
88+
loadBuiltinCtagsMetadata(pm)
8889
return pm.Package("builtin").Tool("ctags").Release(ctagsVersion).Get()
8990
}

commands/bundled_tools_serial_discovery.go

+1
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ func loadBuiltinSerialDiscoveryMetadata(pm *packagemanager.PackageManager) {
8888
}
8989

9090
func getBuiltinSerialDiscoveryTool(pm *packagemanager.PackageManager) (*cores.ToolRelease, error) {
91+
loadBuiltinSerialDiscoveryMetadata(pm)
9192
return pm.Package("builtin").Tool("serial-discovery").Release(serialDiscoveryVersion).Get()
9293
}
9394

commands/compile/compile.go

+1-22
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,7 @@ import (
4040
"github.com/sirupsen/logrus"
4141
)
4242

43-
func Compile(ctx context.Context, req *rpc.CompileReq,
44-
outStream io.Writer, errStream io.Writer,
45-
taskCB commands.TaskProgressCB, downloadCB commands.DownloadProgressCB) (*rpc.CompileResp, error) {
46-
43+
func Compile(ctx context.Context, req *rpc.CompileReq, outStream io.Writer, errStream io.Writer) (*rpc.CompileResp, error) {
4744
pm := commands.GetPackageManager(req)
4845
if pm == nil {
4946
return nil, errors.New("invalid instance")
@@ -71,24 +68,6 @@ func Compile(ctx context.Context, req *rpc.CompileReq,
7168
return nil, fmt.Errorf("incorrect FQBN: %s", err)
7269
}
7370

74-
// Check for ctags tool
75-
loadBuiltinCtagsMetadata(pm)
76-
ctags, _ := getBuiltinCtagsTool(pm)
77-
if !ctags.IsInstalled() {
78-
taskCB(&rpc.TaskProgress{Name: "Downloading missing tool " + ctags.String()})
79-
commands.DownloadToolRelease(pm, ctags, downloadCB)
80-
taskCB(&rpc.TaskProgress{Completed: true})
81-
commands.InstallToolRelease(pm, ctags, taskCB)
82-
83-
if err := pm.LoadHardware(cli.Config); err != nil {
84-
return nil, fmt.Errorf("loading hardware packages: %s", err)
85-
}
86-
ctags, _ = getBuiltinCtagsTool(pm)
87-
if !ctags.IsInstalled() {
88-
return nil, fmt.Errorf("missing ctags tool")
89-
}
90-
}
91-
9271
targetPlatform := pm.FindPlatform(&packagemanager.PlatformReference{
9372
Package: fqbn.Package,
9473
PlatformArchitecture: fqbn.PlatformArch,

commands/instances.go

+44-18
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"path"
2626
"time"
2727

28+
"github.com/arduino/arduino-cli/arduino/cores"
2829
"github.com/arduino/arduino-cli/arduino/cores/packageindex"
2930
"github.com/arduino/arduino-cli/arduino/cores/packagemanager"
3031
"github.com/arduino/arduino-cli/arduino/discovery"
@@ -81,26 +82,45 @@ func GetDiscoveries(req InstanceContainer) []*discovery.Discovery {
8182
return i.discoveries
8283
}
8384

84-
func (instance *CoreInstance) startDiscoveries(downloadCB DownloadProgressCB, taskCB TaskProgressCB) error {
85+
func (instance *CoreInstance) installToolIfMissing(tool *cores.ToolRelease, downloadCB DownloadProgressCB, taskCB TaskProgressCB) (bool, error) {
86+
if tool.IsInstalled() {
87+
return false, nil
88+
}
89+
taskCB(&rpc.TaskProgress{Name: "Downloading missing tool " + tool.String()})
90+
if err := DownloadToolRelease(instance.pm, tool, downloadCB); err != nil {
91+
return false, fmt.Errorf("downloading %s tool: %s", tool, err)
92+
}
93+
taskCB(&rpc.TaskProgress{Completed: true})
94+
if err := InstallToolRelease(instance.pm, tool, taskCB); err != nil {
95+
return false, fmt.Errorf("installing %s tool: %s", tool, err)
96+
}
97+
return true, nil
98+
}
99+
100+
func (instance *CoreInstance) checkForBuiltinTools(downloadCB DownloadProgressCB, taskCB TaskProgressCB) error {
101+
// Check for ctags tool
102+
ctags, _ := getBuiltinCtagsTool(instance.pm)
103+
ctagsInstalled, err := instance.installToolIfMissing(ctags, downloadCB, taskCB)
104+
if err != nil {
105+
return err
106+
}
107+
85108
// Check for bultin serial-discovery tool
86-
loadBuiltinSerialDiscoveryMetadata(instance.pm)
87-
88-
if downloadCB != nil {
89-
serialDiscoveryTool, _ := getBuiltinSerialDiscoveryTool(instance.pm)
90-
if !serialDiscoveryTool.IsInstalled() {
91-
//formatter.Print("Downloading and installing missing tool: " + serialDiscoveryTool.String())
92-
if err := DownloadToolRelease(instance.pm, serialDiscoveryTool, downloadCB); err != nil {
93-
return fmt.Errorf(("could not download serial-discovery tool"))
94-
}
95-
if err := InstallToolRelease(instance.pm, serialDiscoveryTool, taskCB); err != nil {
96-
return fmt.Errorf(("could not install serial-discovery tool"))
97-
}
98-
if err := instance.pm.LoadHardware(instance.config); err != nil {
99-
return fmt.Errorf("could not load hardware packages: %s", err)
100-
}
109+
serialDiscoveryTool, _ := getBuiltinSerialDiscoveryTool(instance.pm)
110+
serialDiscoveryInstalled, err := instance.installToolIfMissing(serialDiscoveryTool, downloadCB, taskCB)
111+
if err != nil {
112+
return err
113+
}
114+
115+
if ctagsInstalled || serialDiscoveryInstalled {
116+
if err := instance.pm.LoadHardware(instance.config); err != nil {
117+
return fmt.Errorf("could not load hardware packages: %s", err)
101118
}
102119
}
120+
return nil
121+
}
103122

123+
func (instance *CoreInstance) startDiscoveries() error {
104124
serialDiscovery, err := newBuiltinSerialDiscovery(instance.pm)
105125
if err != nil {
106126
return fmt.Errorf("starting serial discovery: %s", err)
@@ -162,10 +182,16 @@ func Init(ctx context.Context, req *rpc.InitReq, downloadCB DownloadProgressCB,
162182
instancesCount++
163183
instances[handle] = instance
164184

165-
if err := instance.startDiscoveries(downloadCB, taskCB); err != nil {
185+
if err := instance.checkForBuiltinTools(downloadCB, taskCB); err != nil {
186+
fmt.Println(err)
187+
return nil, err
188+
}
189+
190+
if err := instance.startDiscoveries(); err != nil {
166191
// TODO: handle discovery errors
167192
fmt.Println(err)
168193
}
194+
169195
return &rpc.InitResp{
170196
Instance: &rpc.Instance{Id: handle},
171197
PlatformsIndexErrors: reqPltIndex,
@@ -271,7 +297,7 @@ func Rescan(ctx context.Context, req *rpc.RescanReq) (*rpc.RescanResp, error) {
271297
coreInstance.pm = pm
272298
coreInstance.lm = lm
273299

274-
coreInstance.startDiscoveries(nil, nil)
300+
coreInstance.startDiscoveries()
275301

276302
return &rpc.RescanResp{
277303
PlatformsIndexErrors: reqPltIndex,

daemon/daemon.go

-2
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,6 @@ func (s *ArduinoCoreServerImpl) Compile(req *rpc.CompileReq, stream rpc.ArduinoC
120120
stream.Context(), req,
121121
feedStream(func(data []byte) { stream.Send(&rpc.CompileResp{OutStream: data}) }),
122122
feedStream(func(data []byte) { stream.Send(&rpc.CompileResp{ErrStream: data}) }),
123-
func(p *rpc.TaskProgress) { stream.Send(&rpc.CompileResp{TaskProgress: p}) },
124-
func(p *rpc.DownloadProgress) { stream.Send(&rpc.CompileResp{DownloadProgress: p}) },
125123
)
126124
if err != nil {
127125
return err

rpc/compile.proto

-2
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,4 @@ message CompileReq {
4242
message CompileResp {
4343
bytes out_stream = 1;
4444
bytes err_stream = 2;
45-
DownloadProgress download_progress = 3;
46-
TaskProgress task_progress = 4;
4745
}

0 commit comments

Comments
 (0)