diff options
| author | William Boman <william@redwill.se> | 2023-11-07 00:29:18 +0100 |
|---|---|---|
| committer | William Boman <william@redwill.se> | 2025-02-19 12:15:48 +0100 |
| commit | 6a7662760c515c74f2c37fc825776ead65d307f9 (patch) | |
| tree | 0f4496d0678c7029b10236cbf48cc0f5ff63c1dc /lua/mason-core/installer/location.lua | |
| parent | fix(pypi): remove -U flag and fix log message (diff) | |
| download | mason-6a7662760c515c74f2c37fc825776ead65d307f9.tar mason-6a7662760c515c74f2c37fc825776ead65d307f9.tar.gz mason-6a7662760c515c74f2c37fc825776ead65d307f9.tar.bz2 mason-6a7662760c515c74f2c37fc825776ead65d307f9.tar.lz mason-6a7662760c515c74f2c37fc825776ead65d307f9.tar.xz mason-6a7662760c515c74f2c37fc825776ead65d307f9.tar.zst mason-6a7662760c515c74f2c37fc825776ead65d307f9.zip | |
refactor!: change Package API
This changes the following public APIs:
**(_breaking_) Events on the `Package` class**
The `uninstall:success` event on the `Package` class now receives an `InstallReceipt` as argument, instead of an
`InstallHandle`. This receipt is an in-memory representation of what was uninstalled. There's also a new
`uninstall:failed` event for situations where uninstallation for some
reason fails. Note: this also applies to the registry events (i.e.
`package:uninstall:success` and `package:uninstall:failed`).
---
**(_breaking_) `Package:uninstall()` is now asynchronous and receives two new arguments, similarly to `Package:install()`**
While package uninstallations remain synchronous under the hood, the public API has been changed from synchronous ->
asynchronous. Users of this method are recommended to provide a callback in situations where code needs to execute after
uninstallation fully completes.
---
**(_breaking_) `Package:get_install_path()` has been removed.
---
**`Package:install()` now takes an optional callback**
This callback allows consumers to be informed whether installation was successful or not without having to go through a
different, low-level, API. See below for a comparison between the old and new APIs:
```lua
-- before
local handle = pkg:install()
handle:once("closed", function ()
-- ...
end)
-- after
pkg:install({}, function (success, result)
-- ...
end)
```
Diffstat (limited to 'lua/mason-core/installer/location.lua')
| -rw-r--r-- | lua/mason-core/installer/location.lua | 93 |
1 files changed, 0 insertions, 93 deletions
diff --git a/lua/mason-core/installer/location.lua b/lua/mason-core/installer/location.lua deleted file mode 100644 index 9cdf097f..00000000 --- a/lua/mason-core/installer/location.lua +++ /dev/null @@ -1,93 +0,0 @@ -local Path = require "mason-core.path" -local platform = require "mason-core.platform" -local settings = require "mason.settings" - ----@class InstallLocation ----@field private dir string -local InstallLocation = {} -InstallLocation.__index = InstallLocation - ----@param dir string -function InstallLocation:new(dir) - ---@type InstallLocation - local instance = {} - setmetatable(instance, self) - instance.dir = dir - return instance -end - -function InstallLocation.global() - return InstallLocation:new(settings.current.install_root_dir) -end - -function InstallLocation:get_dir() - return self.dir -end - ----@async -function InstallLocation:initialize() - local Result = require "mason-core.result" - local fs = require "mason-core.fs" - - return Result.try(function(try) - for _, p in ipairs { - self.dir, - self:bin(), - self:share(), - self:package(), - self:staging(), - } do - if not fs.async.dir_exists(p) then - try(Result.pcall(fs.async.mkdirp, p)) - end - end - end) -end - ----@param path string? -function InstallLocation:bin(path) - return Path.concat { self.dir, "bin", path } -end - ----@param path string? -function InstallLocation:share(path) - return Path.concat { self.dir, "share", path } -end - ----@param path string? -function InstallLocation:opt(path) - return Path.concat { self.dir, "opt", path } -end - ----@param path string? -function InstallLocation:package(path) - return Path.concat { self.dir, "packages", path } -end - ----@param path string? -function InstallLocation:staging(path) - return Path.concat { self.dir, "staging", path } -end - ----@param name string -function InstallLocation:lockfile(name) - return self:staging(("%s.lock"):format(name)) -end - ----@param path string -function InstallLocation:registry(path) - return Path.concat { self.dir, "registries", path } -end - ----@param opts { PATH: '"append"' | '"prepend"' | '"skip"' } -function InstallLocation:set_env(opts) - vim.env.MASON = self.dir - - if opts.PATH == "prepend" then - vim.env.PATH = self:bin() .. platform.path_sep .. vim.env.PATH - elseif opts.PATH == "append" then - vim.env.PATH = vim.env.PATH .. platform.path_sep .. self:bin() - end -end - -return InstallLocation |
