summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-02-23 20:39:59 +0800
committerGitHub <[email protected]>2023-02-23 20:39:59 +0800
commit0c06f2833d498f3ebcc12b2f9e398af7e497ea09 (patch)
tree3be4213f82db83b73e783d37e5dcc73a1374975a
parent415d9e13ad6fc1431802a00b1697b7178adedd40 (diff)
parent19c40899499596d33b7edb8600c0fe8ddbfb43fd (diff)
Merge pull request #3410 from xq114/dev
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.lua21
-rw-r--r--xmake/modules/private/action/require/info.lua6
3 files changed, 33 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..c0d472e6d 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,25 @@
-- @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)
+ local reponame = url:match("^https://github.com/[^/]-/([^/]-)/archive/")
+ if reponame then
+ local filename = raw_filename(url)
+ if filename:find("^v%d") then
+ filename = filename:match("^v(.+)")
+ end
+ return reponame .. "-" .. filename
+ end
+end
+
+-- get filename from url
+function main(url)
+ return raw_filename(url)
+end
diff --git a/xmake/modules/private/action/require/info.lua b/xmake/modules/private/action/require/info.lua
index 8d140a7da..42c3ad9c5 100644
--- a/xmake/modules/private/action/require/info.lua
+++ b/xmake/modules/private/action/require/info.lua
@@ -163,6 +163,12 @@ function main(requires_raw)
searchnames:insert(instance:name() .. "-" .. instance:version_str() .. extension)
end
searchnames:insert(url_filename(url))
+
+ -- match github name mangling https://github.com/xmake-io/xmake/issues/1343
+ local github_name = url_filename.github_filename(url)
+ if github_name then
+ searchnames:insert(github_name)
+ end
end
end
cprint(" -> ${color.dump.string_quote}searchnames${clear}: %s", table.concat(searchnames:to_array(), ", "))