diff options
| author | ruki <[email protected]> | 2026-08-09 23:45:48 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2026-08-09 23:45:48 +0800 |
| commit | 6f2617cbdf2ba77ba424507941a50fda8d64e0b9 (patch) | |
| tree | e14c0b857629e8b59d187b5c8e185aea4ecef8e8 | |
| parent | c7172a3a0cce98e395567202e732ebb86b475360 (diff) | |
improve addon.register
| -rw-r--r-- | xmake/actions/addon/main.lua | 19 | ||||
| -rw-r--r-- | xmake/core/sandbox/modules/import/core/package/addon.lua | 28 | ||||
| -rw-r--r-- | xmake/modules/private/action/require/impl/actions/install.lua | 3 | ||||
| -rw-r--r-- | xmake/modules/private/xrepo/action/remove.lua | 3 |
4 files changed, 42 insertions, 11 deletions
diff --git a/xmake/actions/addon/main.lua b/xmake/actions/addon/main.lua index 722cdd52d..b99df4fe0 100644 --- a/xmake/actions/addon/main.lua +++ b/xmake/actions/addon/main.lua @@ -94,11 +94,20 @@ function _install_from_local(dir, name) for _, payloaddir in ipairs(addon.payloads_of(payloadroot)) do os.vcp(path.join(payloadroot, payloaddir), path.join(dstdir, payloaddir)) end - local ok, errors = addon.register(name, LOCALVERSION) - if not ok then - os.tryrm(dstdir) - raise(errors) - end + -- we need to roll back the installed payloads if it cannot be registered, e.g. the name conflicts + try + { + function () + addon.register(name, LOCALVERSION) + end, + catch + { + function (errors) + os.tryrm(dstdir) + raise(errors) + end + } + } cprint("${color.success}install ${bright}%s${clear} ok!", name) end diff --git a/xmake/core/sandbox/modules/import/core/package/addon.lua b/xmake/core/sandbox/modules/import/core/package/addon.lua index 9591559ed..fba7f8b50 100644 --- a/xmake/core/sandbox/modules/import/core/package/addon.lua +++ b/xmake/core/sandbox/modules/import/core/package/addon.lua @@ -23,6 +23,7 @@ local sandbox_core_package_addon = sandbox_core_package_addon or {} -- load modules local addon = require("package/addon") +local raise = require("sandbox/modules/raise") -- inherit some builtin interfaces sandbox_core_package_addon.installdir = addon.installdir @@ -39,11 +40,34 @@ sandbox_core_package_addon.payloads_of = addon.payloads_of sandbox_core_package_addon.payloadroot = addon.payloadroot sandbox_core_package_addon.addons = addon.addons sandbox_core_package_addon.addondir = addon.addondir -sandbox_core_package_addon.register = addon.register sandbox_core_package_addon.unregister = addon.unregister -sandbox_core_package_addon.remove = addon.remove sandbox_core_package_addon.rescan = addon.rescan sandbox_core_package_addon.clear = addon.clear +-- register the given installed addon +-- +-- @param name the addon name +-- @param version the addon version, e.g. "1.0.1", "latest" +-- @param opt the options, e.g. {description = "...", deps = {"foo"}} +-- +function sandbox_core_package_addon.register(name, version, opt) + local ok, errors = addon.register(name, version, opt) + if not ok then + raise(errors) + end +end + +-- remove the given installed addon +-- +-- @param name the addon name +-- @param opt the options, e.g. {force = true} +-- +function sandbox_core_package_addon.remove(name, opt) + local ok, errors = addon.remove(name, opt) + if not ok then + raise(errors) + end +end + -- return module return sandbox_core_package_addon diff --git a/xmake/modules/private/action/require/impl/actions/install.lua b/xmake/modules/private/action/require/impl/actions/install.lua index 629b37aff..fe74e833e 100644 --- a/xmake/modules/private/action/require/impl/actions/install.lua +++ b/xmake/modules/private/action/require/impl/actions/install.lua @@ -510,9 +510,8 @@ function main(package) table.insert(deps, dep:name()) end end - local ok, errors = addon.register(package:name(), package:version_str() or "latest", + addon.register(package:name(), package:version_str() or "latest", {description = package:description(), deps = deps}) - assert(ok, errors) end installed_now = true end diff --git a/xmake/modules/private/xrepo/action/remove.lua b/xmake/modules/private/xrepo/action/remove.lua index ee078f225..eed956c6e 100644 --- a/xmake/modules/private/xrepo/action/remove.lua +++ b/xmake/modules/private/xrepo/action/remove.lua @@ -201,8 +201,7 @@ end -- remove the given installed addons function _remove_addons(names) for _, name in ipairs(names) do - local ok, errors = addon.remove(name, {force = option.get("force")}) - assert(ok, errors) + addon.remove(name, {force = option.get("force")}) cprint("${color.success}remove ${bright}%s${clear} ok!", name) end end |
