Browse code

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)

Charles Lindsay authored on 2014/01/21 12:20:33
Showing 2 changed files
... ...
@@ -6,6 +6,7 @@ import (
6 6
 	"crypto/sha256"
7 7
 	"encoding/hex"
8 8
 	"encoding/json"
9
+	"errors"
9 10
 	"fmt"
10 11
 	"index/suffixarray"
11 12
 	"io"
... ...
@@ -552,15 +553,10 @@ type KernelVersionInfo struct {
552 552
 	Kernel int
553 553
 	Major  int
554 554
 	Minor  int
555
-	Flavor string
556 555
 }
557 556
 
558 557
 func (k *KernelVersionInfo) String() string {
559
-	flavor := ""
560
-	if len(k.Flavor) > 0 {
561
-		flavor = fmt.Sprintf("-%s", k.Flavor)
562
-	}
563
-	return fmt.Sprintf("%d.%d.%d%s", k.Kernel, k.Major, k.Minor, flavor)
558
+	return fmt.Sprintf("%d.%d.%d", k.Kernel, k.Major, k.Minor)
564 559
 }
565 560
 
566 561
 // Compare two KernelVersionInfo struct.
... ...
@@ -613,48 +609,28 @@ func GetKernelVersion() (*KernelVersionInfo, error) {
613 613
 
614 614
 func ParseRelease(release string) (*KernelVersionInfo, error) {
615 615
 	var (
616
-		flavor               string
617
-		kernel, major, minor int
618
-		err                  error
616
+		parts [3]int
617
+		err   error
619 618
 	)
620 619
 
621
-	tmp := strings.SplitN(release, "-", 2)
622
-	tmp2 := strings.Split(tmp[0], ".")
623
-
624
-	if len(tmp2) > 0 {
625
-		kernel, err = strconv.Atoi(tmp2[0])
626
-		if err != nil {
627
-			return nil, err
628
-		}
629
-	}
620
+	re := regexp.MustCompile(`^([0-9]+)\.([0-9]+)\.([0-9]+)`)
621
+	subs := re.FindStringSubmatch(release)
630 622
 
631
-	if len(tmp2) > 1 {
632
-		major, err = strconv.Atoi(tmp2[1])
633
-		if err != nil {
634
-			return nil, err
635
-		}
623
+	if len(subs) < 4 {
624
+		return nil, errors.New("Can't parse kernel version " + release)
636 625
 	}
637 626
 
638
-	if len(tmp2) > 2 {
639
-		// Removes "+" because git kernels might set it
640
-		minorUnparsed := strings.Trim(tmp2[2], "+")
641
-		minor, err = strconv.Atoi(minorUnparsed)
627
+	for i := 0; i < 3; i++ {
628
+		parts[i], err = strconv.Atoi(subs[i+1])
642 629
 		if err != nil {
643 630
 			return nil, err
644 631
 		}
645 632
 	}
646 633
 
647
-	if len(tmp) == 2 {
648
-		flavor = tmp[1]
649
-	} else {
650
-		flavor = ""
651
-	}
652
-
653 634
 	return &KernelVersionInfo{
654
-		Kernel: kernel,
655
-		Major:  major,
656
-		Minor:  minor,
657
-		Flavor: flavor,
635
+		Kernel: parts[0],
636
+		Major:  parts[1],
637
+		Minor:  parts[2],
658 638
 	}, nil
659 639
 }
660 640
 
... ...
@@ -237,16 +237,16 @@ func TestCompareKernelVersion(t *testing.T) {
237 237
 		&KernelVersionInfo{Kernel: 2, Major: 6, Minor: 0},
238 238
 		1)
239 239
 	assertKernelVersion(t,
240
-		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "0"},
241
-		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "16"},
240
+		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0},
241
+		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0},
242 242
 		0)
243 243
 	assertKernelVersion(t,
244 244
 		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 5},
245 245
 		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0},
246 246
 		1)
247 247
 	assertKernelVersion(t,
248
-		&KernelVersionInfo{Kernel: 3, Major: 0, Minor: 20, Flavor: "25"},
249
-		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "0"},
248
+		&KernelVersionInfo{Kernel: 3, Major: 0, Minor: 20},
249
+		&KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0},
250 250
 		-1)
251 251
 }
252 252
 
... ...
@@ -412,9 +412,9 @@ func assertParseRelease(t *testing.T, release string, b *KernelVersionInfo, resu
412 412
 func TestParseRelease(t *testing.T) {
413 413
 	assertParseRelease(t, "3.8.0", &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0}, 0)
414 414
 	assertParseRelease(t, "3.4.54.longterm-1", &KernelVersionInfo{Kernel: 3, Major: 4, Minor: 54}, 0)
415
-	assertParseRelease(t, "3.4.54.longterm-1", &KernelVersionInfo{Kernel: 3, Major: 4, Minor: 54, Flavor: "1"}, 0)
416
-	assertParseRelease(t, "3.8.0-19-generic", &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0, Flavor: "19-generic"}, 0)
417
-	assertParseRelease(t, "3.12.8tag", &KernelVersionInfo{Kernel: 3, Major: 12, Minor: 8, Flavor: "tag"}, 0)
415
+	assertParseRelease(t, "3.4.54.longterm-1", &KernelVersionInfo{Kernel: 3, Major: 4, Minor: 54}, 0)
416
+	assertParseRelease(t, "3.8.0-19-generic", &KernelVersionInfo{Kernel: 3, Major: 8, Minor: 0}, 0)
417
+	assertParseRelease(t, "3.12.8tag", &KernelVersionInfo{Kernel: 3, Major: 12, Minor: 8}, 0)
418 418
 }
419 419
 
420 420
 func TestParsePortMapping(t *testing.T) {