mirror of https://github.com/docker/cli.git
vendor: github.com/docker/go-units v0.5.0
full diff: https://github.com/docker/go-units/compare/v0.4.0...v0.5.0 Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
67cc8b1fd8
commit
0e4f0e4a7e
|
@ -638,7 +638,7 @@ func TestRunFlagsParseShmSize(t *testing.T) {
|
||||||
// shm-size ko
|
// shm-size ko
|
||||||
flags, _ := setupRunFlags()
|
flags, _ := setupRunFlags()
|
||||||
args := []string{"--shm-size=a128m", "img", "cmd"}
|
args := []string{"--shm-size=a128m", "img", "cmd"}
|
||||||
expectedErr := `invalid argument "a128m" for "--shm-size" flag: invalid size: 'a128m'`
|
expectedErr := `invalid argument "a128m" for "--shm-size" flag:`
|
||||||
err := flags.Parse(args)
|
err := flags.Parse(args)
|
||||||
assert.ErrorContains(t, err, expectedErr)
|
assert.ErrorContains(t, err, expectedErr)
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ require (
|
||||||
github.com/docker/docker v20.10.17+incompatible // v22.06.x - see "replace" for the actual version
|
github.com/docker/docker v20.10.17+incompatible // v22.06.x - see "replace" for the actual version
|
||||||
github.com/docker/docker-credential-helpers v0.6.4
|
github.com/docker/docker-credential-helpers v0.6.4
|
||||||
github.com/docker/go-connections v0.4.0
|
github.com/docker/go-connections v0.4.0
|
||||||
github.com/docker/go-units v0.4.0
|
github.com/docker/go-units v0.5.0
|
||||||
github.com/fvbommel/sortorder v1.0.2
|
github.com/fvbommel/sortorder v1.0.2
|
||||||
github.com/gogo/protobuf v1.3.2
|
github.com/gogo/protobuf v1.3.2
|
||||||
github.com/google/go-cmp v0.5.7
|
github.com/google/go-cmp v0.5.7
|
||||||
|
|
|
@ -118,8 +118,9 @@ github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6Uezg
|
||||||
github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI=
|
github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI=
|
||||||
github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8=
|
github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8=
|
||||||
github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw=
|
github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw=
|
||||||
github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
|
|
||||||
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||||
|
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
|
||||||
|
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||||
github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 h1:UhxFibDNY/bfvqU5CAUmr9zpesgbU6SWc8/B4mflAE4=
|
github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 h1:UhxFibDNY/bfvqU5CAUmr9zpesgbU6SWc8/B4mflAE4=
|
||||||
github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
|
github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
|
||||||
github.com/dvsekhvalnov/jose2go v0.0.0-20170216131308-f21a8cedbbae/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM=
|
github.com/dvsekhvalnov/jose2go v0.0.0-20170216131308-f21a8cedbbae/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM=
|
||||||
|
|
|
@ -2,7 +2,6 @@ package units
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"regexp"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
@ -26,16 +25,17 @@ const (
|
||||||
PiB = 1024 * TiB
|
PiB = 1024 * TiB
|
||||||
)
|
)
|
||||||
|
|
||||||
type unitMap map[string]int64
|
type unitMap map[byte]int64
|
||||||
|
|
||||||
var (
|
var (
|
||||||
decimalMap = unitMap{"k": KB, "m": MB, "g": GB, "t": TB, "p": PB}
|
decimalMap = unitMap{'k': KB, 'm': MB, 'g': GB, 't': TB, 'p': PB}
|
||||||
binaryMap = unitMap{"k": KiB, "m": MiB, "g": GiB, "t": TiB, "p": PiB}
|
binaryMap = unitMap{'k': KiB, 'm': MiB, 'g': GiB, 't': TiB, 'p': PiB}
|
||||||
sizeRegex = regexp.MustCompile(`^(\d+(\.\d+)*) ?([kKmMgGtTpP])?[iI]?[bB]?$`)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var decimapAbbrs = []string{"B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"}
|
var (
|
||||||
var binaryAbbrs = []string{"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"}
|
decimapAbbrs = []string{"B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"}
|
||||||
|
binaryAbbrs = []string{"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"}
|
||||||
|
)
|
||||||
|
|
||||||
func getSizeAndUnit(size float64, base float64, _map []string) (float64, string) {
|
func getSizeAndUnit(size float64, base float64, _map []string) (float64, string) {
|
||||||
i := 0
|
i := 0
|
||||||
|
@ -89,20 +89,66 @@ func RAMInBytes(size string) (int64, error) {
|
||||||
|
|
||||||
// Parses the human-readable size string into the amount it represents.
|
// Parses the human-readable size string into the amount it represents.
|
||||||
func parseSize(sizeStr string, uMap unitMap) (int64, error) {
|
func parseSize(sizeStr string, uMap unitMap) (int64, error) {
|
||||||
matches := sizeRegex.FindStringSubmatch(sizeStr)
|
// TODO: rewrite to use strings.Cut if there's a space
|
||||||
if len(matches) != 4 {
|
// once Go < 1.18 is deprecated.
|
||||||
|
sep := strings.LastIndexAny(sizeStr, "01234567890. ")
|
||||||
|
if sep == -1 {
|
||||||
|
// There should be at least a digit.
|
||||||
return -1, fmt.Errorf("invalid size: '%s'", sizeStr)
|
return -1, fmt.Errorf("invalid size: '%s'", sizeStr)
|
||||||
}
|
}
|
||||||
|
var num, sfx string
|
||||||
|
if sizeStr[sep] != ' ' {
|
||||||
|
num = sizeStr[:sep+1]
|
||||||
|
sfx = sizeStr[sep+1:]
|
||||||
|
} else {
|
||||||
|
// Omit the space separator.
|
||||||
|
num = sizeStr[:sep]
|
||||||
|
sfx = sizeStr[sep+1:]
|
||||||
|
}
|
||||||
|
|
||||||
size, err := strconv.ParseFloat(matches[1], 64)
|
size, err := strconv.ParseFloat(num, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return -1, err
|
return -1, err
|
||||||
}
|
}
|
||||||
|
// Backward compatibility: reject negative sizes.
|
||||||
|
if size < 0 {
|
||||||
|
return -1, fmt.Errorf("invalid size: '%s'", sizeStr)
|
||||||
|
}
|
||||||
|
|
||||||
unitPrefix := strings.ToLower(matches[3])
|
if len(sfx) == 0 {
|
||||||
if mul, ok := uMap[unitPrefix]; ok {
|
return int64(size), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process the suffix.
|
||||||
|
|
||||||
|
if len(sfx) > 3 { // Too long.
|
||||||
|
goto badSuffix
|
||||||
|
}
|
||||||
|
sfx = strings.ToLower(sfx)
|
||||||
|
// Trivial case: b suffix.
|
||||||
|
if sfx[0] == 'b' {
|
||||||
|
if len(sfx) > 1 { // no extra characters allowed after b.
|
||||||
|
goto badSuffix
|
||||||
|
}
|
||||||
|
return int64(size), nil
|
||||||
|
}
|
||||||
|
// A suffix from the map.
|
||||||
|
if mul, ok := uMap[sfx[0]]; ok {
|
||||||
size *= float64(mul)
|
size *= float64(mul)
|
||||||
|
} else {
|
||||||
|
goto badSuffix
|
||||||
|
}
|
||||||
|
|
||||||
|
// The suffix may have extra "b" or "ib" (e.g. KiB or MB).
|
||||||
|
switch {
|
||||||
|
case len(sfx) == 2 && sfx[1] != 'b':
|
||||||
|
goto badSuffix
|
||||||
|
case len(sfx) == 3 && sfx[1:] != "ib":
|
||||||
|
goto badSuffix
|
||||||
}
|
}
|
||||||
|
|
||||||
return int64(size), nil
|
return int64(size), nil
|
||||||
|
|
||||||
|
badSuffix:
|
||||||
|
return -1, fmt.Errorf("invalid suffix: '%s'", sfx)
|
||||||
}
|
}
|
||||||
|
|
|
@ -93,7 +93,7 @@ github.com/docker/go-events
|
||||||
# github.com/docker/go-metrics v0.0.1
|
# github.com/docker/go-metrics v0.0.1
|
||||||
## explicit; go 1.11
|
## explicit; go 1.11
|
||||||
github.com/docker/go-metrics
|
github.com/docker/go-metrics
|
||||||
# github.com/docker/go-units v0.4.0
|
# github.com/docker/go-units v0.5.0
|
||||||
## explicit
|
## explicit
|
||||||
github.com/docker/go-units
|
github.com/docker/go-units
|
||||||
# github.com/fvbommel/sortorder v1.0.2
|
# github.com/fvbommel/sortorder v1.0.2
|
||||||
|
|
Loading…
Reference in New Issue