summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-02-04 10:58:31 +0800
committerruki <[email protected]>2023-02-04 10:58:31 +0800
commit2043b97f06b61f8975067be5489cfa68c8bb1ac8 (patch)
tree27440e65e8fb09d751c36503275e0db67affea42
parenta506d2275822a355ced17004d76299bf2862018d (diff)
improve urls
-rw-r--r--xmake/core/package/package.lua5
-rw-r--r--xmake/modules/private/action/require/impl/actions/download.lua33
2 files changed, 25 insertions, 13 deletions
diff --git a/xmake/core/package/package.lua b/xmake/core/package/package.lua
index 99eec0764..078e7d534 100644
--- a/xmake/core/package/package.lua
+++ b/xmake/core/package/package.lua
@@ -274,6 +274,11 @@ function _instance:url_excludes(url)
return self:extraconf("urls", url, "excludes")
end
+-- get the http headers of url, @note need raw url
+function _instance:url_http_headers(url)
+ return self:extraconf("urls", url, "http_headers")
+end
+
-- set artifacts info
function _instance:artifacts_set(artifacts_info)
local versions = self:get("versions")
diff --git a/xmake/modules/private/action/require/impl/actions/download.lua b/xmake/modules/private/action/require/impl/actions/download.lua
index 336d07211..a3f679a7d 100644
--- a/xmake/modules/private/action/require/impl/actions/download.lua
+++ b/xmake/modules/private/action/require/impl/actions/download.lua
@@ -35,7 +35,8 @@ import("devel.git")
import("utils.archive")
-- checkout codes from git
-function _checkout(package, url, sourcedir, url_alias)
+function _checkout(package, url, sourcedir, opt)
+ opt = opt or {}
-- use previous source directory if exists
local packagedir = path.join(sourcedir, package:name())
@@ -104,7 +105,7 @@ function _checkout(package, url, sourcedir, url_alias)
git.clone(url, {longpaths = longpaths, outputdir = packagedir})
-- attempt to checkout the given version
- local revision = package:revision(url_alias) or package:tag() or package:commit() or package:version_str()
+ local revision = package:revision(opt.url_alias) or package:tag() or package:commit() or package:version_str()
git.checkout(revision, {repodir = packagedir})
-- update all submodules
@@ -123,7 +124,8 @@ function _checkout(package, url, sourcedir, url_alias)
end
-- download codes from ftp/http/https
-function _download(package, url, sourcedir, url_alias, url_excludes)
+function _download(package, url, sourcedir, opt)
+ opt = opt or {}
-- get package file
local packagefile = url_filename(url)
@@ -134,7 +136,7 @@ function _download(package, url, sourcedir, url_alias, url_excludes)
-- @see https://github.com/xmake-io/xmake/issues/930
-- https://github.com/xmake-io/xmake/issues/1009
--
- local sourcehash = package:sourcehash(url_alias)
+ local sourcehash = package:sourcehash(opt.url_alias)
assert(not package:is_verify() or not package:get("versions") or sourcehash, "cannot get source hash of %s in package(%s)", url, package:name())
-- the package file have been downloaded?
@@ -166,7 +168,7 @@ function _download(package, url, sourcedir, url_alias, url_excludes)
else
http.download(url, packagefile, {
insecure = global.get("insecure-ssl"),
- headers = package:policy("package.download.http_headers")})
+ headers = opt.url_http_headers or package:policy("package.download.http_headers")})
end
end
@@ -183,7 +185,7 @@ function _download(package, url, sourcedir, url_alias, url_excludes)
local sourcedir_tmp = sourcedir .. ".tmp"
os.rm(sourcedir_tmp)
local extension = archive.extension(packagefile)
- if archive.extract(packagefile, sourcedir_tmp, {excludes = url_excludes}) then
+ if archive.extract(packagefile, sourcedir_tmp, {excludes = opt.url_excludes}) 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, "*"))
@@ -258,12 +260,9 @@ function main(package)
local ok = false
local urls_failed = {}
for idx, url in ipairs(urls) do
-
- -- get url alias
local url_alias = package:url_alias(url)
-
- -- get url excludes
local url_excludes = package:url_excludes(url)
+ local url_http_headers = package:url_http_headers(url)
-- filter url
url = filter.handle(url, package)
@@ -291,11 +290,19 @@ function main(package)
local sourcedir = "source"
local script = package:script("download")
if script then
- script(package, {sourcedir = sourcedir, url = url, url_alias = url_alias, url_excludes = url_excludes})
+ script(package, {
+ sourcedir = sourcedir,
+ url = url,
+ url_alias = url_alias,
+ url_excludes = url_excludes})
elseif git.checkurl(url) then
- _checkout(package, url, sourcedir, url_alias)
+ _checkout(package, url, sourcedir, {
+ url_alias = url_alias})
else
- _download(package, url, sourcedir, url_alias, url_excludes)
+ _download(package, url, sourcedir, {
+ url_alias = url_alias,
+ url_excludes = url_excludes,
+ url_http_headers = url_http_headers})
end
return true
end,