mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2025-03-05 20:49:04 -08:00
feat(upgrade): do not upgrade to major versions automatically
resolves #5273
This commit is contained in:
parent
cdfd249b28
commit
55bc366a8a
|
@ -57,6 +57,13 @@ var upgradeCmd = &cobra.Command{
|
||||||
|
|
||||||
version := fmt.Sprintf("v%s", build.Version)
|
version := fmt.Sprintf("v%s", build.Version)
|
||||||
|
|
||||||
|
if upgrade.IsMajorUpgrade(build.Version, latest) {
|
||||||
|
message := terminal.StopProgress()
|
||||||
|
message += fmt.Sprintf("\n🚨 major upgrade available: %s -> %s, use oh-my-posh upgrade --force to upgrade\n\n", version, latest)
|
||||||
|
fmt.Print(message)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if version != latest {
|
if version != latest {
|
||||||
executeUpgrade(latest)
|
executeUpgrade(latest)
|
||||||
return
|
return
|
||||||
|
|
|
@ -2,6 +2,7 @@ package upgrade
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/charmbracelet/bubbles/spinner"
|
"github.com/charmbracelet/bubbles/spinner"
|
||||||
tea "github.com/charmbracelet/bubbletea"
|
tea "github.com/charmbracelet/bubbletea"
|
||||||
|
@ -144,3 +145,15 @@ func Run(latest string) error {
|
||||||
|
|
||||||
return programModel.error
|
return programModel.error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func IsMajorUpgrade(current, latest string) bool {
|
||||||
|
if len(current) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
getMajorNumber := func(version string) string {
|
||||||
|
return strings.Split(version, ".")[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
return getMajorNumber(current) != getMajorNumber(latest)
|
||||||
|
}
|
||||||
|
|
25
src/upgrade/cli_test.go
Normal file
25
src/upgrade/cli_test.go
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
package upgrade
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestIsMajorUpgrade(t *testing.T) {
|
||||||
|
cases := []struct {
|
||||||
|
Case string
|
||||||
|
Expected bool
|
||||||
|
CurrentVersion string
|
||||||
|
LatestVersion string
|
||||||
|
}{
|
||||||
|
{Case: "Same version", Expected: false, CurrentVersion: "v3.0.0", LatestVersion: "v3.0.0"},
|
||||||
|
{Case: "Breaking change", Expected: true, CurrentVersion: "v3.0.0", LatestVersion: "v4.0.0"},
|
||||||
|
{Case: "Empty version, mostly development build", Expected: false, LatestVersion: "v4.0.0"},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range cases {
|
||||||
|
canUpgrade := IsMajorUpgrade(tc.CurrentVersion, tc.LatestVersion)
|
||||||
|
assert.Equal(t, tc.Expected, canUpgrade, tc.Case)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue