From d9ac6d66535db98498924f33f370eba81385c2e0 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Wed, 25 Sep 2019 13:04:23 +0200 Subject: [PATCH] builder.GenBuildPath now tolerates missing sketch folder --- arduino/builder/builder.go | 16 ++++++++++------ arduino/builder/builder_test.go | 6 +++++- legacy/builder/builder.go | 7 +++---- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/arduino/builder/builder.go b/arduino/builder/builder.go index 02f264c383a..59e3ff8a02e 100644 --- a/arduino/builder/builder.go +++ b/arduino/builder/builder.go @@ -19,18 +19,22 @@ import ( "crypto/md5" "encoding/hex" "os" - "path/filepath" "strings" + "github.com/arduino/go-paths-helper" "github.com/pkg/errors" ) -// GenBuildPath generates a suitable name for the build folder -func GenBuildPath(sketchPath string) string { - md5SumBytes := md5.Sum([]byte(sketchPath)) +// GenBuildPath generates a suitable name for the build folder. +// The sketchPath, if not nil, is also used to furhter differentiate build paths. +func GenBuildPath(sketchPath *paths.Path) *paths.Path { + path := "" + if sketchPath != nil { + path = sketchPath.String() + } + md5SumBytes := md5.Sum([]byte(path)) md5Sum := strings.ToUpper(hex.EncodeToString(md5SumBytes[:])) - - return filepath.Join(os.TempDir(), "arduino-sketch-"+md5Sum) + return paths.TempDir().Join("arduino-sketch-" + md5Sum) } // EnsureBuildPathExists creates the build path if doesn't already exists. diff --git a/arduino/builder/builder_test.go b/arduino/builder/builder_test.go index 2048f75876d..f172ff9f469 100644 --- a/arduino/builder/builder_test.go +++ b/arduino/builder/builder_test.go @@ -23,6 +23,7 @@ import ( "testing" "github.com/arduino/arduino-cli/arduino/builder" + "github.com/arduino/go-paths-helper" "github.com/stretchr/testify/assert" ) @@ -36,7 +37,10 @@ func tmpDirOrDie() string { func TestGenBuildPath(t *testing.T) { want := filepath.Join(os.TempDir(), "arduino-sketch-ACBD18DB4CC2F85CEDEF654FCCC4A4D8") - assert.Equal(t, want, builder.GenBuildPath("foo")) + assert.Equal(t, want, builder.GenBuildPath(paths.New("foo")).String()) + + want = filepath.Join(os.TempDir(), "arduino-sketch-D41D8CD98F00B204E9800998ECF8427E") + assert.Equal(t, want, builder.GenBuildPath(nil).String()) } func TestEnsureBuildPathExists(t *testing.T) { diff --git a/legacy/builder/builder.go b/legacy/builder/builder.go index 39be76bbafb..98efad782c0 100644 --- a/legacy/builder/builder.go +++ b/legacy/builder/builder.go @@ -43,7 +43,6 @@ import ( "github.com/arduino/arduino-cli/legacy/builder/phases" "github.com/arduino/arduino-cli/legacy/builder/types" "github.com/arduino/arduino-cli/legacy/builder/utils" - "github.com/arduino/go-paths-helper" ) var MAIN_FILE_VALID_EXTENSIONS = map[string]bool{".ino": true, ".pde": true} @@ -58,7 +57,7 @@ type Builder struct{} func (s *Builder) Run(ctx *types.Context) error { if ctx.BuildPath == nil { - ctx.BuildPath = paths.New(bldr.GenBuildPath(ctx.SketchLocation.String())) + ctx.BuildPath = bldr.GenBuildPath(ctx.SketchLocation) } if err := bldr.EnsureBuildPathExists(ctx.BuildPath.String()); err != nil { @@ -150,7 +149,7 @@ type Preprocess struct{} func (s *Preprocess) Run(ctx *types.Context) error { if ctx.BuildPath == nil { - ctx.BuildPath = paths.New(bldr.GenBuildPath(ctx.SketchLocation.String())) + ctx.BuildPath = bldr.GenBuildPath(ctx.SketchLocation) } if err := bldr.EnsureBuildPathExists(ctx.BuildPath.String()); err != nil { @@ -186,7 +185,7 @@ type ParseHardwareAndDumpBuildProperties struct{} func (s *ParseHardwareAndDumpBuildProperties) Run(ctx *types.Context) error { if ctx.BuildPath == nil { - ctx.BuildPath = paths.New(bldr.GenBuildPath(ctx.SketchLocation.String())) + ctx.BuildPath = bldr.GenBuildPath(ctx.SketchLocation) } commands := []types.Command{