diff options
| author | ruki <[email protected]> | 2023-02-04 10:58:31 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2023-02-04 10:58:31 +0800 |
| commit | 2043b97f06b61f8975067be5489cfa68c8bb1ac8 (patch) | |
| tree | 27440e65e8fb09d751c36503275e0db67affea42 | |
| parent | a506d2275822a355ced17004d76299bf2862018d (diff) | |
improve urls
| -rw-r--r-- | xmake/core/package/package.lua | 5 | ||||
| -rw-r--r-- | xmake/modules/private/action/require/impl/actions/download.lua | 33 |
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, |
