aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2023-06-13 01:16:55 +0200
committerGitHub <noreply@github.com>2023-06-12 23:16:55 +0000
commit02767937fc2e1b214c854a8fdde26ae1d3529dd6 (patch)
tree9735ecc7f5ad29903c4f572d56fa680a5d4d1a97
parentchore: Revert "chore: remove organization-wide .github files (#1345)" (#1346) (diff)
downloadmason-02767937fc2e1b214c854a8fdde26ae1d3529dd6.tar
mason-02767937fc2e1b214c854a8fdde26ae1d3529dd6.tar.gz
mason-02767937fc2e1b214c854a8fdde26ae1d3529dd6.tar.bz2
mason-02767937fc2e1b214c854a8fdde26ae1d3529dd6.tar.lz
mason-02767937fc2e1b214c854a8fdde26ae1d3529dd6.tar.xz
mason-02767937fc2e1b214c854a8fdde26ae1d3529dd6.tar.zst
mason-02767937fc2e1b214c854a8fdde26ae1d3529dd6.zip
fix(command): run :MasonUpdate synchronously in headless mode (#1347)
-rw-r--r--Makefile1
-rw-r--r--lua/mason/api/command.lua22
-rw-r--r--tests/mason/api/command_spec.lua6
3 files changed, 20 insertions, 9 deletions
diff --git a/Makefile b/Makefile
index 8f0dd9f1..114f39fe 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,6 @@ INSTALL_ROOT_DIR:=$(shell pwd)/tests/fixtures/mason
NVIM_HEADLESS:=nvim --headless --noplugin -u tests/minimal_init.vim
dependencies:
- git clone --depth 1 https://github.com/williamboman/mason-lspconfig.nvim dependencies/pack/vendor/start/mason-lspconfig.nvim
git clone --depth 1 https://github.com/nvim-lua/plenary.nvim dependencies/pack/vendor/start/plenary.nvim
git clone --depth 1 https://github.com/nvim-neotest/neotest dependencies/pack/vendor/start/neotest
diff --git a/lua/mason/api/command.lua b/lua/mason/api/command.lua
index ae889e6c..2521f52f 100644
--- a/lua/mason/api/command.lua
+++ b/lua/mason/api/command.lua
@@ -1,4 +1,5 @@
local _ = require "mason-core.functional"
+local platform = require "mason-core.platform"
local function Mason()
require("mason.ui").open()
@@ -83,7 +84,6 @@ local function MasonInstall(package_specifiers, opts)
opts = opts or {}
local Package = require "mason-core.package"
local registry = require "mason-registry"
- local is_headless = #vim.api.nvim_list_uis() == 0
local install_packages = _.map(function(pkg_specifier)
local package_name, version = Package.Parse(pkg_specifier)
@@ -96,7 +96,7 @@ local function MasonInstall(package_specifiers, opts)
}
end)
- if is_headless then
+ if platform.is_headless then
registry.refresh()
local valid_packages = filter_valid_packages(package_specifiers)
if #valid_packages ~= #package_specifiers then
@@ -185,14 +185,28 @@ local function MasonUpdate()
local notify = require "mason-core.notify"
local registry = require "mason-registry"
notify "Updating registries…"
- registry.update(vim.schedule_wrap(function(success, updated_registries)
+
+ ---@param success boolean
+ ---@param updated_registries RegistrySource[]
+ local function handle_result(success, updated_registries)
if success then
local count = #updated_registries
notify(("Successfully updated %d %s."):format(count, count == 1 and "registry" or "registries"))
else
notify(("Failed to update registries: %s"):format(updated_registries), vim.log.levels.ERROR)
end
- end))
+ end
+
+ if platform.is_headless then
+ local a = require "mason-core.async"
+ a.run_blocking(function()
+ local success, updated_registries = a.wait(registry.update)
+ a.scheduler()
+ handle_result(success, updated_registries)
+ end)
+ else
+ registry.update(_.scheduler_wrap(handle_result))
+ end
end
vim.api.nvim_create_user_command("MasonUpdate", MasonUpdate, {
diff --git a/tests/mason/api/command_spec.lua b/tests/mason/api/command_spec.lua
index 00dfdff8..6cae3e0c 100644
--- a/tests/mason/api/command_spec.lua
+++ b/tests/mason/api/command_spec.lua
@@ -99,11 +99,10 @@ describe(":MasonUpdate", function()
end)
spy.on(vim, "notify")
api.MasonUpdate()
- assert.spy(vim.notify).was_called(1)
+ assert.spy(vim.notify).was_called(2)
assert.spy(vim.notify).was_called_with("Updating registries…", vim.log.levels.INFO, {
title = "mason.nvim",
})
- a.wait(vim.schedule)
assert.spy(vim.notify).was_called_with("Successfully updated 1 registry.", vim.log.levels.INFO, {
title = "mason.nvim",
})
@@ -118,11 +117,10 @@ describe(":MasonUpdate", function()
end)
spy.on(vim, "notify")
api.MasonUpdate()
- assert.spy(vim.notify).was_called(1)
+ assert.spy(vim.notify).was_called(2)
assert.spy(vim.notify).was_called_with("Updating registries…", vim.log.levels.INFO, {
title = "mason.nvim",
})
- a.wait(vim.schedule)
assert.spy(vim.notify).was_called_with("Failed to update registries: Some error.", vim.log.levels.ERROR, {
title = "mason.nvim",
})