| | |
| | | "encoding/json" |
| | | "flag" |
| | | "fmt" |
| | | "math" |
| | | "os" |
| | | "strconv" |
| | | "strings" |
| | | ) |
| | | |
| | | var ( |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | func VersionCode2Name(version int64) (string, error) { |
| | | if version < 0 { |
| | | return "", errors.New("Version can't be negetive") |
| | | } |
| | | |
| | | majorVersion := version >> 32 |
| | | minorVersion := (version >> 16) & 0xffff |
| | | buildNumber := version & 0xffff |
| | | |
| | | name := fmt.Sprintf("%d.%d.%d", majorVersion, minorVersion, buildNumber) |
| | | |
| | | return name, nil |
| | | } |
| | | |
| | | func VersionName2Code(version string) (int64, error) { |
| | | subVersions := strings.Split(version, ".") |
| | | if len(subVersions) != 3 { |
| | | return 0, errors.New("Incorrect version format, version formats like 1.12.3") |
| | | } |
| | | |
| | | majorVersion, err := strconv.ParseInt(subVersions[0], 10, 64) |
| | | if nil != err { |
| | | return 0, errors.New(version + " major part can't be parsed, version formats like 1.12.3") |
| | | } |
| | | |
| | | minorVersion, err := strconv.ParseInt(subVersions[1], 10, 64) |
| | | if nil != err { |
| | | return 0, errors.New(version + " minor part can't be parsed, version formats like 1.12.3") |
| | | } |
| | | |
| | | buildNumber, err := strconv.ParseInt(subVersions[2], 10, 64) |
| | | if nil != err { |
| | | return 0, errors.New(version + " build number part can't be parsed, version formats like 1.12.3") |
| | | } |
| | | |
| | | if majorVersion > math.MaxUint16 { |
| | | return 0, errors.New(version + " major version too large, max value is:" + strconv.Itoa(math.MaxUint16)) |
| | | } |
| | | |
| | | if minorVersion > math.MaxUint16 { |
| | | return 0, errors.New(version + " minor version too large, max value is:" + strconv.Itoa(math.MaxUint16)) |
| | | } |
| | | |
| | | if buildNumber > math.MaxUint16 { |
| | | return 0, errors.New(version + " build number too large, max value is:" + strconv.Itoa(math.MaxUint16)) |
| | | } |
| | | |
| | | num := (majorVersion << 32) | (minorVersion << 16) | buildNumber |
| | | |
| | | return num, nil |
| | | } |