summaryrefslogtreecommitdiff
path: root/xmake/modules
diff options
context:
space:
mode:
authorruki <[email protected]>2024-04-10 15:36:35 +0800
committerGitHub <[email protected]>2024-04-10 15:36:35 +0800
commitb559b4c1591e448b0f3faaa5928fc79e8286b8c3 (patch)
tree786d95287a8a7bb665f5830e47ae3f3fd71b67b2 /xmake/modules
parent7e7b37e4f776e76d9a88b38f6419ff5c95923ef4 (diff)
parentbcc361fcee9277dedfdcdd031d058c4de5322c73 (diff)
Merge pull request #4956 from xmake-io/archive
Improve archive
Diffstat (limited to 'xmake/modules')
-rw-r--r--xmake/modules/private/action/require/impl/actions/download.lua3
-rw-r--r--xmake/modules/private/action/require/impl/actions/download_resources.lua3
-rw-r--r--xmake/modules/private/action/require/impl/actions/patch_sources.lua3
-rw-r--r--xmake/modules/utils/archive/archive.lua23
-rw-r--r--xmake/modules/utils/archive/extract.lua22
5 files changed, 37 insertions, 17 deletions
diff --git a/xmake/modules/private/action/require/impl/actions/download.lua b/xmake/modules/private/action/require/impl/actions/download.lua
index 988461e36..060f7303b 100644
--- a/xmake/modules/private/action/require/impl/actions/download.lua
+++ b/xmake/modules/private/action/require/impl/actions/download.lua
@@ -211,7 +211,8 @@ function _download(package, url, sourcedir, opt)
local sourcedir_tmp = sourcedir .. ".tmp"
os.rm(sourcedir_tmp)
local extension = archive.extension(packagefile)
- if archive.extract(packagefile, sourcedir_tmp, {excludes = opt.url_excludes}) then
+ local ok = try {function() archive.extract(packagefile, sourcedir_tmp, {excludes = opt.url_excludes}); return true end}
+ if ok then
-- move to source directory and we skip it to avoid long path issues on windows if only one root directory
os.rm(sourcedir)
local filedirs = os.filedirs(path.join(sourcedir_tmp, "*"))
diff --git a/xmake/modules/private/action/require/impl/actions/download_resources.lua b/xmake/modules/private/action/require/impl/actions/download_resources.lua
index df87daf32..048e4b273 100644
--- a/xmake/modules/private/action/require/impl/actions/download_resources.lua
+++ b/xmake/modules/private/action/require/impl/actions/download_resources.lua
@@ -135,7 +135,8 @@ function _download(package, resource_name, resource_url, resource_hash)
local resourcedir_tmp = resourcedir .. ".tmp"
os.tryrm(resourcedir_tmp)
local extension = archive.extension(resource_file)
- if archive.extract(resource_file, resourcedir_tmp) then
+ local ok = try {function() archive.extract(resource_file, resourcedir_tmp); return true end}
+ if ok then
os.tryrm(resourcedir)
os.mv(resourcedir_tmp, resourcedir)
elseif extension and extension ~= "" then
diff --git a/xmake/modules/private/action/require/impl/actions/patch_sources.lua b/xmake/modules/private/action/require/impl/actions/patch_sources.lua
index a960d1bcb..bd5d698bd 100644
--- a/xmake/modules/private/action/require/impl/actions/patch_sources.lua
+++ b/xmake/modules/private/action/require/impl/actions/patch_sources.lua
@@ -107,7 +107,8 @@ function _patch(package, patchinfo)
local patchdir = patch_file .. ".dir"
local patchdir_tmp = patchdir .. ".tmp"
os.tryrm(patchdir_tmp)
- if archive.extract(patch_file, patchdir_tmp) then
+ local ok = try {function() archive.extract(patch_file, patchdir_tmp); return true end}
+ if ok then
os.tryrm(patchdir)
os.mv(patchdir_tmp, patchdir)
else
diff --git a/xmake/modules/utils/archive/archive.lua b/xmake/modules/utils/archive/archive.lua
index d21203368..f91aa9d7f 100644
--- a/xmake/modules/utils/archive/archive.lua
+++ b/xmake/modules/utils/archive/archive.lua
@@ -281,12 +281,25 @@ end
-- archive archive file using archivers
function _archive(archivefile, inputfiles, extension, archivers, opt)
+ local errors
for _, archive in ipairs(archivers) do
- if archive(archivefile, inputfiles, extension, opt) then
+ local ok = try {
+ function ()
+ return archive(archivefile, inputfiles, extension, opt)
+ end,
+ catch {
+ function (errs)
+ if errs then
+ errors = tostring(errs)
+ end
+ end
+ }
+ }
+ if ok then
return true
end
end
- return false
+ raise("cannot archive %s, %s!", path.filename(archivefile), errors or "archivers not found!")
end
-- only archive tar file
@@ -306,12 +319,8 @@ end
-- @param options the options, e.g.. {curdir = "/tmp", recurse = true, compress = "fastest|faster|default|better|best", excludes = {"*/dir/*", "dir/*"}}
--
function main(archivefile, inputfiles, opt)
-
- -- init inputfiles
- inputfiles = inputfiles or os.curdir()
-
- -- init options
opt = opt or {}
+ inputfiles = inputfiles or os.curdir()
if opt.recurse == nil then
opt.recurse = true
end
diff --git a/xmake/modules/utils/archive/extract.lua b/xmake/modules/utils/archive/extract.lua
index 6df173bff..604899300 100644
--- a/xmake/modules/utils/archive/extract.lua
+++ b/xmake/modules/utils/archive/extract.lua
@@ -373,13 +373,25 @@ end
-- extract archive file using extractors
function _extract(archivefile, outputdir, extension, extractors, opt)
+ local errors
for _, extract in ipairs(extractors) do
- local ok = try {function () return extract(archivefile, outputdir, extension, opt) end}
+ local ok = try {
+ function ()
+ return extract(archivefile, outputdir, extension, opt)
+ end,
+ catch {
+ function (errs)
+ if errs then
+ errors = tostring(errs)
+ end
+ end
+ }
+ }
if ok then
return true
end
end
- return false
+ raise("cannot extract %s, %s!", path.filename(archivefile), errors or "extractors not found!")
end
-- extract archive file
@@ -389,12 +401,8 @@ end
-- @param options the options, e.g.. {excludes = {"*/dir/*", "dir/*"}}
--
function main(archivefile, outputdir, opt)
-
- -- init outputdir
- outputdir = outputdir or os.curdir()
-
- -- init options
opt = opt or {}
+ outputdir = outputdir or os.curdir()
-- init extractors
local extractors