|
| 1 | +local strings = require("vfox.strings") |
| 2 | + |
| 3 | +local short_name = { |
| 4 | + ["open"] = "openjdk", |
| 5 | + ["bsg"] = "bisheng", |
| 6 | + ["amzn"] = "corretto", |
| 7 | + ["albba"] = "dragonwell", |
| 8 | + ["graal"] = "graalvm", |
| 9 | + ["graalce"] = "graalvm_community", |
| 10 | + ["oracle"] = "oracle", |
| 11 | + ["kona"] = "kona", |
| 12 | + ["librca"] = "liberica", |
| 13 | + ["nik"] = "liberica_native", |
| 14 | + ["mandrel"] = "mandrel", |
| 15 | + ["ms"] = "microsoft", |
| 16 | + ["sapmchn"] = "sap_machine", |
| 17 | + ["sem"] = "semeru", |
| 18 | + ["tem"] = "temurin", |
| 19 | + ["trava"] = "trava", |
| 20 | + ["zulu"] = "zulu", |
| 21 | + ["jb"] = "jetbrains", |
| 22 | +} |
| 23 | + |
| 24 | +local long_name={} |
| 25 | +local distribution_version={ |
| 26 | + distributions={} |
| 27 | +} |
| 28 | + |
| 29 | +for k,v in pairs(short_name) do |
| 30 | + long_name[v]=k |
| 31 | + table.insert(distribution_version.distributions,{ |
| 32 | + name = v, |
| 33 | + short_name = k |
| 34 | + }) |
| 35 | +end |
| 36 | + |
| 37 | +function distribution_version.parse_distribution (name) |
| 38 | + local distribution_name=long_name[name] |
| 39 | + if distribution_name then |
| 40 | + -- already a valid long name, just return it |
| 41 | + return { |
| 42 | + name = name, |
| 43 | + short_name = distribution_name |
| 44 | + } |
| 45 | + end |
| 46 | + distribution_name=short_name[name] |
| 47 | + if distribution_name then |
| 48 | + -- already a valid short name, just return it |
| 49 | + return { |
| 50 | + name = distribution_name, |
| 51 | + short_name = name |
| 52 | + } |
| 53 | + end |
| 54 | + return nil |
| 55 | +end |
| 56 | + |
| 57 | + |
| 58 | +function distribution_version.parse_version (arg) |
| 59 | + local version_parts = strings.split(arg, "-") |
| 60 | + local version |
| 61 | + local distribution |
| 62 | + |
| 63 | + if not version_parts[2] then |
| 64 | + -- no parts, check if we got a distribution name without version |
| 65 | + distribution = distribution_version.parse_distribution(version_parts[1]) |
| 66 | + if not distribution then |
| 67 | + -- no valid distribution found, handle as version with distribution "openjdk" |
| 68 | + version=version_parts[1] |
| 69 | + distribution = distribution_version.parse_distribution("openjdk") |
| 70 | + end |
| 71 | + else |
| 72 | + -- check if the distribution is in the second part of the string (vfox/sdkman default) |
| 73 | + distribution = distribution_version.parse_distribution(version_parts[2]) |
| 74 | + if distribution then |
| 75 | + -- valid distribution found, treat first part as version |
| 76 | + version=version_parts[1] |
| 77 | + else |
| 78 | + -- check if the distribution is in the first part of the string (asdf default) |
| 79 | + distribution = distribution_version.parse_distribution(version_parts[1]) |
| 80 | + if distribution then |
| 81 | + -- valid distribution found, treat second part as version |
| 82 | + version=version_parts[2] |
| 83 | + else |
| 84 | + -- invalid distribution name |
| 85 | + return nil |
| 86 | + end |
| 87 | + end |
| 88 | + end |
| 89 | + |
| 90 | + return { |
| 91 | + version = version, |
| 92 | + distribution = distribution, |
| 93 | + } |
| 94 | +end |
| 95 | + |
| 96 | +return distribution_version |
0 commit comments