diff options
| author | William Boman <william@redwill.se> | 2023-06-13 01:16:55 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-12 23:16:55 +0000 |
| commit | 02767937fc2e1b214c854a8fdde26ae1d3529dd6 (patch) | |
| tree | 9735ecc7f5ad29903c4f572d56fa680a5d4d1a97 | |
| parent | chore: Revert "chore: remove organization-wide .github files (#1345)" (#1346) (diff) | |
| download | mason-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-- | Makefile | 1 | ||||
| -rw-r--r-- | lua/mason/api/command.lua | 22 | ||||
| -rw-r--r-- | tests/mason/api/command_spec.lua | 6 |
3 files changed, 20 insertions, 9 deletions
@@ -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", }) |
