Remove Flavor from KernelVersionInfo

Also change to parsing it with regexp to keep things simple.

Docker-DCO-1.1-Signed-off-by: Charles Lindsay <chaz@chazomatic.us> (github: chazomaticus)
This commit is contained in:
Charles Lindsay 2014-01-20 19:20:33 -08:00
parent fc30346086
commit d2c9c1036b
2 changed files with 22 additions and 46 deletions

View File

@ -6,6 +6,7 @@ import (
"crypto/sha256" "crypto/sha256"
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"index/suffixarray" "index/suffixarray"
"io" "io"
@ -552,15 +553,10 @@ type KernelVersionInfo struct {
Kernel int Kernel int
Major int Major int
Minor int Minor int
Flavor string
} }
func (k *KernelVersionInfo) String() string { func (k *KernelVersionInfo) String() string {
flavor := "" return fmt.Sprintf("%d.%d.%d", k.Kernel, k.Major, k.Minor)
if len(k.Flavor) > 0 {
flavor = fmt.Sprintf("-%s", k.Flavor)
}
return fmt.Sprintf("%d.%d.%d%s", k.Kernel, k.Major, k.Minor, flavor)
} }
// Compare two KernelVersionInfo struct. // Compare two KernelVersionInfo struct.
@ -613,48 +609,28 @@ func GetKernelVersion() (*KernelVersionInfo, error) {
func ParseRelease(release string) (*KernelVersionInfo, error) { func ParseRelease(release string) (*KernelVersionInfo, error) {
var ( var (
flavor string parts [3]int
kernel, major, minor int err error
err error
) )
tmp := strings.SplitN(release, "-", 2) re := regexp.MustCompile(`^([0-9]+)\.([0-9]+)\.([0-9]+)`)
tmp2 := strings.Split(tmp[0], ".") subs := re.FindStringSubmatch(release)
if len(tmp2) > 0 { if len(subs) < 4 {
kernel, err = strconv.Atoi(tmp2[0]) return nil, errors.New("Can't parse kernel version " + release)
}
for i := 0; i < 3; i++ {
parts[i], err = strconv.Atoi(subs[i+1])
if err != nil { if err != nil {
return nil, err return nil, err
} }
} }
if len(tmp2) > 1 {
major, err = strconv.Atoi(tmp2[1])
if err != nil {
return nil, err
}
}
if len(tmp2) > 2 {
// Removes "+" because git kernels might set it
minorUnparsed := strings.Trim(tmp2[2], "+")
minor, err = strconv.Atoi(minorUnparsed)
if err != nil {
return nil, err
}
}
if len(tmp) == 2 {
flavor = tmp[1]
} else {
flavor = ""
}
return &KernelVersionInfo{ return &KernelVersionInfo{
Kernel: kernel, Kernel: parts[0],
Major: major, Major: parts[1],
Minor: minor, Minor: parts[2],
Flavor: flavor,
}, nil }, nil
} }

View File

@ -237,16 +237,16 @@ func TestCompareKernelVersion(t *testing.T) {
&KernelVersionInfo{Kernel: 2, Major: 6, Minor: 0}, &KernelVersionInfo{Kernel: 2, Major: 6, Minor: 0},
1) 1)
assertKernelVersion(t, assertKernelVersion(t,
&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "0"}, &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0},
&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "16"}, &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0},
0) 0)
assertKernelVersion(t, assertKernelVersion(t,
&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 5}, &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 5},
&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0}, &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0},
1) 1)
assertKernelVersion(t, assertKernelVersion(t,
&KernelVersionInfo{Kernel: 3, Major: 0, Minor: 20, Flavor: "25"}, &KernelVersionInfo{Kernel: 3, Major: 0, Minor: 20},
&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "0"}, &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0},
-1) -1)
} }
@ -412,9 +412,9 @@ func assertParseRelease(t *testing.T, release string, b *KernelVersionInfo, resu
func TestParseRelease(t *testing.T) { func TestParseRelease(t *testing.T) {
assertParseRelease(t, "3.8.0", &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0}, 0) assertParseRelease(t, "3.8.0", &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0}, 0)
assertParseRelease(t, "3.4.54.longterm-1", &KernelVersionInfo{Kernel: 3, Major: 4, Minor: 54}, 0) assertParseRelease(t, "3.4.54.longterm-1", &KernelVersionInfo{Kernel: 3, Major: 4, Minor: 54}, 0)
assertParseRelease(t, "3.4.54.longterm-1", &KernelVersionInfo{Kernel: 3, Major: 4, Minor: 54, Flavor: "1"}, 0) assertParseRelease(t, "3.4.54.longterm-1", &KernelVersionInfo{Kernel: 3, Major: 4, Minor: 54}, 0)
assertParseRelease(t, "3.8.0-19-generic", &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "19-generic"}, 0) assertParseRelease(t, "3.8.0-19-generic", &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0}, 0)
assertParseRelease(t, "3.12.8tag", &KernelVersionInfo{Kernel: 3, Major: 12, Minor: 8, Flavor: "tag"}, 0) assertParseRelease(t, "3.12.8tag", &KernelVersionInfo{Kernel: 3, Major: 12, Minor: 8}, 0)
} }
func TestParsePortMapping(t *testing.T) { func TestParsePortMapping(t *testing.T) {