5
0
mirror of https://github.com/wailsapp/wails.git synced 2025-05-16 17:09:28 +08:00

fix: updating from pre to release

This commit is contained in:
Lea Anthony 2019-05-12 14:20:04 +10:00
parent 79ac4c1d45
commit 02199bbe9d
No known key found for this signature in database
GPG Key ID: 33DAF7BB90A58405
2 changed files with 43 additions and 4 deletions

View File

@ -1,6 +1,8 @@
package cmd package cmd
import ( import (
"fmt"
"github.com/masterminds/semver" "github.com/masterminds/semver"
) )
@ -50,6 +52,30 @@ func (s *SemanticVersion) IsGreaterThan(version *SemanticVersion) (bool, error)
return true, nil return true, nil
} }
// IsGreaterThanOrEqual returns true if this version is greater than or equal the given version
func (s *SemanticVersion) IsGreaterThanOrEqual(version *SemanticVersion) (bool, error) {
// Set up new constraint
constraint, err := semver.NewConstraint(">= " + version.Version.String())
if err != nil {
return false, err
}
// Check if the desired one is greater than the requested on
success, msgs := constraint.Validate(s.Version)
if !success {
return false, msgs[0]
}
return true, nil
}
// MainVersion returns the main version of any version+prerelease+metadata
// EG: MainVersion("1.2.3-pre") => "1.2.3"
func (s *SemanticVersion) MainVersion() *SemanticVersion {
mainVersion := fmt.Sprintf("%d.%d.%d", s.Version.Major(), s.Version.Minor(), s.Version.Patch())
result, _ := NewSemanticVersion(mainVersion)
return result
}
// SemverCollection is a collection of SemanticVersion objects // SemverCollection is a collection of SemanticVersion objects
type SemverCollection []*SemanticVersion type SemverCollection []*SemanticVersion

View File

@ -80,6 +80,8 @@ func init() {
func updateToVersion(targetVersion *cmd.SemanticVersion, force bool) error { func updateToVersion(targetVersion *cmd.SemanticVersion, force bool) error {
var targetVersionString = "v" + targetVersion.String()
// Early exit // Early exit
if targetVersion.String() == cmd.Version { if targetVersion.String() == cmd.Version {
logger.Green("Looks like you're up to date!") logger.Green("Looks like you're up to date!")
@ -97,16 +99,28 @@ func updateToVersion(targetVersion *cmd.SemanticVersion, force bool) error {
return err return err
} }
var success bool
// Release -> Pre-Release = Massage current version to prerelease format // Release -> Pre-Release = Massage current version to prerelease format
if targetVersion.IsPreRelease() && currentVersion.IsRelease() { if targetVersion.IsPreRelease() && currentVersion.IsRelease() {
currentVersion, err = cmd.NewSemanticVersion(compareVersion + "-0") currentVersion, err = cmd.NewSemanticVersion(compareVersion)
if err != nil {
return err
}
success, err = targetVersion.IsGreaterThan(currentVersion)
if err != nil { if err != nil {
return err return err
} }
} }
// Pre-Release -> Release = Massage target version to prerelease format // Pre-Release -> Release = Massage target version to prerelease format
if targetVersion.IsRelease() && currentVersion.IsPreRelease() { if targetVersion.IsRelease() && currentVersion.IsPreRelease() {
targetVersion, err = cmd.NewSemanticVersion(targetVersion.String() + "-0") // We are ok with greater than or equal
mainversion := currentVersion.MainVersion()
targetVersion, err = cmd.NewSemanticVersion(targetVersion.String())
if err != nil {
return err
}
success, err = targetVersion.IsGreaterThanOrEqual(mainversion)
if err != nil { if err != nil {
return err return err
} }
@ -115,10 +129,9 @@ func updateToVersion(targetVersion *cmd.SemanticVersion, force bool) error {
desiredVersion = "v" + targetVersion.String() desiredVersion = "v" + targetVersion.String()
// Compare // Compare
success, err := targetVersion.IsGreaterThan(currentVersion)
if !success { if !success {
logger.Red("The requested version is lower than the current version.") logger.Red("The requested version is lower than the current version.")
logger.Red("If this is what you really want to do, use `wails update -version %s`", desiredVersion) logger.Red("If this is what you really want to do, use `wails update -version %s`", targetVersionString)
return nil return nil
} }
} else { } else {