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:
41
pkg/gui/types/version_number.go
Normal file
41
pkg/gui/types/version_number.go
Normal 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
|
||||
}
|
81
pkg/gui/types/version_number_test.go
Normal file
81
pkg/gui/types/version_number_test.go
Normal 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)
|
||||
})
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user