| | |
| | | |
| | | import ( |
| | | "encoding/json" |
| | | "errors" |
| | | "flag" |
| | | "fmt" |
| | | "math" |
| | | "os" |
| | | "strconv" |
| | | "strings" |
| | | ) |
| | | |
| | | type ( |
| | | VaVersion int64 |
| | | ) |
| | | |
| | | var ( |
| | |
| | | } |
| | | } |
| | | |
| | | 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") |
| | |
| | | |
| | | num := (majorVersion << 32) | (minorVersion << 16) | buildNumber |
| | | |
| | | return num, nil |
| | | return VaVersion(num), nil |
| | | } |