1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-09-16 09:16:26 +02:00

Show popup message with breaking changes on startup

This commit is contained in:
Stefan Haller
2024-03-10 20:59:11 +01:00
parent d12ceeb1ec
commit 2f4437591e
6 changed files with 226 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
package types
import (
"errors"
"regexp"
"strconv"
)
type VersionNumber struct {
Major, Minor, Patch int
}
func (v *VersionNumber) IsOlderThan(otherVersion *VersionNumber) bool {
this := v.Major*1000*1000 + v.Minor*1000 + v.Patch
other := otherVersion.Major*1000*1000 + otherVersion.Minor*1000 + otherVersion.Patch
return this < other
}
func ParseVersionNumber(versionStr string) (*VersionNumber, error) {
re := regexp.MustCompile(`^v?(\d+)\.(\d+)(?:\.(\d+))?$`)
matches := re.FindStringSubmatch(versionStr)
if matches == nil {
return nil, errors.New("unexpected version format: " + versionStr)
}
v := &VersionNumber{}
var err error
if v.Major, err = strconv.Atoi(matches[1]); err != nil {
return nil, err
}
if v.Minor, err = strconv.Atoi(matches[2]); err != nil {
return nil, err
}
if len(matches[3]) > 0 {
if v.Patch, err = strconv.Atoi(matches[3]); err != nil {
return nil, err
}
}
return v, nil
}

View File

@@ -0,0 +1,81 @@
package types
import (
"errors"
"testing"
"github.com/stretchr/testify/assert"
)
func TestParseVersionNumber(t *testing.T) {
tests := []struct {
versionStr string
expected *VersionNumber
err error
}{
{
versionStr: "1.2.3",
expected: &VersionNumber{
Major: 1,
Minor: 2,
Patch: 3,
},
err: nil,
},
{
versionStr: "v1.2.3",
expected: &VersionNumber{
Major: 1,
Minor: 2,
Patch: 3,
},
err: nil,
},
{
versionStr: "12.34.56",
expected: &VersionNumber{
Major: 12,
Minor: 34,
Patch: 56,
},
err: nil,
},
{
versionStr: "1.2",
expected: &VersionNumber{
Major: 1,
Minor: 2,
Patch: 0,
},
err: nil,
},
{
versionStr: "1",
expected: nil,
err: errors.New("unexpected version format: 1"),
},
{
versionStr: "invalid",
expected: nil,
err: errors.New("unexpected version format: invalid"),
},
{
versionStr: "junk_before 1.2.3",
expected: nil,
err: errors.New("unexpected version format: junk_before 1.2.3"),
},
{
versionStr: "1.2.3 junk_after",
expected: nil,
err: errors.New("unexpected version format: 1.2.3 junk_after"),
},
}
for _, test := range tests {
t.Run(test.versionStr, func(t *testing.T) {
actual, err := ParseVersionNumber(test.versionStr)
assert.Equal(t, test.expected, actual)
assert.Equal(t, test.err, err)
})
}
}