浏览代码

Merge pull request #4316 from tianon/more-lenient-kernel-version

Adjust kernel version parsing to be more lenient of strange things like "3.12-1-amd64"
unclejack 11 年之前
父节点
当前提交
a42ef866ed
共有 2 个文件被更改,包括 10 次插入3 次删除
  1. 9 3
      utils/utils.go
  2. 1 0
      utils/utils_test.go

+ 9 - 3
utils/utils.go

@@ -606,16 +606,22 @@ func GetKernelVersion() (*KernelVersionInfo, error) {
 func ParseRelease(release string) (*KernelVersionInfo, error) {
 func ParseRelease(release string) (*KernelVersionInfo, error) {
 	var (
 	var (
 		kernel, major, minor, parsed int
 		kernel, major, minor, parsed int
-		flavor                       string
+		flavor, partial              string
 	)
 	)
 
 
 	// Ignore error from Sscanf to allow an empty flavor.  Instead, just
 	// Ignore error from Sscanf to allow an empty flavor.  Instead, just
 	// make sure we got all the version numbers.
 	// make sure we got all the version numbers.
-	parsed, _ = fmt.Sscanf(release, "%d.%d.%d%s", &kernel, &major, &minor, &flavor)
-	if parsed < 3 {
+	parsed, _ = fmt.Sscanf(release, "%d.%d%s", &kernel, &major, &partial)
+	if parsed < 2 {
 		return nil, errors.New("Can't parse kernel version " + release)
 		return nil, errors.New("Can't parse kernel version " + release)
 	}
 	}
 
 
+	// sometimes we have 3.12.25-gentoo, but sometimes we just have 3.12-1-amd64
+	parsed, _ = fmt.Sscanf(partial, ".%d%s", &minor, &flavor)
+	if parsed < 1 {
+		flavor = partial
+	}
+
 	return &KernelVersionInfo{
 	return &KernelVersionInfo{
 		Kernel: kernel,
 		Kernel: kernel,
 		Major:  major,
 		Major:  major,

+ 1 - 0
utils/utils_test.go

@@ -420,6 +420,7 @@ func TestParseRelease(t *testing.T) {
 	assertParseRelease(t, "3.4.54.longterm-1", &KernelVersionInfo{Kernel: 3, Major: 4, Minor: 54, Flavor: ".longterm-1"}, 0)
 	assertParseRelease(t, "3.4.54.longterm-1", &KernelVersionInfo{Kernel: 3, Major: 4, Minor: 54, Flavor: ".longterm-1"}, 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, Flavor: "-19-generic"}, 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, Flavor: "tag"}, 0)
+	assertParseRelease(t, "3.12-1-amd64", &KernelVersionInfo{Kernel: 3, Major: 12, Minor: 0, Flavor: "-1-amd64"}, 0)
 }
 }
 
 
 func TestParsePortMapping(t *testing.T) {
 func TestParsePortMapping(t *testing.T) {