diff options
| author | William Boman <william@redwill.se> | 2025-05-06 02:57:26 +0200 |
|---|---|---|
| committer | William Boman <william@redwill.se> | 2025-05-06 02:57:26 +0200 |
| commit | f74983e782b7394f5737df99f8823e196a23291d (patch) | |
| tree | 15ee15a22ad4e8dff13c050a361c99f08d831212 /lua/mason-registry | |
| parent | refactor(registry): change lua registries to not instantiate Package themselves (diff) | |
| download | mason-f74983e782b7394f5737df99f8823e196a23291d.tar mason-f74983e782b7394f5737df99f8823e196a23291d.tar.gz mason-f74983e782b7394f5737df99f8823e196a23291d.tar.bz2 mason-f74983e782b7394f5737df99f8823e196a23291d.tar.lz mason-f74983e782b7394f5737df99f8823e196a23291d.tar.xz mason-f74983e782b7394f5737df99f8823e196a23291d.tar.zst mason-f74983e782b7394f5737df99f8823e196a23291d.zip | |
feat: associate package instances with registry source and record it in receipt
Diffstat (limited to 'lua/mason-registry')
| -rw-r--r-- | lua/mason-registry/sources/file.lua | 9 | ||||
| -rw-r--r-- | lua/mason-registry/sources/github.lua | 13 | ||||
| -rw-r--r-- | lua/mason-registry/sources/init.lua | 1 | ||||
| -rw-r--r-- | lua/mason-registry/sources/lua.lua | 9 | ||||
| -rw-r--r-- | lua/mason-registry/sources/util.lua | 17 |
5 files changed, 39 insertions, 10 deletions
diff --git a/lua/mason-registry/sources/file.lua b/lua/mason-registry/sources/file.lua index d81fcc9c..34c855c0 100644 --- a/lua/mason-registry/sources/file.lua +++ b/lua/mason-registry/sources/file.lua @@ -44,7 +44,7 @@ function FileRegistrySource:reload(specs) self.buffer = _.assoc("specs", specs, self.buffer or {}) self.buffer.instances = _.compose( _.index_by(_.prop "name"), - _.map(util.hydrate_package(self.buffer.instances or {})) + _.map(util.hydrate_package(self, self.buffer.instances or {})) )(self:get_all_package_specs()) return self.buffer end @@ -182,6 +182,13 @@ function FileRegistrySource:get_display_name() end end +function FileRegistrySource:serialize() + return { + proto = "file", + path = self.id, + } +end + function FileRegistrySource:__tostring() return ("FileRegistrySource(path=%s)"):format(self.spec.path) end diff --git a/lua/mason-registry/sources/github.lua b/lua/mason-registry/sources/github.lua index ceb503dc..5cc69023 100644 --- a/lua/mason-registry/sources/github.lua +++ b/lua/mason-registry/sources/github.lua @@ -61,7 +61,7 @@ function GitHubRegistrySource:reload() if not self:is_installed() then return end - self.buffer = _.compose(_.index_by(_.prop "name"), _.map(util.hydrate_package(self.buffer or {})))( + self.buffer = _.compose(_.index_by(_.prop "name"), _.map(util.hydrate_package(self, self.buffer or {})))( self:get_all_package_specs() ) return self.buffer @@ -160,6 +160,17 @@ function GitHubRegistrySource:get_display_name() end end +function GitHubRegistrySource:serialize() + local info = self:get_info() + return { + proto = "github", + namespace = self.spec.namespace, + name = self.spec.name, + version = info.version, + checksums = info.checksums, + } +end + function GitHubRegistrySource:__tostring() if self.spec.version then return ("GitHubRegistrySource(repo=%s, version=%s)"):format(self.repo, self.spec.version) diff --git a/lua/mason-registry/sources/init.lua b/lua/mason-registry/sources/init.lua index ccc501fe..c08a46a5 100644 --- a/lua/mason-registry/sources/init.lua +++ b/lua/mason-registry/sources/init.lua @@ -6,6 +6,7 @@ ---@field get_display_name fun(self: RegistrySource): string ---@field is_installed fun(self: RegistrySource): boolean ---@field install fun(self: RegistrySource): Result +---@field serialize fun(self: RegistrySource): InstallReceiptRegistry ---@alias RegistrySourceType '"github"' | '"lua"' | '"file"' diff --git a/lua/mason-registry/sources/lua.lua b/lua/mason-registry/sources/lua.lua index e2144a83..8b4aac33 100644 --- a/lua/mason-registry/sources/lua.lua +++ b/lua/mason-registry/sources/lua.lua @@ -33,7 +33,7 @@ function LuaRegistrySource:reload(specs) self.buffer = _.assoc("specs", specs, self.buffer or {}) self.buffer.instances = _.compose( _.index_by(_.prop "name"), - _.map(util.hydrate_package(self.buffer.instances or {})) + _.map(util.hydrate_package(self, self.buffer.instances or {})) )(self:get_all_package_specs()) return self.buffer end @@ -81,6 +81,13 @@ function LuaRegistrySource:get_display_name() end end +function LuaRegistrySource:serialize() + return { + proto = "lua", + mod = self.id, + } +end + function LuaRegistrySource:__tostring() return ("LuaRegistrySource(mod=%s)"):format(self.spec.mod) end diff --git a/lua/mason-registry/sources/util.lua b/lua/mason-registry/sources/util.lua index ed399156..9efa1420 100644 --- a/lua/mason-registry/sources/util.lua +++ b/lua/mason-registry/sources/util.lua @@ -18,9 +18,10 @@ function M.map_registry_spec(spec) return Optional.of(spec) end +---@param registry RegistrySource ---@param buffer table<string, Package> ---@param spec RegistryPackageSpec -M.hydrate_package = _.curryN(function(buffer, spec) +M.hydrate_package = _.curryN(function(registry, buffer, spec) -- hydrate Pkg.Lang/License index _.each(function(lang) local _ = Package.Lang[lang] @@ -29,13 +30,15 @@ M.hydrate_package = _.curryN(function(buffer, spec) local _ = Package.License[lang] end, spec.licenses) - local pkg = buffer[spec.name] - if pkg then + local existing_instance = buffer[spec.name] + if existing_instance then -- Apply spec to the existing Package instances. This is important as to not have lingering package instances. - pkg.spec = spec - return pkg + existing_instance:update(spec, registry) + return existing_instance end - return Package:new(spec) -end, 2) + + local new_instance = Package:new(spec, registry) + return new_instance +end, 3) return M |
