mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 03:41:45 +00:00
Merge pull request #20827 from smarterclayton/fix_manager
Auto commit by PR queue bot
This commit is contained in:
commit
fce98f3cf2
@ -25,6 +25,7 @@ import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
@ -801,24 +802,33 @@ type dockerVersion struct {
|
||||
*semver.Version
|
||||
}
|
||||
|
||||
// Older versions of Docker could return non-semantically versioned values (distros like Fedora
|
||||
// included partial values such as 1.8.1.fc21 which is not semver). Force those values to be semver.
|
||||
var almostSemverRegexp = regexp.MustCompile(`^(\d+\.\d+\.\d+)\.(.*)$`)
|
||||
|
||||
// newDockerVersion returns a semantically versioned docker version value
|
||||
func newDockerVersion(version string) (dockerVersion, error) {
|
||||
sem, err := semver.NewVersion(version)
|
||||
if err != nil {
|
||||
return dockerVersion{}, err
|
||||
matches := almostSemverRegexp.FindStringSubmatch(version)
|
||||
if matches == nil {
|
||||
return dockerVersion{}, err
|
||||
}
|
||||
sem, err = semver.NewVersion(strings.Join(matches[1:], "-"))
|
||||
}
|
||||
return dockerVersion{sem}, nil
|
||||
return dockerVersion{sem}, err
|
||||
}
|
||||
|
||||
func (r dockerVersion) Compare(other string) (int, error) {
|
||||
v, err := semver.NewVersion(other)
|
||||
v, err := newDockerVersion(other)
|
||||
if err != nil {
|
||||
return -1, err
|
||||
}
|
||||
|
||||
if r.LessThan(*v) {
|
||||
if r.LessThan(*v.Version) {
|
||||
return -1, nil
|
||||
}
|
||||
if v.LessThan(*r.Version) {
|
||||
if v.Version.LessThan(*r.Version) {
|
||||
return 1, nil
|
||||
}
|
||||
return 0, nil
|
||||
|
@ -115,6 +115,35 @@ func matchString(t *testing.T, pattern, str string) bool {
|
||||
return match
|
||||
}
|
||||
|
||||
func TestNewDockerVersion(t *testing.T) {
|
||||
cases := []struct {
|
||||
value string
|
||||
out string
|
||||
err bool
|
||||
}{
|
||||
{value: "1", err: true},
|
||||
{value: "1.8", err: true},
|
||||
{value: "1.8.1", out: "1.8.1"},
|
||||
{value: "1.8.1.fc21", out: "1.8.1-fc21"},
|
||||
{value: "1.8.1.fc21.other", out: "1.8.1-fc21.other"},
|
||||
{value: "1.8.1-fc21.other", out: "1.8.1-fc21.other"},
|
||||
{value: "1.8.1-beta.12", out: "1.8.1-beta.12"},
|
||||
}
|
||||
for _, test := range cases {
|
||||
v, err := newDockerVersion(test.value)
|
||||
switch {
|
||||
case err != nil && test.err:
|
||||
continue
|
||||
case (err != nil) != test.err:
|
||||
t.Errorf("error for %q: expected %t, got %v", test.value, test.err, err)
|
||||
continue
|
||||
}
|
||||
if v.String() != test.out {
|
||||
t.Errorf("unexpected parsed version %q for %q", v, test.value)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetEntrypointAndCommand(t *testing.T) {
|
||||
cases := []struct {
|
||||
name string
|
||||
|
Loading…
Reference in New Issue
Block a user