diff options
Diffstat (limited to 'lua/mason-core/installer/context/InstallContextCwd.lua')
| -rw-r--r-- | lua/mason-core/installer/context/InstallContextCwd.lua | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/lua/mason-core/installer/context/InstallContextCwd.lua b/lua/mason-core/installer/context/InstallContextCwd.lua new file mode 100644 index 00000000..b365cbd9 --- /dev/null +++ b/lua/mason-core/installer/context/InstallContextCwd.lua @@ -0,0 +1,48 @@ +local Result = require "mason-core.result" +local fs = require "mason-core.fs" +local path = require "mason-core.path" + +---@class InstallContextCwd +---@field private handle InstallHandle +---@field private cwd string? +local InstallContextCwd = {} +InstallContextCwd.__index = InstallContextCwd + +---@param handle InstallHandle +function InstallContextCwd:new(handle) + ---@type InstallContextCwd + local instance = {} + setmetatable(instance, self) + instance.handle = handle + instance.cwd = nil + return instance +end + +function InstallContextCwd:initialize() + return Result.try(function(try) + local staging_dir = self.handle.location:staging(self.handle.package.name) + if fs.sync.dir_exists(staging_dir) then + try(Result.pcall(fs.sync.rmrf, staging_dir)) + end + try(Result.pcall(fs.sync.mkdirp, staging_dir)) + self:set(staging_dir) + end) +end + +function InstallContextCwd:get() + assert(self.cwd ~= nil, "Tried to access cwd before it was set.") + return self.cwd +end + +---@param new_abs_cwd string +function InstallContextCwd:set(new_abs_cwd) + assert(type(new_abs_cwd) == "string", "new_cwd is not a string") + assert( + path.is_subdirectory(self.handle.location:get_dir(), new_abs_cwd), + ("%q is not a subdirectory of %q"):format(new_abs_cwd, self.handle.location) + ) + self.cwd = new_abs_cwd + return self +end + +return InstallContextCwd |
