Skip to content

Commit 76ddec8

Browse files
Enable sketch archive overrides using overwrite flag (#1994)
* Make includeBuildDir private * Enable sketch archive override using the --overwrite flag * Add test to verify the changes
1 parent ab73719 commit 76ddec8

File tree

5 files changed

+316
-276
lines changed

5 files changed

+316
-276
lines changed

cli/sketch/archive.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ import (
3030
"github.com/spf13/cobra"
3131
)
3232

33-
var includeBuildDir bool
34-
3533
// initArchiveCommand creates a new `archive` command
3634
func initArchiveCommand() *cobra.Command {
35+
var includeBuildDir, overwrite bool
36+
3737
archiveCommand := &cobra.Command{
3838
Use: fmt.Sprintf("archive <%s> <%s>", tr("sketchPath"), tr("archivePath")),
3939
Short: tr("Creates a zip file containing all sketch files."),
@@ -45,15 +45,16 @@ func initArchiveCommand() *cobra.Command {
4545
" " + os.Args[0] + " archive /home/user/Arduino/MySketch\n" +
4646
" " + os.Args[0] + " archive /home/user/Arduino/MySketch /home/user/MySketchArchive.zip",
4747
Args: cobra.MaximumNArgs(2),
48-
Run: runArchiveCommand,
48+
Run: func(cmd *cobra.Command, args []string) { runArchiveCommand(args, includeBuildDir, overwrite) },
4949
}
5050

5151
archiveCommand.Flags().BoolVar(&includeBuildDir, "include-build-dir", false, tr("Includes %s directory in the archive.", "build"))
52+
archiveCommand.Flags().BoolVarP(&overwrite, "overwrite", "f", false, tr("Overwrites an already existing archive"))
5253

5354
return archiveCommand
5455
}
5556

56-
func runArchiveCommand(cmd *cobra.Command, args []string) {
57+
func runArchiveCommand(args []string, includeBuildDir bool, overwrite bool) {
5758
logrus.Info("Executing `arduino-cli sketch archive`")
5859

5960
sketchPath := paths.New(".")
@@ -73,6 +74,7 @@ func runArchiveCommand(cmd *cobra.Command, args []string) {
7374
SketchPath: sketchPath.String(),
7475
ArchivePath: archivePath,
7576
IncludeBuildDir: includeBuildDir,
77+
Overwrite: overwrite,
7678
})
7779

7880
if err != nil {

commands/sketch/archive.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,10 @@ func ArchiveSketch(ctx context.Context, req *rpc.ArchiveSketchRequest) (*rpc.Arc
6666
archivePath = paths.New(archivePath.String() + ".zip")
6767
}
6868

69-
if archivePath.Exist() {
70-
return nil, &arduino.InvalidArgumentError{Message: tr("Archive already exists")}
69+
if !req.Overwrite {
70+
if archivePath.Exist() {
71+
return nil, &arduino.InvalidArgumentError{Message: tr("Archive already exists")}
72+
}
7173
}
7274

7375
filesToZip, err := sketchPath.ReadDirRecursive()

internal/integrationtest/sketch/sketch_test.go

+23
Original file line numberDiff line numberDiff line change
@@ -388,3 +388,26 @@ func TestSketchNewDotArgOverwrite(t *testing.T) {
388388
require.NoError(t, err)
389389
require.FileExists(t, sketchPath.Join(sketchNew+".ino").String())
390390
}
391+
392+
func TestSketchArchiveOverwrite(t *testing.T) {
393+
env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t)
394+
defer env.CleanUp()
395+
396+
sketchName := "ArchiveSketchOverwrite"
397+
sketchPath := cli.SketchbookDir().Join(sketchName)
398+
399+
_, _, err := cli.Run("sketch", "new", sketchPath.String())
400+
require.NoError(t, err)
401+
402+
_, _, err = cli.Run("sketch", "archive", sketchPath.String())
403+
require.NoError(t, err)
404+
405+
// It is not possibile to override an archive by default
406+
_, stderr, err := cli.Run("sketch", "archive", sketchPath.String())
407+
require.Error(t, err)
408+
require.Contains(t, string(stderr), "Archive already exists")
409+
410+
// Override is enabled by the "overwrite" flag
411+
_, _, err = cli.Run("sketch", "archive", sketchPath.String(), "--overwrite")
412+
require.NoError(t, err)
413+
}

0 commit comments

Comments
 (0)