1
0

feat: use semver wrapper to match debian release

This commit is contained in:
dump_stack() 2023-05-14 17:14:05 +00:00
parent b09b51840c
commit 2452b090b0
Signed by: dump_stack
GPG Key ID: BE44DA8C062D87DC
2 changed files with 20 additions and 86 deletions

View File

@ -4,7 +4,6 @@ import (
"errors" "errors"
"fmt" "fmt"
"regexp" "regexp"
"strconv"
"strings" "strings"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
@ -69,79 +68,39 @@ func releaseFromString(s string) (r Release) {
return return
} }
func parseKernelMajorMinor(deb string) (major, minor int, err error) { func kernelRelease(deb string) (r Release, err error) {
// linux-image-4.17.0-2-amd64 -> 4.17 // linux-image-4.17.0-2-amd64 -> 4.17
re := regexp.MustCompile(`([0-9]*\.[0-9]*)`) re := regexp.MustCompile(`([0-9]*\.[0-9]*)`)
sver := re.FindString(deb)
s := re.FindString(deb) if sver == "" {
if s == "" {
err = errors.New("empty result") err = errors.New("empty result")
return return
} }
version := kver(sver)
split := strings.Split(s, ".") if version.LessThan(kver("3.0-rc0")) {
if len(split) != 2 {
err = errors.New("unexpected input")
return
}
major, err = strconv.Atoi(split[0])
if err != nil {
return
}
minor, err = strconv.Atoi(split[1])
if err != nil {
return
}
return
}
func kernelRelease(deb string) (r Release, err error) {
major, minor, err := parseKernelMajorMinor(deb)
if err != nil {
return
}
// Wheezy 3.2
// Jessie 3.16
// Stretch 4.9
// Buster 4.19
// Bullseye 5.10
if major < 3 {
err = errors.New("not supported") err = errors.New("not supported")
return return
} }
switch major { if version.LessThan(kver("3.8-rc0")) {
case 3: // Wheezy 3.2
//if minor < 16 {
// >=3.8 breaks initramfs-tools << 0.110~ // >=3.8 breaks initramfs-tools << 0.110~
// Wheezy initramfs-tools version is 0.109.1 // Wheezy initramfs-tools version is 0.109.1
if minor < 8 {
r = Wheezy r = Wheezy
} else { } else if version.LessThan(kver("4.9-rc0")) {
// Jessie 3.16
r = Jessie r = Jessie
} } else if version.LessThan(kver("4.19-rc0")) {
case 4: // Stretch 4.9
if minor < 9 {
r = Jessie
} else if minor < 19 {
r = Stretch r = Stretch
} else { } else if version.LessThan(kver("5.10-rc0")) {
r = Buster // Buster 4.19
}
case 5:
if minor < 10 {
r = Buster r = Buster
} else { } else {
// Bullseye 5.10
r = Bullseye r = Bullseye
} }
default:
r = Bullseye // latest release
}
return return
} }

View File

@ -34,31 +34,6 @@ func TestMatchImagePkg(t *testing.T) {
} }
} }
func TestParseKernelMajorMinor(t *testing.T) {
type testcase struct {
Deb string
Major, Minor int
}
for _, tc := range []testcase{
testcase{"linux-image-4.17.0-2-amd64", 4, 17},
testcase{"linux-image-6.1.0-8-amd64-unsigned", 6, 1},
testcase{"linux-image-6.1.0-0.deb11.7-amd64-unsigned", 6, 1},
testcase{"linux-image-3.2.0-0.bpo.4-amd64_3.2.41-2+deb7u2~bpo60+1_amd64", 3, 2},
testcase{"linux-image-5.16.0-rc5-amd64-unsigned_5.16~rc5-1~exp1_amd64", 5, 16},
testcase{"linux-image-3.6-trunk-amd64_3.8.4-1~experimental.1_amd64", 3, 6},
} {
major, minor, err := parseKernelMajorMinor(tc.Deb)
if err != nil {
t.Fatal(err)
}
if major != tc.Major || minor != tc.Minor {
t.Fatalf("%v -> %v.%v != %v.%v", tc.Deb, major, minor,
tc.Major, tc.Minor)
}
}
}
func TestKernelRelease(t *testing.T) { func TestKernelRelease(t *testing.T) {
type testcase struct { type testcase struct {
Deb string Deb string