Skip to content

Commit 55ea796

Browse files
committed
not working draft of core install
1 parent 62ba83a commit 55ea796

File tree

10 files changed

+164
-18
lines changed

10 files changed

+164
-18
lines changed

cmd/arduino_core.go

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,12 +204,43 @@ func executeCoreInstallCommand(cmd *cobra.Command, args []string) error {
204204
}
205205

206206
IDTuples := cores.ParseArgs(args)
207-
coresToDownload, failOutputs := status.Process(IDTuples)
207+
coresToDownload, toolsToDownload, failOutputs := status.Process(IDTuples)
208208
outputResults := output.CoreProcessResults{
209209
Cores: failOutputs,
210210
}
211+
212+
releases.ParallelDownload(toolsToDownload, false, "Installed", GlobalFlags.Verbose, &outputResults.Tools, "tool")
213+
// while downloading the cores, install the tools.
214+
go func() {
215+
for i, item := range toolsToDownload {
216+
err = cores.InstallTool(item.Name, item.Release)
217+
if err != nil {
218+
outputResults.Tools[i] = output.ProcessResult{
219+
ItemName: item.Name,
220+
Status: "",
221+
Error: err.Error(),
222+
}
223+
}
224+
}
225+
}()
211226
releases.ParallelDownload(coresToDownload, false, "Installed", GlobalFlags.Verbose, &outputResults.Cores, "core")
212-
// TODO : install
227+
228+
root, err := common.GetDefaultPkgFolder()
229+
if err != nil {
230+
formatter.PrintErrorMessage("Cannot get core install path, try again.")
231+
return nil
232+
}
233+
234+
for i, item := range coresToDownload {
235+
err = cores.Install(item.Name, item.Release)
236+
if err != nil {
237+
outputResults.Cores[i] = output.ProcessResult{
238+
ItemName: item.Name,
239+
Status: "",
240+
Error: err.Error(),
241+
}
242+
}
243+
}
213244
return nil
214245
}
215246

cmd/arduino_lib.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -199,14 +199,21 @@ func executeInstallCommand(cmd *cobra.Command, args []string) error {
199199
}
200200
releases.ParallelDownload(libsToDownload, false, "Installed", GlobalFlags.Verbose, &outputResults.Libraries, "library")
201201

202+
folder, err := common.GetDefaultLibFolder()
203+
if err != nil {
204+
formatter.PrintErrorMessage("Cannot get default lib install path, try again.")
205+
return nil
206+
}
207+
202208
for i, item := range libsToDownload {
203-
err = libraries.InstallLib(item.Name, item.Release)
209+
err = libraries.Install(item.Name, item.Release)
204210
if err != nil {
205211
outputResults.Libraries[i] = output.ProcessResult{
206212
ItemName: item.Name,
207-
Status: "",
208-
Error: err.Error(),
213+
Error: err.Error()
209214
}
215+
} else {
216+
outputResults.Libraries[i].Path
210217
}
211218
}
212219

common/releases/helpers.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,12 @@ import (
4545

4646
// IsCached returns a bool representing if the release has already been downloaded
4747
func IsCached(release Release) bool {
48-
stagingFolder, err := release.GetDownloadCacheFolder()
48+
archivePath, err := ArchivePath(release)
4949
if err != nil {
5050
return false
5151
}
5252

53-
_, err = os.Stat(filepath.Join(stagingFolder, release.ArchiveName()))
53+
_, err = os.Stat(archivePath)
5454
return !os.IsNotExist(err)
5555
}
5656

common/releases/interfaces.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,6 @@ type Release interface {
4141
ArchiveSize() int64
4242
// GetDownloadCacheFolder returns the path of the staging folders for this release.
4343
GetDownloadCacheFolder() (string, error)
44+
// VersionName represents the version of the release.
45+
VersionName() string
4446
}

cores/cores.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,3 +172,8 @@ func (release Release) ArchiveURL() string {
172172
func (release Release) GetDownloadCacheFolder() (string, error) {
173173
return common.GetDownloadCacheFolder("packages")
174174
}
175+
176+
// VersionName represents the version of the release.
177+
func (release Release) VersionName() string {
178+
return release.Version
179+
}

cores/install_uninstall.go

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package cores
2+
3+
import (
4+
"archive/zip"
5+
"errors"
6+
"io/ioutil"
7+
"os"
8+
9+
"github.com/bcmi-labs/arduino-cli/common"
10+
"github.com/bcmi-labs/arduino-cli/common/releases"
11+
"github.com/codeclysm/extract"
12+
)
13+
14+
// Install installs a specific release of a core.
15+
func Install(packager, name string, release releases.Release) error {
16+
if release == nil {
17+
return errors.New("Not existing version of the core")
18+
}
19+
20+
coresFolder, err := common.GetDefaultCoresFolder(packager)
21+
if err != nil {
22+
return err
23+
}
24+
25+
cacheFilePath, err := releases.ArchivePath(release)
26+
if err != nil {
27+
return err
28+
}
29+
30+
tempFolder, err := ioutil.TempDir("cores", name)
31+
if err != nil {
32+
return err
33+
}
34+
35+
file, err := os.Open(cacheFilePath)
36+
if err != nil {
37+
return err
38+
}
39+
40+
extract.Archive(file, tempFolder, nil)
41+
42+
purgeTempDir()
43+
moveTempDir()
44+
45+
return nil
46+
}
47+
48+
// Install installs a library.
49+
func Install(name string, release releases.Release) error {
50+
if release == nil {
51+
return errors.New("Not existing version of the library")
52+
}
53+
54+
/*
55+
installedRelease, err := library.InstalledRelease()
56+
if err != nil {
57+
return err
58+
}
59+
if installedRelease != nil {
60+
//if installedRelease.Version != library.Latest().Version {
61+
err := removeRelease(library.Name, installedRelease)
62+
if err != nil {
63+
return err
64+
}
65+
//} else {
66+
// return nil // Already installed and latest version.
67+
//}
68+
}
69+
*/
70+
libFolder, err := common.GetDefaultLibFolder()
71+
if err != nil {
72+
return err
73+
}
74+
75+
cacheFilePath, err := release.ArchivePath()
76+
if err != nil {
77+
return err
78+
}
79+
80+
zipArchive, err := zip.OpenReader(cacheFilePath)
81+
if err != nil {
82+
return err
83+
}
84+
defer zipArchive.Close()
85+
86+
err = common.Unzip(zipArchive, libFolder)
87+
if err != nil {
88+
return err
89+
}
90+
91+
return nil
92+
}

cores/status.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,10 @@ func (sc StatusContext) GetDeps(release *Release) ([]CoreDependency, error) {
139139
// Process takes a set of ID tuples and returns
140140
// a set of items to download and a set of outputs for non
141141
// existing cores.
142-
func (sc StatusContext) Process(items []CoreIDTuple) ([]releases.DownloadItem, []output.ProcessResult) {
142+
func (sc StatusContext) Process(items []CoreIDTuple) ([]releases.DownloadItem, []releases.DownloadItem, []output.ProcessResult) {
143143
itemC := len(items)
144-
ret := make([]releases.DownloadItem, 0, itemC)
144+
retCores := make([]releases.DownloadItem, 0, itemC)
145+
retTools := make([]releases.DownloadItem, 0, itemC)
145146
fails := make([]output.ProcessResult, 0, itemC)
146147

147148
// value is not used, this map is only to check if an item is inside (set implementation)
@@ -192,12 +193,12 @@ func (sc StatusContext) Process(items []CoreIDTuple) ([]releases.DownloadItem, [
192193
if err != nil {
193194
fails = append(fails, output.ProcessResult{
194195
ItemName: item.CoreName,
195-
Error: fmt.Sprintf("Tool %s not found", err.Error()),
196+
Error: fmt.Sprintf("Cannot get tool dependencies of %s core: %s", core.Name, err.Error()),
196197
})
197198
continue
198199
}
199200

200-
ret = append(ret, releases.DownloadItem{
201+
ret = append(retCores, releases.DownloadItem{
201202
Name: core.Name,
202203
Release: release,
203204
})
@@ -210,11 +211,11 @@ func (sc StatusContext) Process(items []CoreIDTuple) ([]releases.DownloadItem, [
210211
}
211212

212213
presenceMap[tool.ToolName] = true
213-
ret = append(ret, releases.DownloadItem{
214+
retTools = append(retTools, releases.DownloadItem{
214215
Name: tool.ToolName,
215216
Release: tool.Release,
216217
})
217218
}
218219
}
219-
return ret, fails
220+
return retCores, retTools, fails
220221
}

cores/tools.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,3 +202,8 @@ func (tr ToolRelease) ArchiveSize() int64 {
202202
func (tr ToolRelease) GetDownloadCacheFolder() (string, error) {
203203
return common.GetDownloadCacheFolder("packages")
204204
}
205+
206+
// VersionName represents the version of the release.
207+
func (tr ToolRelease) VersionName() string {
208+
return tr.Version
209+
}

libraries/install_uninstall.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ import (
4545
// Uninstall a library means remove its directory.
4646
var Uninstall = os.RemoveAll
4747

48-
// InstallLib installs a library.
49-
func InstallLib(name string, release releases.Release) error {
48+
// Install installs a library.
49+
func Install(name string, release releases.Release) error {
5050
if release == nil {
5151
return errors.New("Not existing version of the library")
5252
}
@@ -72,13 +72,11 @@ func InstallLib(name string, release releases.Release) error {
7272
return err
7373
}
7474

75-
stagingFolder, err := release.GetDownloadCacheFolder()
75+
cacheFilePath, err := releases.ArchivePath(release)
7676
if err != nil {
7777
return err
7878
}
7979

80-
cacheFilePath := filepath.Join(stagingFolder, release.ArchiveName())
81-
8280
zipArchive, err := zip.OpenReader(cacheFilePath)
8381
if err != nil {
8482
return err

libraries/libraries.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,3 +223,8 @@ func (r Release) ExpectedChecksum() string {
223223
func (r Release) GetDownloadCacheFolder() (string, error) {
224224
return common.GetDownloadCacheFolder("libraries")
225225
}
226+
227+
// VersionName represents the version of the release.
228+
func (r Release) VersionName() string {
229+
return r.Version
230+
}

0 commit comments

Comments
 (0)