summaryrefslogtreecommitdiffstats
path: root/pkg/gui/types/version_number.go
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/version_number.go
parentd12ceeb1ecac2bf9783f0febb48aca335805524a (diff)
Show popup message with breaking changes on startup
Diffstat (limited to 'pkg/gui/types/version_number.go')
-rw-r--r--pkg/gui/types/version_number.go41
1 files changed, 41 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
+}