summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxq114 <[email protected]>2023-02-23 16:51:31 +0800
committerxq114 <[email protected]>2023-02-23 16:51:31 +0800
commit3a9765192608ee20de3d6448b24bde0095a7274c (patch)
treeb98f1491b0722532cb054fa0e431d86a41816201
parent415d9e13ad6fc1431802a00b1697b7178adedd40 (diff)
match github name mangling
-rw-r--r--xmake/modules/private/action/require/impl/actions/download.lua9
-rw-r--r--xmake/modules/private/action/require/impl/utils/url_filename.lua23
2 files changed, 29 insertions, 3 deletions
diff --git a/xmake/modules/private/action/require/impl/actions/download.lua b/xmake/modules/private/action/require/impl/actions/download.lua
index d12010723..182765e8a 100644
--- a/xmake/modules/private/action/require/impl/actions/download.lua
+++ b/xmake/modules/private/action/require/impl/actions/download.lua
@@ -28,7 +28,7 @@ import("core.package.package", {alias = "core_package"})
import("lib.detect.find_file")
import("lib.detect.find_directory")
import("private.action.require.impl.utils.filter")
-import("private.action.require.impl..utils.url_filename")
+import("private.action.require.impl.utils.url_filename")
import("net.http")
import("net.proxy")
import("devel.git")
@@ -156,6 +156,13 @@ function _download(package, url, sourcedir, opt)
local localfile
local searchnames = {package:name() .. "-" .. package:version_str() .. archive.extension(url),
packagefile}
+
+ -- match github name mangling https://github.com/xmake-io/xmake/issues/1343
+ local github_name = url_filename.github_filename(url)
+ if github_name then
+ table.insert(searchnames, github_name)
+ end
+
for _, searchname in ipairs(searchnames) do
localfile = find_file(searchname, core_package.searchdirs())
if localfile then
diff --git a/xmake/modules/private/action/require/impl/utils/url_filename.lua b/xmake/modules/private/action/require/impl/utils/url_filename.lua
index e17e8673b..9694964ea 100644
--- a/xmake/modules/private/action/require/impl/utils/url_filename.lua
+++ b/xmake/modules/private/action/require/impl/utils/url_filename.lua
@@ -18,8 +18,27 @@
-- @file url_filename.lua
--
--- get filename from url
-function main(url)
+-- get raw filename
+function raw_filename(url)
local urlpath = url:split('?', {plain = true})[1]
return path.filename(urlpath)
end
+
+-- get filename from github name mangling
+function github_filename(url)
+ if url:find("^https://github.com/[^/]-/[^/]-/archive/") then
+ local reponame = url:match("^https://github.com/[^/]-/([^/]-)/archive/")
+ local filename = raw_filename(url)
+ if filename:find("^v%d") then
+ filename = filename:match("^v(.+)")
+ end
+ if reponame and filename then
+ return reponame .. "-" .. filename
+ end
+ end
+end
+
+-- get filename from url
+function main(url)
+ return raw_filename(url)
+end