diff --git a/internal/libraries/repoclone.go b/internal/libraries/repoclone.go index 8b804578..0e8c64dd 100644 --- a/internal/libraries/repoclone.go +++ b/internal/libraries/repoclone.go @@ -31,6 +31,7 @@ import ( "github.com/arduino/go-paths-helper" "github.com/arduino/libraries-repository-engine/internal/backup" "github.com/arduino/libraries-repository-engine/internal/configuration" + "github.com/arduino/libraries-repository-engine/internal/feedback" "github.com/arduino/libraries-repository-engine/internal/libraries/db" "fmt" @@ -145,12 +146,21 @@ func BackupAndDeleteGitClone(config *configuration.Config, repoMeta *Repo) error return err } gitClonePath := paths.New(config.GitClonesFolder, gitCloneSubfolder) - - if err := backup.Backup(gitClonePath); err != nil { - return fmt.Errorf("While backing up library's Git clone: %w", err) + // The library's clone folder may be removed by the sync process under expected circumstances. + // So its absence does not necessarily imply a problem. + gitClonePathExists, err := gitClonePath.ExistCheck() + if err != nil { + return err } - if err := gitClonePath.RemoveAll(); err != nil { - return fmt.Errorf("While removing library Git clone: %s", err) + if gitClonePathExists { + if err := backup.Backup(gitClonePath); err != nil { + return fmt.Errorf("While backing up library's Git clone: %w", err) + } + if err := gitClonePath.RemoveAll(); err != nil { + return fmt.Errorf("While removing library Git clone: %s", err) + } + } else { + feedback.Warningf("Library Git clone folder %s not present", gitClonePath) } return nil diff --git a/internal/libraries/repoclone_test.go b/internal/libraries/repoclone_test.go index a2b77b6c..193e40d3 100644 --- a/internal/libraries/repoclone_test.go +++ b/internal/libraries/repoclone_test.go @@ -65,7 +65,7 @@ func TestBackupAndDeleteGitClone(t *testing.T) { URL: "https://github.com/Foo/Bar.git", } - assert.Error(t, BackupAndDeleteGitClone(&config, &repoMeta), "Error if library clone folder did not exist.") + assert.Nil(t, BackupAndDeleteGitClone(&config, &repoMeta), "Return nil if library clone folder did not exist.") gitCloneSubfolder, err := repoMeta.AsFolder() require.NoError(t, err)