Skip to content

Commit dbfd936

Browse files
authored
Merge pull request #49 from nodenv/perf
Improve performance
2 parents 3f0058c + 2ea172e commit dbfd936

File tree

4 files changed

+105
-84
lines changed

4 files changed

+105
-84
lines changed

libexec/nodenv-package-json-engine

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,20 @@ find_installed_version_matching_expression() {
5050
installed_versions+=( "$v" )
5151
done < <(nodenv versions --bare --skip-aliases | grep -e '^[[:digit:]]')
5252

53-
version=$("$SEMVER" -r "$version_expression" "${installed_versions[@]}" \
54-
| tail -n 1)
55-
echo "$version"
53+
local fast_guess
54+
fast_guess=$("$SEMVER" -r "$version_expression" "${installed_versions[@]:${#installed_versions[@]}-1}" | tail -n 1)
55+
56+
# Most #engine version specs just specify a baseline version,
57+
# which means most likely, the highest installed version will satisfy
58+
# This does a first pass with just that single version in hopes it satisfies.
59+
# If so, we can avoid the cost of sh-semver sorting and validating across
60+
# all the installed versions.
61+
if [ -n "$fast_guess" ]; then
62+
echo "$fast_guess"
63+
return
64+
fi
65+
66+
"$SEMVER" -r "$version_expression" "${installed_versions[@]}" | tail -n 1
5667
}
5768

5869
get_version_respecting_precedence() {

node_modules/sh-semver/semver.sh

Lines changed: 86 additions & 77 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package-lock.json

Lines changed: 4 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
"brew-publish": "^2.3.1"
4242
},
4343
"dependencies": {
44-
"sh-semver": "^1.0.0",
44+
"sh-semver": "qzb/sh-semver",
4545
"JSON.sh": "~0.3.3"
4646
}
4747
}

0 commit comments

Comments
 (0)