diff options
| author | ruki <[email protected]> | 2024-04-10 00:55:24 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2024-04-10 00:55:24 +0800 |
| commit | 3270e053705de1df51abda4fa56faee6888d9295 (patch) | |
| tree | e4b2c93fed2d900dc82bf5ec680c94ed40a87854 | |
| parent | 86075cdc1f9e82e65a94d35dd2725acbf590cd97 (diff) | |
improve archive
| -rw-r--r-- | core/xpack.lua | 16 | ||||
| -rw-r--r-- | xmake/modules/private/action/require/impl/actions/download.lua | 4 | ||||
| -rw-r--r-- | xmake/modules/private/action/require/impl/actions/download_resources.lua | 3 | ||||
| -rw-r--r-- | xmake/modules/private/action/require/impl/actions/patch_sources.lua | 3 | ||||
| -rw-r--r-- | xmake/modules/utils/archive/archive.lua | 19 | ||||
| -rw-r--r-- | xmake/modules/utils/archive/extract.lua | 18 |
6 files changed, 43 insertions, 20 deletions
diff --git a/core/xpack.lua b/core/xpack.lua index 94e21f7a2..4262ef1b5 100644 --- a/core/xpack.lua +++ b/core/xpack.lua @@ -48,18 +48,12 @@ xpack("xmake") local winenv_bindir = path.join(package:buildir(), "winenv", "bin") os.mkdir(winenv_bindir) http.download(url_7z, archive_7z, {insecure = global.get("insecure-ssl")}) - if archive.extract(archive_7z, tmpdir_7z) then - os.cp(path.join(tmpdir_7z, "*"), winenv_bindir) - else - raise("extract 7z.zip failed!") - end + archive.extract(archive_7z, tmpdir_7z) + os.cp(path.join(tmpdir_7z, "*"), winenv_bindir) http.download(url_curl, archive_curl, {insecure = global.get("insecure-ssl")}) - if archive.extract(archive_curl, tmpdir_curl) then - os.cp(path.join(tmpdir_curl, "*", "bin", "*.exe"), winenv_bindir) - os.cp(path.join(tmpdir_curl, "*", "bin", "*.crt"), winenv_bindir) - else - raise("extract curl.zip failed!") - end + archive.extract(archive_curl, tmpdir_curl) + os.cp(path.join(tmpdir_curl, "*", "bin", "*.exe"), winenv_bindir) + os.cp(path.join(tmpdir_curl, "*", "bin", "*.crt"), winenv_bindir) winenv = path.directory(winenv_bindir) package:add("installfiles", path.join(winenv, "**"), {rootdir = path.directory(winenv)}) end diff --git a/xmake/modules/private/action/require/impl/actions/download.lua b/xmake/modules/private/action/require/impl/actions/download.lua index 988461e36..c90fc4646 100644 --- a/xmake/modules/private/action/require/impl/actions/download.lua +++ b/xmake/modules/private/action/require/impl/actions/download.lua @@ -211,7 +211,9 @@ 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..59933ae68 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 - return true + 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 end end - return false + raise("cannot archive %s, %s!", path.filename(archivefile), errors or "archivers not found!") end -- only archive tar file diff --git a/xmake/modules/utils/archive/extract.lua b/xmake/modules/utils/archive/extract.lua index 6df173bff..b046dafd4 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 + return end end - return false + raise("cannot extract %s, %s!", path.filename(archivefile), errors or "extractors not found!") end -- extract archive file |
