From 3a9765192608ee20de3d6448b24bde0095a7274c Mon Sep 17 00:00:00 2001 From: xq114 <1140735506@qq.com> Date: Thu, 23 Feb 2023 16:51:31 +0800 Subject: match github name mangling --- .../action/require/impl/actions/download.lua | 9 ++++++++- .../action/require/impl/utils/url_filename.lua | 23 ++++++++++++++++++++-- 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 -- cgit v1.3.1 From 9a63f4f86064a047bfb3e4003ff71627d52e6efa Mon Sep 17 00:00:00 2001 From: xq114 <1140735506@qq.com> Date: Thu, 23 Feb 2023 19:39:56 +0800 Subject: deduplicate match --- xmake/modules/private/action/require/impl/utils/url_filename.lua | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) 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 9694964ea..c0d472e6d 100644 --- a/xmake/modules/private/action/require/impl/utils/url_filename.lua +++ b/xmake/modules/private/action/require/impl/utils/url_filename.lua @@ -26,15 +26,13 @@ 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 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 - if reponame and filename then - return reponame .. "-" .. filename - end + return reponame .. "-" .. filename end end -- cgit v1.3.1 From 19c40899499596d33b7edb8600c0fe8ddbfb43fd Mon Sep 17 00:00:00 2001 From: xq114 <1140735506@qq.com> Date: Thu, 23 Feb 2023 19:48:25 +0800 Subject: add github name to info --- xmake/modules/private/action/require/info.lua | 6 ++++++ 1 file changed, 6 insertions(+) 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(), ", ")) -- cgit v1.3.1