Skip to content

Commit a12a269

Browse files
committed
Moved the reminder of PackageManager functions to Explorer or Builder
1 parent 3be9f91 commit a12a269

File tree

10 files changed

+66
-62
lines changed

10 files changed

+66
-62
lines changed

arduino/cores/packagemanager/download.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ func (platform *PlatformReference) String() string {
4343

4444
// FindPlatform returns the Platform matching the PlatformReference or nil if not found.
4545
// The PlatformVersion field of the reference is ignored.
46-
func (pm *PackageManager) FindPlatform(ref *PlatformReference) *cores.Platform {
47-
targetPackage, ok := pm.packages[ref.Package]
46+
func (pme *Explorer) FindPlatform(ref *PlatformReference) *cores.Platform {
47+
targetPackage, ok := pme.packages[ref.Package]
4848
if !ok {
4949
return nil
5050
}
@@ -56,8 +56,8 @@ func (pm *PackageManager) FindPlatform(ref *PlatformReference) *cores.Platform {
5656
}
5757

5858
// FindPlatformRelease returns the PlatformRelease matching the PlatformReference or nil if not found
59-
func (pm *PackageManager) FindPlatformRelease(ref *PlatformReference) *cores.PlatformRelease {
60-
platform := pm.FindPlatform(ref)
59+
func (pme *Explorer) FindPlatformRelease(ref *PlatformReference) *cores.PlatformRelease {
60+
platform := pme.FindPlatform(ref)
6161
if platform == nil {
6262
return nil
6363
}
@@ -70,8 +70,8 @@ func (pm *PackageManager) FindPlatformRelease(ref *PlatformReference) *cores.Pla
7070

7171
// FindPlatformReleaseDependencies takes a PlatformReference and returns a set of items to download and
7272
// a set of outputs for non existing platforms.
73-
func (pm *PackageManager) FindPlatformReleaseDependencies(item *PlatformReference) (*cores.PlatformRelease, []*cores.ToolRelease, error) {
74-
targetPackage, exists := pm.packages[item.Package]
73+
func (pme *Explorer) FindPlatformReleaseDependencies(item *PlatformReference) (*cores.PlatformRelease, []*cores.ToolRelease, error) {
74+
targetPackage, exists := pme.packages[item.Package]
7575
if !exists {
7676
return nil, nil, fmt.Errorf(tr("package %s not found"), item.Package)
7777
}
@@ -94,22 +94,22 @@ func (pm *PackageManager) FindPlatformReleaseDependencies(item *PlatformReferenc
9494
}
9595

9696
// replaces "latest" with latest version too
97-
toolDeps, err := pm.packages.GetPlatformReleaseToolDependencies(release)
97+
toolDeps, err := pme.packages.GetPlatformReleaseToolDependencies(release)
9898
if err != nil {
9999
return nil, nil, fmt.Errorf(tr("getting tool dependencies for platform %[1]s: %[2]s"), release.String(), err)
100100
}
101101

102102
// discovery dependencies differ from normal tool since we always want to use the latest
103103
// available version for the platform package
104-
discoveryDependencies, err := pm.packages.GetPlatformReleaseDiscoveryDependencies(release)
104+
discoveryDependencies, err := pme.packages.GetPlatformReleaseDiscoveryDependencies(release)
105105
if err != nil {
106106
return nil, nil, fmt.Errorf(tr("getting discovery dependencies for platform %[1]s: %[2]s"), release.String(), err)
107107
}
108108
toolDeps = append(toolDeps, discoveryDependencies...)
109109

110110
// monitor dependencies differ from normal tool since we always want to use the latest
111111
// available version for the platform package
112-
monitorDependencies, err := pm.packages.GetPlatformReleaseMonitorDependencies(release)
112+
monitorDependencies, err := pme.packages.GetPlatformReleaseMonitorDependencies(release)
113113
if err != nil {
114114
return nil, nil, fmt.Errorf(tr("getting monitor dependencies for platform %[1]s: %[2]s"), release.String(), err)
115115
}
@@ -120,14 +120,14 @@ func (pm *PackageManager) FindPlatformReleaseDependencies(item *PlatformReferenc
120120

121121
// DownloadToolRelease downloads a ToolRelease. If the tool is already downloaded a nil Downloader
122122
// is returned. Uses the given downloader configuration for download, or the default config if nil.
123-
func (pm *PackageManager) DownloadToolRelease(tool *cores.ToolRelease, config *downloader.Config, progressCB rpc.DownloadProgressCB) error {
123+
func (pme *Explorer) DownloadToolRelease(tool *cores.ToolRelease, config *downloader.Config, progressCB rpc.DownloadProgressCB) error {
124124
resource := tool.GetCompatibleFlavour()
125125
if resource == nil {
126126
return &arduino.FailedDownloadError{
127127
Message: tr("Error downloading tool %s", tool),
128128
Cause: errors.New(tr("no versions available for the current OS"))}
129129
}
130-
if err := resource.Download(pm.DownloadDir, config, tool.String(), progressCB); err != nil {
130+
if err := resource.Download(pme.DownloadDir, config, tool.String(), progressCB); err != nil {
131131
return &arduino.FailedDownloadError{
132132
Message: tr("Error downloading tool %s", tool),
133133
Cause: err}
@@ -137,9 +137,9 @@ func (pm *PackageManager) DownloadToolRelease(tool *cores.ToolRelease, config *d
137137

138138
// DownloadPlatformRelease downloads a PlatformRelease. If the platform is already downloaded a
139139
// nil Downloader is returned.
140-
func (pm *PackageManager) DownloadPlatformRelease(platform *cores.PlatformRelease, config *downloader.Config, progressCB rpc.DownloadProgressCB) error {
140+
func (pme *Explorer) DownloadPlatformRelease(platform *cores.PlatformRelease, config *downloader.Config, progressCB rpc.DownloadProgressCB) error {
141141
if platform.Resource == nil {
142142
return &arduino.PlatformNotFoundError{Platform: platform.String()}
143143
}
144-
return platform.Resource.Download(pm.DownloadDir, config, platform.String(), progressCB)
144+
return platform.Resource.Download(pme.DownloadDir, config, platform.String(), progressCB)
145145
}

arduino/cores/packagemanager/install_uninstall.go

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -185,32 +185,32 @@ func (pme *Explorer) DownloadAndInstallPlatformAndTools(
185185
}
186186

187187
// InstallPlatform installs a specific release of a platform.
188-
func (pm *PackageManager) InstallPlatform(platformRelease *cores.PlatformRelease) error {
189-
destDir := pm.PackagesDir.Join(
188+
func (pme *Explorer) InstallPlatform(platformRelease *cores.PlatformRelease) error {
189+
destDir := pme.PackagesDir.Join(
190190
platformRelease.Platform.Package.Name,
191191
"hardware",
192192
platformRelease.Platform.Architecture,
193193
platformRelease.Version.String())
194-
return pm.InstallPlatformInDirectory(platformRelease, destDir)
194+
return pme.InstallPlatformInDirectory(platformRelease, destDir)
195195
}
196196

197197
// InstallPlatformInDirectory installs a specific release of a platform in a specific directory.
198-
func (pm *PackageManager) InstallPlatformInDirectory(platformRelease *cores.PlatformRelease, destDir *paths.Path) error {
199-
if err := platformRelease.Resource.Install(pm.DownloadDir, pm.tempDir, destDir); err != nil {
198+
func (pme *Explorer) InstallPlatformInDirectory(platformRelease *cores.PlatformRelease, destDir *paths.Path) error {
199+
if err := platformRelease.Resource.Install(pme.DownloadDir, pme.tempDir, destDir); err != nil {
200200
return errors.Errorf(tr("installing platform %[1]s: %[2]s"), platformRelease, err)
201201
}
202202
if d, err := destDir.Abs(); err == nil {
203203
platformRelease.InstallDir = d
204204
} else {
205205
return err
206206
}
207-
if err := pm.cacheInstalledJSON(platformRelease); err != nil {
207+
if err := pme.cacheInstalledJSON(platformRelease); err != nil {
208208
return errors.Errorf(tr("creating installed.json in %[1]s: %[2]s"), platformRelease.InstallDir, err)
209209
}
210210
return nil
211211
}
212212

213-
func (pm *PackageManager) cacheInstalledJSON(platformRelease *cores.PlatformRelease) error {
213+
func (pme *Explorer) cacheInstalledJSON(platformRelease *cores.PlatformRelease) error {
214214
index := packageindex.IndexFromPlatformRelease(platformRelease)
215215
platformJSON, err := json.MarshalIndent(index, "", " ")
216216
if err != nil {
@@ -246,15 +246,15 @@ func (pme *Explorer) RunPostInstallScript(platformRelease *cores.PlatformRelease
246246
}
247247

248248
// IsManagedPlatformRelease returns true if the PlatforRelease is managed by the PackageManager
249-
func (pm *PackageManager) IsManagedPlatformRelease(platformRelease *cores.PlatformRelease) bool {
250-
if pm.PackagesDir == nil {
249+
func (pme *Explorer) IsManagedPlatformRelease(platformRelease *cores.PlatformRelease) bool {
250+
if pme.PackagesDir == nil {
251251
return false
252252
}
253253
installDir := platformRelease.InstallDir.Clone()
254254
if installDir.FollowSymLink() != nil {
255255
return false
256256
}
257-
packagesDir := pm.PackagesDir.Clone()
257+
packagesDir := pme.PackagesDir.Clone()
258258
if packagesDir.FollowSymLink() != nil {
259259
return false
260260
}
@@ -266,8 +266,8 @@ func (pm *PackageManager) IsManagedPlatformRelease(platformRelease *cores.Platfo
266266
}
267267

268268
// UninstallPlatform remove a PlatformRelease.
269-
func (pm *PackageManager) UninstallPlatform(platformRelease *cores.PlatformRelease, taskCB rpc.TaskProgressCB) error {
270-
log := pm.log.WithField("platform", platformRelease)
269+
func (pme *Explorer) UninstallPlatform(platformRelease *cores.PlatformRelease, taskCB rpc.TaskProgressCB) error {
270+
log := pme.log.WithField("platform", platformRelease)
271271

272272
log.Info("Uninstalling platform")
273273
taskCB(&rpc.TaskProgress{Name: tr("Uninstalling %s", platformRelease)})
@@ -279,7 +279,7 @@ func (pm *PackageManager) UninstallPlatform(platformRelease *cores.PlatformRelea
279279
}
280280

281281
// Safety measure
282-
if !pm.IsManagedPlatformRelease(platformRelease) {
282+
if !pme.IsManagedPlatformRelease(platformRelease) {
283283
err := fmt.Errorf(tr("%s is not managed by package manager"), platformRelease)
284284
log.WithError(err).Error("Error uninstalling")
285285
return &arduino.FailedUninstallError{Message: err.Error()}
@@ -299,8 +299,8 @@ func (pm *PackageManager) UninstallPlatform(platformRelease *cores.PlatformRelea
299299
}
300300

301301
// InstallTool installs a specific release of a tool.
302-
func (pm *PackageManager) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.TaskProgressCB) error {
303-
log := pm.log.WithField("Tool", toolRelease)
302+
func (pme *Explorer) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc.TaskProgressCB) error {
303+
log := pme.log.WithField("Tool", toolRelease)
304304

305305
if toolRelease.IsInstalled() {
306306
log.Warn("Tool already installed")
@@ -315,12 +315,12 @@ func (pm *PackageManager) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc
315315
if toolResource == nil {
316316
return fmt.Errorf(tr("no compatible version of %s tools found for the current os"), toolRelease.Tool.Name)
317317
}
318-
destDir := pm.PackagesDir.Join(
318+
destDir := pme.PackagesDir.Join(
319319
toolRelease.Tool.Package.Name,
320320
"tools",
321321
toolRelease.Tool.Name,
322322
toolRelease.Version.String())
323-
err := toolResource.Install(pm.DownloadDir, pm.tempDir, destDir)
323+
err := toolResource.Install(pme.DownloadDir, pme.tempDir, destDir)
324324
if err != nil {
325325
log.WithError(err).Warn("Cannot install tool")
326326
return &arduino.FailedInstallError{Message: tr("Cannot install tool %s", toolRelease), Cause: err}
@@ -332,15 +332,15 @@ func (pm *PackageManager) InstallTool(toolRelease *cores.ToolRelease, taskCB rpc
332332
}
333333

334334
// IsManagedToolRelease returns true if the ToolRelease is managed by the PackageManager
335-
func (pm *PackageManager) IsManagedToolRelease(toolRelease *cores.ToolRelease) bool {
336-
if pm.PackagesDir == nil {
335+
func (pme *Explorer) IsManagedToolRelease(toolRelease *cores.ToolRelease) bool {
336+
if pme.PackagesDir == nil {
337337
return false
338338
}
339339
installDir := toolRelease.InstallDir.Clone()
340340
if installDir.FollowSymLink() != nil {
341341
return false
342342
}
343-
packagesDir := pm.PackagesDir.Clone()
343+
packagesDir := pme.PackagesDir.Clone()
344344
if packagesDir.FollowSymLink() != nil {
345345
return false
346346
}
@@ -352,16 +352,16 @@ func (pm *PackageManager) IsManagedToolRelease(toolRelease *cores.ToolRelease) b
352352
}
353353

354354
// UninstallTool remove a ToolRelease.
355-
func (pm *PackageManager) UninstallTool(toolRelease *cores.ToolRelease, taskCB rpc.TaskProgressCB) error {
356-
log := pm.log.WithField("Tool", toolRelease)
355+
func (pme *Explorer) UninstallTool(toolRelease *cores.ToolRelease, taskCB rpc.TaskProgressCB) error {
356+
log := pme.log.WithField("Tool", toolRelease)
357357
log.Info("Uninstalling tool")
358358

359359
if toolRelease.InstallDir == nil {
360360
return fmt.Errorf(tr("tool not installed"))
361361
}
362362

363363
// Safety measure
364-
if !pm.IsManagedToolRelease(toolRelease) {
364+
if !pme.IsManagedToolRelease(toolRelease) {
365365
err := &arduino.FailedUninstallError{Message: tr("tool %s is not managed by package manager", toolRelease)}
366366
log.WithError(err).Error("Error uninstalling")
367367
return err

arduino/cores/packagemanager/package_manager_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,8 +469,10 @@ func TestFindPlatformReleaseDependencies(t *testing.T) {
469469
pmb := packagemanager.NewBuilder(nil, nil, nil, nil, "test")
470470
pmb.LoadPackageIndexFromFile(paths.New("testdata", "package_tooltest_index.json"))
471471
pm := pmb.Build()
472+
pme, release := pm.NewExplorer()
473+
defer release()
472474

473-
pl, tools, err := pm.FindPlatformReleaseDependencies(&packagemanager.PlatformReference{Package: "test", PlatformArchitecture: "avr"})
475+
pl, tools, err := pme.FindPlatformReleaseDependencies(&packagemanager.PlatformReference{Package: "test", PlatformArchitecture: "avr"})
474476
require.NoError(t, err)
475477
require.NotNil(t, pl)
476478
require.Len(t, tools, 3)

arduino/cores/packagemanager/profiles.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,16 +122,18 @@ func (pmb *Builder) installMissingProfilePlatform(platformRef *sketch.ProfilePla
122122
tmpPlatform := tmpTargetPackage.GetOrCreatePlatform(platformRef.Architecture)
123123
tmpPlatformRelease := tmpPlatform.GetOrCreateRelease(platformRef.Version)
124124
tmpPm := tmpPmb.Build()
125+
tmpPme, tmpRelease := tmpPm.NewExplorer()
126+
defer tmpRelease()
125127

126-
if err := tmpPm.DownloadPlatformRelease(tmpPlatformRelease, nil, downloadCB); err != nil {
128+
if err := tmpPme.DownloadPlatformRelease(tmpPlatformRelease, nil, downloadCB); err != nil {
127129
taskCB(&rpc.TaskProgress{Name: tr("Error downloading platform %s", tmpPlatformRelease)})
128130
return &arduino.FailedInstallError{Message: tr("Error downloading platform %s", tmpPlatformRelease), Cause: err}
129131
}
130132
taskCB(&rpc.TaskProgress{Completed: true})
131133

132134
// Perform install
133135
taskCB(&rpc.TaskProgress{Name: tr("Installing platform %s", tmpPlatformRelease)})
134-
if err := tmpPm.InstallPlatformInDirectory(tmpPlatformRelease, destDir); err != nil {
136+
if err := tmpPme.InstallPlatformInDirectory(tmpPlatformRelease, destDir); err != nil {
135137
taskCB(&rpc.TaskProgress{Name: tr("Error installing platform %s", tmpPlatformRelease)})
136138
return &arduino.FailedInstallError{Message: tr("Error installing platform %s", tmpPlatformRelease), Cause: err}
137139
}

cli/compile/compile.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -345,11 +345,13 @@ func runCompileCommand(cmd *cobra.Command, args []string) {
345345
panic(tr("Platform ID is not correct"))
346346
}
347347

348-
pm := commands.GetPackageManager(inst.GetId())
349-
platform := pm.FindPlatform(&packagemanager.PlatformReference{
348+
// FIXME: Here we should not access PackageManager...
349+
pme, release := commands.GetPackageManagerExplorer(compileRequest)
350+
platform := pme.FindPlatform(&packagemanager.PlatformReference{
350351
Package: split[0],
351352
PlatformArchitecture: split[1],
352353
})
354+
release()
353355

354356
if profileArg.String() == "" {
355357
if platform != nil {

cli/lib/upgrade.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/arduino/arduino-cli/cli/instance"
2424
"github.com/arduino/arduino-cli/cli/output"
2525
"github.com/arduino/arduino-cli/commands/lib"
26+
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
2627
"github.com/sirupsen/logrus"
2728
"github.com/spf13/cobra"
2829
)
@@ -46,7 +47,7 @@ func runUpgradeCommand(cmd *cobra.Command, args []string) {
4647
logrus.Info("Executing `arduino-cli lib upgrade`")
4748

4849
if len(args) == 0 {
49-
err := lib.LibraryUpgradeAll(instance.Id, output.ProgressBar(), output.TaskProgress())
50+
err := lib.LibraryUpgradeAll(&rpc.LibraryUpgradeAllRequest{Instance: instance}, output.ProgressBar(), output.TaskProgress())
5051
if err != nil {
5152
feedback.Errorf(tr("Error upgrading libraries: %v"), err)
5253
os.Exit(errorcodes.ErrGeneric)

cli/upload/upload.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,13 @@ func runUploadCommand(command *cobra.Command, args []string) {
121121
panic(tr("Platform ID is not correct"))
122122
}
123123

124-
pm := commands.GetPackageManager(instance.GetId())
125-
platform := pm.FindPlatform(&packagemanager.PlatformReference{
124+
// FIXME: Here we must not access package manager...
125+
pme, release := commands.GetPackageManagerExplorer(&rpc.UploadRequest{Instance: instance})
126+
platform := pme.FindPlatform(&packagemanager.PlatformReference{
126127
Package: split[0],
127128
PlatformArchitecture: split[1],
128129
})
130+
release()
129131

130132
if platform != nil {
131133
feedback.Errorf(tr("Try running %s", fmt.Sprintf("`%s core install %s`", globals.VersionInfo.Application, platformErr.Platform)))

commands/core/download.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@ var tr = i18n.Tr
2929

3030
// PlatformDownload FIXMEDOC
3131
func PlatformDownload(ctx context.Context, req *rpc.PlatformDownloadRequest, downloadCB rpc.DownloadProgressCB) (*rpc.PlatformDownloadResponse, error) {
32-
pm := commands.GetPackageManager(req.GetInstance().GetId())
33-
if pm == nil {
32+
pme, release := commands.GetPackageManagerExplorer(req)
33+
if pme == nil {
3434
return nil, &arduino.InvalidInstanceError{}
3535
}
36+
defer release()
3637

3738
version, err := commands.ParseVersion(req)
3839
if err != nil {
@@ -44,17 +45,17 @@ func PlatformDownload(ctx context.Context, req *rpc.PlatformDownloadRequest, dow
4445
PlatformArchitecture: req.Architecture,
4546
PlatformVersion: version,
4647
}
47-
platform, tools, err := pm.FindPlatformReleaseDependencies(ref)
48+
platform, tools, err := pme.FindPlatformReleaseDependencies(ref)
4849
if err != nil {
4950
return nil, &arduino.PlatformNotFoundError{Platform: ref.String(), Cause: err}
5051
}
5152

52-
if err := pm.DownloadPlatformRelease(platform, nil, downloadCB); err != nil {
53+
if err := pme.DownloadPlatformRelease(platform, nil, downloadCB); err != nil {
5354
return nil, err
5455
}
5556

5657
for _, tool := range tools {
57-
if err := pm.DownloadToolRelease(tool, nil, downloadCB); err != nil {
58+
if err := pme.DownloadToolRelease(tool, nil, downloadCB); err != nil {
5859
return nil, err
5960
}
6061
}

commands/instances.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,16 +129,16 @@ func GetLibraryManager(id int32) *librariesmanager.LibrariesManager {
129129
return i.lm
130130
}
131131

132-
func (instance *CoreInstance) installToolIfMissing(tool *cores.ToolRelease, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) (bool, error) {
132+
func installToolIfMissing(pme *packagemanager.Explorer, tool *cores.ToolRelease, downloadCB rpc.DownloadProgressCB, taskCB rpc.TaskProgressCB) (bool, error) {
133133
if tool.IsInstalled() {
134134
return false, nil
135135
}
136136
taskCB(&rpc.TaskProgress{Name: tr("Downloading missing tool %s", tool)})
137-
if err := instance.pm.DownloadToolRelease(tool, nil, downloadCB); err != nil {
137+
if err := pme.DownloadToolRelease(tool, nil, downloadCB); err != nil {
138138
return false, fmt.Errorf(tr("downloading %[1]s tool: %[2]s"), tool, err)
139139
}
140140
taskCB(&rpc.TaskProgress{Completed: true})
141-
if err := instance.pm.InstallTool(tool, taskCB); err != nil {
141+
if err := pme.InstallTool(tool, taskCB); err != nil {
142142
return false, fmt.Errorf(tr("installing %[1]s tool: %[2]s"), tool, err)
143143
}
144144
return true, nil

0 commit comments

Comments
 (0)