summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2026-08-09 23:45:48 +0800
committerruki <[email protected]>2026-08-09 23:45:48 +0800
commit6f2617cbdf2ba77ba424507941a50fda8d64e0b9 (patch)
treee14c0b857629e8b59d187b5c8e185aea4ecef8e8
parentc7172a3a0cce98e395567202e732ebb86b475360 (diff)
improve addon.register
-rw-r--r--xmake/actions/addon/main.lua19
-rw-r--r--xmake/core/sandbox/modules/import/core/package/addon.lua28
-rw-r--r--xmake/modules/private/action/require/impl/actions/install.lua3
-rw-r--r--xmake/modules/private/xrepo/action/remove.lua3
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