aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorInhyuk Cho <cih9088@gmail.com>2024-07-09 21:46:42 +0900
committerGitHub <noreply@github.com>2024-07-09 14:46:42 +0200
commitf96a31855fa8aea55599cea412fe611b85a874ed (patch)
tree19fa54d6bb5aef9a4c3796c620901821bee01ada
parenttests(pypi): fix assertions (#1750) (diff)
downloadmason-f96a31855fa8aea55599cea412fe611b85a874ed.tar
mason-f96a31855fa8aea55599cea412fe611b85a874ed.tar.gz
mason-f96a31855fa8aea55599cea412fe611b85a874ed.tar.bz2
mason-f96a31855fa8aea55599cea412fe611b85a874ed.tar.lz
mason-f96a31855fa8aea55599cea412fe611b85a874ed.tar.xz
mason-f96a31855fa8aea55599cea412fe611b85a874ed.tar.zst
mason-f96a31855fa8aea55599cea412fe611b85a874ed.zip
fix(pypi): prefer stock python3 if it satisfies version requirement (#1736)
-rw-r--r--lua/mason-core/installer/managers/pypi.lua6
-rw-r--r--tests/mason-core/installer/managers/pypi_spec.lua30
2 files changed, 34 insertions, 2 deletions
diff --git a/lua/mason-core/installer/managers/pypi.lua b/lua/mason-core/installer/managers/pypi.lua
index 8dab25d9..f60a8ede 100644
--- a/lua/mason-core/installer/managers/pypi.lua
+++ b/lua/mason-core/installer/managers/pypi.lua
@@ -85,8 +85,10 @@ local function create_venv(pkg)
-- 2. Resolve suitable versioned python3 installation (python3.12, python3.11, etc.).
local versioned_candidates = {}
if supported_python_versions ~= nil then
- log.fmt_debug("Finding versioned candidates for %s", supported_python_versions)
- versioned_candidates = get_versioned_candidates(supported_python_versions)
+ if stock_target and not pep440_check_version(tostring(stock_target.version), supported_python_versions) then
+ log.fmt_debug("Finding versioned candidates for %s", supported_python_versions)
+ versioned_candidates = get_versioned_candidates(supported_python_versions)
+ end
end
local target = resolve_python3(versioned_candidates) or stock_target
diff --git a/tests/mason-core/installer/managers/pypi_spec.lua b/tests/mason-core/installer/managers/pypi_spec.lua
index 2bd1f975..6689e350 100644
--- a/tests/mason-core/installer/managers/pypi_spec.lua
+++ b/tests/mason-core/installer/managers/pypi_spec.lua
@@ -179,6 +179,36 @@ describe("pypi manager", function()
end
)
+ it("should prioritize stock python", function()
+ local ctx = create_dummy_context { force = true }
+ spy.on(ctx.stdio_sink, "stderr")
+ stub(ctx, "promote_cwd")
+ stub(ctx.fs, "file_exists")
+ stub(providers.pypi, "get_supported_python_versions", mockx.returns(Result.success ">=3.8"))
+ stub(vim.fn, "executable")
+ vim.fn.executable.on_call_with("python3.12").returns(1)
+ stub(spawn, "python3", mockx.returns(Result.success()))
+ spawn.python3.on_call_with({ "--version" }).returns(Result.success { stdout = "Python 3.8.0" })
+
+ installer.exec_in_context(ctx, function()
+ pypi.init {
+ package = { name = "cmake-language-server", version = "0.1.10" },
+ upgrade_pip = true,
+ install_extra_args = { "--proxy", "http://localhost" },
+ }
+ end)
+
+ assert.spy(ctx.promote_cwd).was_called(1)
+ assert.spy(ctx.spawn.python3).was_called(1)
+ assert.spy(ctx.spawn["python3.12"]).was_called(0)
+ assert.spy(ctx.spawn.python3).was_called_with {
+ "-m",
+ "venv",
+ "--system-site-packages",
+ "venv",
+ }
+ end)
+
it("should install", function()
local ctx = create_dummy_context()
stub(ctx.fs, "file_exists")