diff options
| author | ruki <[email protected]> | 2024-04-10 15:36:35 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-04-10 15:36:35 +0800 |
| commit | b559b4c1591e448b0f3faaa5928fc79e8286b8c3 (patch) | |
| tree | 786d95287a8a7bb665f5830e47ae3f3fd71b67b2 /xmake/modules | |
| parent | 7e7b37e4f776e76d9a88b38f6419ff5c95923ef4 (diff) | |
| parent | bcc361fcee9277dedfdcdd031d058c4de5322c73 (diff) | |
Merge pull request #4956 from xmake-io/archive
Improve archive
Diffstat (limited to 'xmake/modules')
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 |
