mirror of
https://github.com/ddworken/hishtory.git
synced 2025-02-24 14:31:11 +01:00
Add struct + functions for parsing hishtory versions
This commit is contained in:
parent
eb1bc99a22
commit
6cfbec4823
@ -613,3 +613,32 @@ func deserializeSubmitResponse(t *testing.T, w *httptest.ResponseRecorder) share
|
||||
require.NoError(t, json.Unmarshal(w.Body.Bytes(), &submitResponse))
|
||||
return submitResponse
|
||||
}
|
||||
|
||||
func TestParseVersionString(t *testing.T) {
|
||||
p, err := parseVersionString("v0.200")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, parsedVersion{majorVersion: 0, minorVersion: 200}, p)
|
||||
p, err = parseVersionString("v1.200")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, parsedVersion{majorVersion: 1, minorVersion: 200}, p)
|
||||
p, err = parseVersionString("v1.0")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, parsedVersion{majorVersion: 1, minorVersion: 0}, p)
|
||||
p, err = parseVersionString("v0.216")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, parsedVersion{majorVersion: 0, minorVersion: 216}, p)
|
||||
p, err = parseVersionString("v123.456")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, parsedVersion{majorVersion: 123, minorVersion: 456}, p)
|
||||
}
|
||||
|
||||
func TestVersionLessThan(t *testing.T) {
|
||||
require.False(t, parsedVersion{0, 200}.lessThan(parsedVersion{0, 200}))
|
||||
require.False(t, parsedVersion{1, 200}.lessThan(parsedVersion{1, 200}))
|
||||
require.False(t, parsedVersion{0, 201}.lessThan(parsedVersion{0, 200}))
|
||||
require.False(t, parsedVersion{1, 0}.lessThan(parsedVersion{0, 200}))
|
||||
require.True(t, parsedVersion{0, 199}.lessThan(parsedVersion{0, 200}))
|
||||
require.True(t, parsedVersion{0, 200}.lessThan(parsedVersion{0, 205}))
|
||||
require.True(t, parsedVersion{1, 200}.lessThan(parsedVersion{1, 205}))
|
||||
require.True(t, parsedVersion{0, 200}.lessThan(parsedVersion{1, 1}))
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ import (
|
||||
"net/http"
|
||||
pprofhttp "net/http/pprof"
|
||||
"os"
|
||||
"regexp"
|
||||
"runtime"
|
||||
"strconv"
|
||||
|
||||
@ -98,3 +99,35 @@ func checkGormError(err error) {
|
||||
_, filename, line, _ := runtime.Caller(1)
|
||||
panic(fmt.Sprintf("DB error at %s:%d: %v", filename, line, err))
|
||||
}
|
||||
|
||||
type parsedVersion struct {
|
||||
majorVersion int
|
||||
minorVersion int
|
||||
}
|
||||
|
||||
func (pv parsedVersion) lessThan(other parsedVersion) bool {
|
||||
if pv.majorVersion != other.majorVersion {
|
||||
return pv.majorVersion < other.majorVersion
|
||||
}
|
||||
return pv.minorVersion < other.minorVersion
|
||||
}
|
||||
|
||||
func parseVersionString(versionString string) (parsedVersion, error) {
|
||||
re := regexp.MustCompile(`v(\d+)[.](\d+)`)
|
||||
matches := re.FindAllStringSubmatch(versionString, -1)
|
||||
if len(matches) != 1 {
|
||||
return parsedVersion{}, fmt.Errorf("failed to parse version=%#v (matches=%#v)", versionString, matches)
|
||||
}
|
||||
if len(matches[0]) != 3 {
|
||||
return parsedVersion{}, fmt.Errorf("failed to parse version=%#v (matches[0]=%#v)", versionString, matches[0])
|
||||
}
|
||||
majorVersion, err := strconv.Atoi(matches[0][1])
|
||||
if err != nil {
|
||||
return parsedVersion{}, fmt.Errorf("failed to parse major version %#v", matches[0][1])
|
||||
}
|
||||
minorVersion, err := strconv.Atoi(matches[0][2])
|
||||
if err != nil {
|
||||
return parsedVersion{}, fmt.Errorf("failed to parse minor version %#v", matches[0][2])
|
||||
}
|
||||
return parsedVersion{majorVersion, minorVersion}, nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user