summaryrefslogtreecommitdiffstats
path: root/pkg/gui/types
diff options
context:
space:
mode:
authorStefan Haller <stefan@haller-berlin.de>2024-03-10 20:59:11 +0100
committerStefan Haller <stefan@haller-berlin.de>2024-03-12 13:27:14 +0100
commit2f4437591e9a6e2d7ce46a1a9607762bf2fd002a (patch)
treed24293aceb6c8b3fad58805ac18bb838620a173d /pkg/gui/types
parentd12ceeb1ecac2bf9783f0febb48aca335805524a (diff)
Show popup message with breaking changes on startup
Diffstat (limited to 'pkg/gui/types')
-rw-r--r--pkg/gui/types/version_number.go41
-rw-r--r--pkg/gui/types/version_number_test.go81
2 files changed, 122 insertions, 0 deletions
diff --git a/pkg/gui/types/version_number.go b/pkg/gui/types/version_number.go
new file mode 100644
index 000000000..ae51a2722
--- /dev/null
+++ b/pkg/gui/types/version_number.go
@@ -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
+}
diff --git a/pkg/gui/types/version_number_test.go b/pkg/gui/types/version_number_test.go
new file mode 100644
index 000000000..407a01139
--- /dev/null
+++ b/pkg/gui/types/version_number_test.go
@@ -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)
+ })
+ }
+}