GODT-1977: fix launcher for v2 to v3 updates.

This commit is contained in:
Jakub
2022-11-03 14:01:26 +01:00
committed by James Houlahan
parent 34213d1607
commit c08d0eff7a
8 changed files with 79 additions and 17 deletions

View File

@ -61,3 +61,7 @@ func (i *InstallerDarwin) InstallUpdate(_ *semver.Version, r io.Reader) error {
return syncFolders(oldBundle, newBundle)
}
func (i *InstallerDarwin) IsAlreadyInstalled(version *semver.Version) bool {
return false
}

View File

@ -25,6 +25,7 @@ import (
"github.com/Masterminds/semver/v3"
"github.com/ProtonMail/proton-bridge/v2/internal/versioner"
"github.com/sirupsen/logrus"
)
type InstallerDefault struct {
@ -40,3 +41,15 @@ func NewInstaller(versioner *versioner.Versioner) *InstallerDefault {
func (i *InstallerDefault) InstallUpdate(version *semver.Version, r io.Reader) error {
return i.versioner.InstallNewVersion(version, r)
}
func (i *InstallerDefault) IsAlreadyInstalled(version *semver.Version) bool {
versions, err := i.versioner.ListVersions()
if err != nil {
logrus.WithField("version", version).
WithError(err).Error("Failed to determine whether version is installed")
return false
}
return versions.HasVersion(version)
}

View File

@ -30,8 +30,9 @@ import (
)
var (
ErrDownloadVerify = errors.New("failed to download or verify the update")
ErrInstall = errors.New("failed to install the update")
ErrDownloadVerify = errors.New("failed to download or verify the update")
ErrInstall = errors.New("failed to install the update")
ErrUpdateAlreadyInstalled = errors.New("update is already installed")
)
type Downloader interface {
@ -39,6 +40,7 @@ type Downloader interface {
}
type Installer interface {
IsAlreadyInstalled(*semver.Version) bool
InstallUpdate(*semver.Version, io.Reader) error
}
@ -84,6 +86,10 @@ func (u *Updater) GetVersionInfo(ctx context.Context, downloader Downloader, cha
}
func (u *Updater) InstallUpdate(ctx context.Context, downloader Downloader, update VersionInfo) error {
if u.installer.IsAlreadyInstalled(update.Version) {
return ErrUpdateAlreadyInstalled
}
b, err := downloader.DownloadAndVerify(
ctx,
u.verifier,