diff options
| author | William Boman <william@redwill.se> | 2023-06-17 15:40:51 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-06-17 15:40:51 +0200 |
| commit | ed989357ec71ed8d91deda7122a93f7570e19041 (patch) | |
| tree | 88216e6504f520d3b32621f1f66bbf03efaf0f77 /lua/mason-core | |
| parent | chore(main): release 1.2.1 (#1355) (diff) | |
| download | mason-ed989357ec71ed8d91deda7122a93f7570e19041.tar mason-ed989357ec71ed8d91deda7122a93f7570e19041.tar.gz mason-ed989357ec71ed8d91deda7122a93f7570e19041.tar.bz2 mason-ed989357ec71ed8d91deda7122a93f7570e19041.tar.lz mason-ed989357ec71ed8d91deda7122a93f7570e19041.tar.xz mason-ed989357ec71ed8d91deda7122a93f7570e19041.tar.zst mason-ed989357ec71ed8d91deda7122a93f7570e19041.zip | |
refactor(installer): hoist version validation to the compiled installation entrypoint (#1357)
Diffstat (limited to 'lua/mason-core')
9 files changed, 22 insertions, 54 deletions
diff --git a/lua/mason-core/installer/registry/init.lua b/lua/mason-core/installer/registry/init.lua index 27a7da2a..6b03296f 100644 --- a/lua/mason-core/installer/registry/init.lua +++ b/lua/mason-core/installer/registry/init.lua @@ -6,6 +6,7 @@ local a = require "mason-core.async" local link = require "mason-core.installer.registry.link" local log = require "mason-core.log" local schemas = require "mason-core.installer.registry.schemas" +local util = require "mason-core.installer.registry.util" local M = {} @@ -132,6 +133,7 @@ function M.parse(spec, opts) return { provider = provider, source = parsed_source, + raw_source = source, purl = purl, } end):on_failure(function(err) @@ -162,13 +164,19 @@ function M.compile(spec, opts) { _.T, _.identity }, } - ---@type { purl: Purl, provider: InstallerProvider, source: ParsedPackageSource } + ---@type { purl: Purl, provider: InstallerProvider, source: ParsedPackageSource, raw_source: RegistryPackageSource } local parsed = try(M.parse(spec, opts):map_err(map_parse_err)) ---@async ---@param ctx InstallContext return function(ctx) return Result.try(function(try) + if ctx.opts.version then + try(util.ensure_valid_version(function() + return parsed.provider.get_versions(parsed.purl, parsed.raw_source) + end)) + end + -- Run installer try(parsed.provider.install(ctx, parsed.source, parsed.purl)) diff --git a/lua/mason-core/installer/registry/providers/cargo.lua b/lua/mason-core/installer/registry/providers/cargo.lua index 464fba5b..312a2938 100644 --- a/lua/mason-core/installer/registry/providers/cargo.lua +++ b/lua/mason-core/installer/registry/providers/cargo.lua @@ -48,17 +48,11 @@ end function M.install(ctx, source) local cargo = require "mason-core.installer.managers.cargo" - return Result.try(function(try) - try(util.ensure_valid_version(function() - return providers.crates.get_all_versions(source.crate) - end)) - - try(cargo.install(source.crate, source.version, { - git = source.git, - features = source.features, - locked = source.locked, - })) - end) + return cargo.install(source.crate, source.version, { + git = source.git, + features = source.features, + locked = source.locked, + }) end ---@async diff --git a/lua/mason-core/installer/registry/providers/composer.lua b/lua/mason-core/installer/registry/providers/composer.lua index 7cc03ed8..d85dd2ba 100644 --- a/lua/mason-core/installer/registry/providers/composer.lua +++ b/lua/mason-core/installer/registry/providers/composer.lua @@ -21,14 +21,7 @@ end ---@param source ParsedComposerSource function M.install(ctx, source) local composer = require "mason-core.installer.managers.composer" - - return Result.try(function(try) - try(util.ensure_valid_version(function() - return providers.packagist.get_all_versions(source.package) - end)) - - try(composer.install(source.package, source.version)) - end) + return composer.install(source.package, source.version) end ---@async diff --git a/lua/mason-core/installer/registry/providers/gem.lua b/lua/mason-core/installer/registry/providers/gem.lua index 100046d9..9653f116 100644 --- a/lua/mason-core/installer/registry/providers/gem.lua +++ b/lua/mason-core/installer/registry/providers/gem.lua @@ -32,16 +32,9 @@ end ---@param source ParsedGemSource function M.install(ctx, source) local gem = require "mason-core.installer.managers.gem" - - return Result.try(function(try) - try(util.ensure_valid_version(function() - return providers.rubygems.get_all_versions(source.package) - end)) - - try(gem.install(source.package, source.version, { - extra_packages = source.extra_packages, - })) - end) + return gem.install(source.package, source.version, { + extra_packages = source.extra_packages, + }) end ---@async diff --git a/lua/mason-core/installer/registry/providers/github/release.lua b/lua/mason-core/installer/registry/providers/github/release.lua index 9d01ba32..5fe95cab 100644 --- a/lua/mason-core/installer/registry/providers/github/release.lua +++ b/lua/mason-core/installer/registry/providers/github/release.lua @@ -88,13 +88,8 @@ end ---@param source ParsedGitHubReleaseSource function M.install(ctx, source) local std = require "mason-core.installer.managers.std" - local providers = require "mason-core.providers" return Result.try(function(try) - try(util.ensure_valid_version(function() - return providers.github.get_all_release_versions(source.repo) - end)) - for __, download in ipairs(source.downloads) do a.scheduler() local out_dir = vim.fn.fnamemodify(download.out_file, ":h") diff --git a/lua/mason-core/installer/registry/providers/golang.lua b/lua/mason-core/installer/registry/providers/golang.lua index f8e68bab..40327bb2 100644 --- a/lua/mason-core/installer/registry/providers/golang.lua +++ b/lua/mason-core/installer/registry/providers/golang.lua @@ -36,15 +36,9 @@ end function M.install(ctx, source) local golang = require "mason-core.installer.managers.golang" - return Result.try(function(try) - try(util.ensure_valid_version(function() - return providers.golang.get_all_versions(source.package) - end)) - - try(golang.install(source.package, source.version, { - extra_packages = source.extra_packages, - })) - end) + return golang.install(source.package, source.version, { + extra_packages = source.extra_packages, + }) end ---@async diff --git a/lua/mason-core/installer/registry/providers/npm.lua b/lua/mason-core/installer/registry/providers/npm.lua index 85b204c8..d1865b96 100644 --- a/lua/mason-core/installer/registry/providers/npm.lua +++ b/lua/mason-core/installer/registry/providers/npm.lua @@ -35,13 +35,8 @@ end ---@param source ParsedNpmSource function M.install(ctx, source) local npm = require "mason-core.installer.managers.npm" - local providers = require "mason-core.providers" return Result.try(function(try) - try(util.ensure_valid_version(function() - return providers.npm.get_all_versions(source.package) - end)) - try(npm.init()) try(npm.install(source.package, source.version, { extra_packages = source.extra_packages, diff --git a/lua/mason-core/installer/registry/providers/pypi.lua b/lua/mason-core/installer/registry/providers/pypi.lua index 6efb9730..c162c120 100644 --- a/lua/mason-core/installer/registry/providers/pypi.lua +++ b/lua/mason-core/installer/registry/providers/pypi.lua @@ -41,10 +41,6 @@ function M.install(ctx, source) local pypi = require "mason-core.installer.managers.pypi" return Result.try(function(try) - try(util.ensure_valid_version(function() - return providers.pypi.get_all_versions(source.package) - end)) - try(pypi.init { upgrade_pip = source.pip.upgrade, install_extra_args = source.pip.extra_args, diff --git a/lua/mason-core/installer/registry/util.lua b/lua/mason-core/installer/registry/util.lua index ed98b738..04492bbf 100644 --- a/lua/mason-core/installer/registry/util.lua +++ b/lua/mason-core/installer/registry/util.lua @@ -38,7 +38,7 @@ end ---Checks whether a custom version of a package installation corresponds to a valid version. ---@async ----@param versions_thunk async fun(): Result Result<string> +---@param versions_thunk async fun(): Result Result<string[]> function M.ensure_valid_version(versions_thunk) local ctx = installer.context() local version = ctx.opts.version |
