Compare commits

..

16 Commits

Author SHA1 Message Date
ryenus
450f05bf0f
Merge d655614c69569444e2f280b9f25e20f29ae24223 into 06413631029de32cd9af15b6b7f6ed77743cbd79 2024-11-14 14:07:28 +08:00
ryenus
d655614c69 show a warning about skipped versions if any
due the use of --min or NVM_MIN, which would show only the versions
higher than the specified min version, and/or the available minor/patch
updates for the installed versions.
2024-11-06 17:48:34 +08:00
ryenus
cd30a37384 set NVM_NO_COLORS to --no-colors to disable color 2024-11-06 17:48:34 +08:00
ryenus
c13e155709 rename min_ver to min for consistency 2024-11-06 17:48:34 +08:00
ryenus
90de98bbfc [test] avoid leaking temp variable 2024-11-06 17:48:34 +08:00
ryenus
4613313498 ls-remote: introduce temp var for env inheritance
This is to inherit $NVM_MIN from env when defined, meanwhile avoiding
inline local variable initialization for ksh compatibility.

Co-authored-by: Jordan Harband <ljharb@gmail.com>
2024-11-06 17:48:34 +08:00
ryenus
e493440b3c avoid inline initialization for ksh compatibility
Co-authored-by: Jordan Harband <ljharb@gmail.com>
2024-11-06 17:48:34 +08:00
ryenus
b9304f18dc ls-remote: add CLI option --min=<version>
When omitted, fallback to the environment variable "NVM_MIN" if set.
And the CLI option --min=<version> takes precedence over the environment
variable "NVM_MIN" if both are present.
2024-11-06 17:48:34 +08:00
ryenus
e215a57abd always show updates for installed versions
even if they're older than $NVM_MIN
2024-11-06 17:48:34 +08:00
ryenus
e7df2f2110 remove function ref duplication 2024-11-06 17:48:23 +08:00
ryenus
5fc1ebc91e prefixed versions like v18 also work 2024-11-06 17:48:23 +08:00
ryenus
2a893e5b5d rename NVM_MIN_VER to NVM_MIN
since nvm is all about versions, so no need for the explicit suffix.
2024-11-06 17:48:23 +08:00
ryenus
8ec7a3b5fc trim leading space in mock output due to eclint errors 2024-11-06 17:48:23 +08:00
ryenus
02bb9338e1 add test for NVM_MIN_VER support
show only versions newer than NVM_MIN_VER if set
2024-11-06 17:48:23 +08:00
ryenus
307ad6d118 always list installed versions 2024-11-06 17:48:22 +08:00
ryenus
6ebe56fb11 show only versions newer than NVM_MIN_VER if set 2024-11-06 17:48:22 +08:00

127
nvm.sh
View File

@ -1862,79 +1862,80 @@ nvm_print_versions() {
-v installed_color="$INSTALLED_COLOR" -v system_color="$SYSTEM_COLOR" \ -v installed_color="$INSTALLED_COLOR" -v system_color="$SYSTEM_COLOR" \
-v current_color="$CURRENT_COLOR" -v default_color="$DEFAULT_COLOR" \ -v current_color="$CURRENT_COLOR" -v default_color="$DEFAULT_COLOR" \
-v old_lts_color="$DEFAULT_COLOR" -v has_colors="$NVM_HAS_COLORS" ' -v old_lts_color="$DEFAULT_COLOR" -v has_colors="$NVM_HAS_COLORS" '
function alen(arr, i, len) { len=0; for(i in arr) len++; return len; } function alen(arr, i, len) { len=0; for(i in arr) len++; return len; }
function v2a(v, a) { sub(/^(iojs-)?v/, "", v); split(v, a, "."); } function v2a(v, a) { sub(/^(iojs-)?v/, "", v); split(v, a, "."); }
function v2m(v, a) { sub(/^(iojs-)?v/, "", v); split(v, a, "."); return a[1]; } function v2m(v, a) { sub(/^(iojs-)?v/, "", v); split(v, a, "."); return a[1]; }
function vcmp(v1,v2,a1,a2,i,d) { v2a(v1,a1); v2a(v2,a2); for(i=1;i<4;i++) { d = a1[i] - a2[i]; if(d!=0) return d; } return 0; } function vcmp(v1,v2,a1,a2,i,d) { v2a(v1,a1); v2a(v2,a2); for(i=1;i<4;i++) { d = a1[i] - a2[i]; if(d!=0) return d; } return 0; }
BEGIN { BEGIN {
fmt_installed = has_colors ? (installed_color ? "\033[" installed_color "%15s\033[0m" : "%15s") : "%15s *"; fmt_installed = has_colors ? (installed_color ? "\033[" installed_color "%15s\033[0m" : "%15s") : "%15s *";
fmt_system = has_colors ? (system_color ? "\033[" system_color "%15s\033[0m" : "%15s") : "%15s *"; fmt_system = has_colors ? (system_color ? "\033[" system_color "%15s\033[0m" : "%15s") : "%15s *";
fmt_current = has_colors ? (current_color ? "\033[" current_color "->%13s\033[0m" : "%15s") : "->%13s *"; fmt_current = has_colors ? (current_color ? "\033[" current_color "->%13s\033[0m" : "%15s") : "->%13s *";
latest_lts_color = current_color; latest_lts_color = current_color;
sub(/0;/, "1;", latest_lts_color); sub(/0;/, "1;", latest_lts_color);
fmt_latest_lts = has_colors && latest_lts_color ? ("\033[" latest_lts_color " (Latest LTS: %s)\033[0m") : " (Latest LTS: %s)"; fmt_latest_lts = has_colors && latest_lts_color ? ("\033[" latest_lts_color " (Latest LTS: %s)\033[0m") : " (Latest LTS: %s)";
fmt_old_lts = has_colors && old_lts_color ? ("\033[" old_lts_color " (LTS: %s)\033[0m") : " (LTS: %s)"; fmt_old_lts = has_colors && old_lts_color ? ("\033[" old_lts_color " (LTS: %s)\033[0m") : " (LTS: %s)";
split(remote_versions, lines, "|"); split(remote_versions, lines, "|");
split(installed_versions, installed, "|"); split(installed_versions, installed, "|");
rows = alen(lines); rows = alen(lines);
filter_on = (vcmp("v0.0.0", min) != 0); filter_on = (vcmp("v0.0.0", min) != 0);
current_major = -1; current_major = -1;
for (m = n = 1; n <= rows; n++) { for (m = n = 1; n <= rows; n++) {
split(lines[n], fields, "[[:blank:]]+"); split(lines[n], fields, "[[:blank:]]+");
cols = alen(fields); cols = alen(fields);
version = fields[1]; version = fields[1];
is_installed = 0; is_installed = 0;
for (i in installed) { for (i in installed) {
if (version == installed[i]) { if (version == installed[i]) {
is_installed = 1; is_installed = 1;
break; break;
}
} }
if (filter_on != 0) {
if (is_installed) {
current_major = v2m(version);
} else if (vcmp(version, min) >= 0) {
filter_on = 0;
} else if (v2m(version) != current_major) {
continue;
}
}
fmt_version = "%15s";
if (version == current) {
fmt_version = fmt_current;
} else if (version == "system") {
fmt_version = fmt_system;
} else if (is_installed) {
fmt_version = fmt_installed;
}
padding = (is_installed && !has_colors) ? "" : " ";
if (cols == 1) {
formatted = sprintf(fmt_version, version);
} else if (cols == 2) {
formatted = sprintf((fmt_version padding fmt_old_lts), version, fields[2]);
} else if (cols == 3 && fields[3] == "*") {
formatted = sprintf((fmt_version padding fmt_latest_lts), version, fields[2]);
}
output[m++] = formatted;
} }
for (n = 1; n < m; n++) { if (filter_on != 0) {
print output[n] if (is_installed) {
current_major = v2m(version);
} else if (vcmp(version, min) >= 0) {
filter_on = 0;
} else if (v2m(version) != current_major) {
continue;
}
} }
if (rows > --m) { fmt_version = "%15s";
printf("[INFO] showing %d (of %d) versions.\n", m, rows) > "/dev/stderr" if (version == current) {
fmt_version = fmt_current;
} else if (version == "system") {
fmt_version = fmt_system;
} else if (is_installed) {
fmt_version = fmt_installed;
} }
exit padding = (is_installed && !has_colors) ? "" : " ";
}' if (cols == 1) {
formatted = sprintf(fmt_version, version);
} else if (cols == 2) {
formatted = sprintf((fmt_version padding fmt_old_lts), version, fields[2]);
} else if (cols == 3 && fields[3] == "*") {
formatted = sprintf((fmt_version padding fmt_latest_lts), version, fields[2]);
}
output[m++] = formatted;
}
skipped = rows - m + 1
if (skipped > 0) {
printf("[WARN] %d version(s) skipped.\n", skipped) > "/dev/stderr"
}
for (n = 1; n < m; n++) {
print output[n]
}
exit
}'
} }
nvm_validate_implicit_alias() { nvm_validate_implicit_alias() {