From 1097e9e700a127f445ee4d138af2d51435390d43 Mon Sep 17 00:00:00 2001
From: yanghui <yanghui@aiotlink.com>
Date: 星期五, 14 五月 2021 16:01:50 +0800
Subject: [PATCH] add compare
---
version.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 46 insertions(+), 8 deletions(-)
diff --git a/version.go b/version.go
index 84b00eb..627ecf5 100644
--- a/version.go
+++ b/version.go
@@ -2,12 +2,17 @@
import (
"encoding/json"
+ "errors"
"flag"
"fmt"
"math"
"os"
"strconv"
"strings"
+)
+
+type (
+ VaVersion int64
)
var (
@@ -39,21 +44,54 @@
}
}
-func VersionCode2Name(version int64) (string, error) {
- if version < 0 {
- return "", errors.New("Version can't be negetive")
+func (v VaVersion) Valid() bool {
+ if v < 0 {
+ return false
}
- majorVersion := version >> 32
- minorVersion := (version >> 16) & 0xffff
- buildNumber := version & 0xffff
+ majorVersion := v >> 32
+ if majorVersion > math.MaxUint16 {
+ return false
+ }
+
+ return true
+}
+
+func (v VaVersion) Compare(v1 VaVersion) (int, error) {
+ if !v.Valid() {
+ return 0, errors.New("Invalid VaVersion left value")
+ }
+
+ if !v1.Valid() {
+ return 0, errors.New("Invalid VaVersion right value")
+ }
+
+ if v > v1 {
+ return 1, nil
+ }
+
+ if v < v1 {
+ return -1, nil
+ }
+
+ return 0, nil
+}
+
+func (v VaVersion) String() (string, error) {
+ if !v.Valid() {
+ return "", errors.New("Invalid VaVersion value")
+ }
+
+ majorVersion := (v >> 32) & 0xffff
+ minorVersion := (v >> 16) & 0xffff
+ buildNumber := v & 0xffff
name := fmt.Sprintf("%d.%d.%d", majorVersion, minorVersion, buildNumber)
return name, nil
}
-func VersionName2Code(version string) (int64, error) {
+func VersionName2VaVersion(version string) (VaVersion, error) {
subVersions := strings.Split(version, ".")
if len(subVersions) != 3 {
return 0, errors.New("Incorrect version format, version formats like 1.12.3")
@@ -88,5 +126,5 @@
num := (majorVersion << 32) | (minorVersion << 16) | buildNumber
- return num, nil
+ return VaVersion(num), nil
}
--
Gitblit v1.8.0