in cli_tools/common/distro/distro.go [206:235]
func FromGcloudOSArgument(osFlagValue string) (r Release, e error) {
if legacyFlags[osFlagValue] != "" {
osFlagValue = legacyFlags[osFlagValue]
}
match := osFlagExpression.FindStringSubmatch(strings.ToLower(osFlagValue))
if match == nil {
return r, fmt.Errorf("expected pattern of `distro-version`. Actual: `%s`", osFlagValue)
}
components := make(map[string]string)
for i, name := range osFlagExpression.SubexpNames() {
if i != 0 && name != "" {
components[name] = match[i]
}
}
distro, version, arch := components["distro"], components["version"], components["arch"]
var major, minor string
if distro == ubuntu {
// In gcloud, major and minor are combined as MMmm, such as ubuntu-1804
if len(version) != 4 {
return r, fmt.Errorf("expected version with length four. Actual: `%s`", version)
}
major, minor = version[:2], version[2:]
} else if distro == windows && strings.HasSuffix(version, r2) {
major, minor = version[:len(version)-2], r2
} else {
major, minor = version, ""
}
return FromComponents(distro, major, minor, arch)
}