From 79f2e138b020b340de017d005711d14af097eb28 Mon Sep 17 00:00:00 2001 From: Gulshan Singh Date: Sun, 8 Oct 2023 12:20:53 +0000 Subject: [PATCH 1/4] Add directories.template config option --- configuration/defaults.go | 1 + internal/cli/config/validate.go | 1 + 2 files changed, 2 insertions(+) diff --git a/configuration/defaults.go b/configuration/defaults.go index be1a0088a62..2363e4a6df2 100644 --- a/configuration/defaults.go +++ b/configuration/defaults.go @@ -38,6 +38,7 @@ func SetDefaults(settings *viper.Viper) { // arduino directories settings.SetDefault("directories.Data", getDefaultArduinoDataDir()) settings.SetDefault("directories.Downloads", filepath.Join(getDefaultArduinoDataDir(), "staging")) + settings.SetDefault("directories.Template", "") settings.SetDefault("directories.User", getDefaultUserDir()) // Sketch compilation diff --git a/internal/cli/config/validate.go b/internal/cli/config/validate.go index f494bfaac0b..41de03bba1f 100644 --- a/internal/cli/config/validate.go +++ b/internal/cli/config/validate.go @@ -27,6 +27,7 @@ var validMap = map[string]reflect.Kind{ "daemon.port": reflect.String, "directories.data": reflect.String, "directories.downloads": reflect.String, + "directories.template": reflect.String, "directories.user": reflect.String, "directories.builtin.tools": reflect.String, "directories.builtin.libraries": reflect.String, From 78a742a0e5fd2f1600880558ffbbbe01a63dc746 Mon Sep 17 00:00:00 2001 From: Gulshan Singh Date: Sun, 8 Oct 2023 12:22:30 +0000 Subject: [PATCH 2/4] Create sketch from template if template directory is set --- commands/sketch/new.go | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/commands/sketch/new.go b/commands/sketch/new.go index b4fe3ab0e82..ce3273644dc 100644 --- a/commands/sketch/new.go +++ b/commands/sketch/new.go @@ -55,19 +55,32 @@ func NewSketch(ctx context.Context, req *rpc.NewSketchRequest) (*rpc.NewSketchRe return nil, err } + templateDir := configuration.Settings.GetString("directories.template") sketchDirPath := paths.New(sketchesDir).Join(req.SketchName) - if err := sketchDirPath.MkdirAll(); err != nil { - return nil, &arduino.CantCreateSketchError{Cause: err} - } - sketchName := sketchDirPath.Base() - sketchMainFilePath := sketchDirPath.Join(sketchName + globals.MainFileValidExtension) - if !req.Overwrite { - if sketchMainFilePath.Exist() { - return nil, &arduino.CantCreateSketchError{Cause: errors.New(tr(".ino file already exists"))} + + var sketchMainFilePath *paths.Path + if templateDir != "" { + templateDirPath := paths.New(templateDir) + if err := templateDirPath.CopyDirTo(sketchDirPath); err != nil { + return nil, &arduino.CantCreateSketchError{Cause: err} + } + // TODO: Make this customizable? + sketchMainFilePath = sketchDirPath.Join("main.ino") + } else { + if err := sketchDirPath.MkdirAll(); err != nil { + return nil, &arduino.CantCreateSketchError{Cause: err} + } + sketchName := sketchDirPath.Base() + sketchMainFilePath = sketchDirPath.Join(sketchName + globals.MainFileValidExtension) + if !req.Overwrite { + if sketchMainFilePath.Exist() { + return nil, &arduino.CantCreateSketchError{Cause: errors.New(tr(".ino file already exists"))} + } + } + + if err := sketchMainFilePath.WriteFile(emptySketch); err != nil { + return nil, &arduino.CantCreateSketchError{Cause: err} } - } - if err := sketchMainFilePath.WriteFile(emptySketch); err != nil { - return nil, &arduino.CantCreateSketchError{Cause: err} } return &rpc.NewSketchResponse{MainFile: sketchMainFilePath.String()}, nil From ff796f3caa1c9632e879d78247904c5cbab0308e Mon Sep 17 00:00:00 2001 From: Gulshan Singh Date: Thu, 19 Oct 2023 10:46:00 +0000 Subject: [PATCH 3/4] Change directories.template to sketch.template --- commands/sketch/new.go | 10 +++------- configuration/defaults.go | 3 ++- internal/cli/config/validate.go | 2 +- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/commands/sketch/new.go b/commands/sketch/new.go index ce3273644dc..1e318d85039 100644 --- a/commands/sketch/new.go +++ b/commands/sketch/new.go @@ -55,29 +55,25 @@ func NewSketch(ctx context.Context, req *rpc.NewSketchRequest) (*rpc.NewSketchRe return nil, err } - templateDir := configuration.Settings.GetString("directories.template") + templateDir := configuration.Settings.GetString("sketch.template") sketchDirPath := paths.New(sketchesDir).Join(req.SketchName) + sketchName := sketchDirPath.Base() + sketchMainFilePath := sketchDirPath.Join(sketchName + globals.MainFileValidExtension) - var sketchMainFilePath *paths.Path if templateDir != "" { templateDirPath := paths.New(templateDir) if err := templateDirPath.CopyDirTo(sketchDirPath); err != nil { return nil, &arduino.CantCreateSketchError{Cause: err} } - // TODO: Make this customizable? - sketchMainFilePath = sketchDirPath.Join("main.ino") } else { if err := sketchDirPath.MkdirAll(); err != nil { return nil, &arduino.CantCreateSketchError{Cause: err} } - sketchName := sketchDirPath.Base() - sketchMainFilePath = sketchDirPath.Join(sketchName + globals.MainFileValidExtension) if !req.Overwrite { if sketchMainFilePath.Exist() { return nil, &arduino.CantCreateSketchError{Cause: errors.New(tr(".ino file already exists"))} } } - if err := sketchMainFilePath.WriteFile(emptySketch); err != nil { return nil, &arduino.CantCreateSketchError{Cause: err} } diff --git a/configuration/defaults.go b/configuration/defaults.go index 2363e4a6df2..bc9a8f5b331 100644 --- a/configuration/defaults.go +++ b/configuration/defaults.go @@ -38,7 +38,6 @@ func SetDefaults(settings *viper.Viper) { // arduino directories settings.SetDefault("directories.Data", getDefaultArduinoDataDir()) settings.SetDefault("directories.Downloads", filepath.Join(getDefaultArduinoDataDir(), "staging")) - settings.SetDefault("directories.Template", "") settings.SetDefault("directories.User", getDefaultUserDir()) // Sketch compilation @@ -70,4 +69,6 @@ func SetDefaults(settings *viper.Viper) { settings.BindEnv("directories.Downloads", "ARDUINO_DOWNLOADS_DIR") settings.BindEnv("directories.Data", "ARDUINO_DATA_DIR") settings.BindEnv("sketch.always_export_binaries", "ARDUINO_SKETCH_ALWAYS_EXPORT_BINARIES") + + settings.SetDefault("sketch.template", "") } diff --git a/internal/cli/config/validate.go b/internal/cli/config/validate.go index 41de03bba1f..c16e4a4be59 100644 --- a/internal/cli/config/validate.go +++ b/internal/cli/config/validate.go @@ -27,7 +27,6 @@ var validMap = map[string]reflect.Kind{ "daemon.port": reflect.String, "directories.data": reflect.String, "directories.downloads": reflect.String, - "directories.template": reflect.String, "directories.user": reflect.String, "directories.builtin.tools": reflect.String, "directories.builtin.libraries": reflect.String, @@ -37,6 +36,7 @@ var validMap = map[string]reflect.Kind{ "logging.format": reflect.String, "logging.level": reflect.String, "sketch.always_export_binaries": reflect.Bool, + "sketch.template": reflect.String, "metrics.addr": reflect.String, "metrics.enabled": reflect.Bool, "network.proxy": reflect.String, From de7c948f5471618ebcf277807c39d62411b5f49b Mon Sep 17 00:00:00 2001 From: Gulshan Singh Date: Thu, 19 Oct 2023 11:05:41 +0000 Subject: [PATCH 4/4] Rename main template ino file --- commands/sketch/new.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/commands/sketch/new.go b/commands/sketch/new.go index 1e318d85039..e91444e2e59 100644 --- a/commands/sketch/new.go +++ b/commands/sketch/new.go @@ -65,6 +65,11 @@ func NewSketch(ctx context.Context, req *rpc.NewSketchRequest) (*rpc.NewSketchRe if err := templateDirPath.CopyDirTo(sketchDirPath); err != nil { return nil, &arduino.CantCreateSketchError{Cause: err} } + + oldMainFilePath := sketchDirPath.Join(templateDirPath.Base() + globals.MainFileValidExtension) + if err := oldMainFilePath.Rename(sketchMainFilePath); err != nil { + return nil, &arduino.CantCreateSketchError{Cause: err} + } } else { if err := sketchDirPath.MkdirAll(); err != nil { return nil, &arduino.CantCreateSketchError{Cause: err}