summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2017-09-17 16:19:47 +0800
committerruki <[email protected]>2017-09-17 16:19:47 +0800
commitca273d79459b563d649e7fdfea0b2a472f6ef4ca (patch)
tree59dcb3f7cfbce6557a15e927a7248aef24a12056
parent5ea8f65e53f4903852a4490a9b25d6b1fff6ce83 (diff)
improve package urls and speed up fetching refs
-rw-r--r--xmake/actions/require/package.lua75
-rw-r--r--xmake/modules/net/ping.lua3
2 files changed, 45 insertions, 33 deletions
diff --git a/xmake/actions/require/package.lua b/xmake/actions/require/package.lua
index 172d60797..ea950071c 100644
--- a/xmake/actions/require/package.lua
+++ b/xmake/actions/require/package.lua
@@ -291,6 +291,9 @@ function _load_packages_gitrefs(packages)
for _, url in ipairs(package:urls()) do
if git.checkurl(url) then
+ -- trace
+ vprint("fetching refs for the git url ... %s", url)
+
-- fetch refs
tags, branches = git.refs(url)
@@ -314,20 +317,45 @@ function _load_packages_gitrefs(packages)
return results
end
--- select package version
-function _select_package_version(package, required_ver, gitrefs)
+-- sort packages urls
+function _sort_packages_urls(packages)
- -- get versions
- local versions = package:get("versions")
+ -- add all urls to fasturl and prepare to sort them together
+ for _, package in ipairs(packages) do
+ fasturl.add(package:urls())
+ end
- -- attempt to get tags and branches from the git url
- local refs = {}
- if gitrefs then
- refs = gitrefs[package:fullname()] or {}
+ -- sort and update urls
+ for _, package in ipairs(packages) do
+ package:urls_set(fasturl.sort(package:urls()))
end
+end
+
+-- select packages version
+function _select_packages_version(packages)
+
+ -- load git refs from packages
+ local gitrefs = _load_packages_gitrefs(packages)
+
+ -- sort and update urls
+ for _, package in ipairs(packages) do
+
+ -- exists urls? otherwise be phony package (only as package group)
+ if #package:urls() > 0 then
+
+ -- attempt to get tags and branches from the git url
+ local refs = {}
+ if gitrefs then
+ refs = gitrefs[package:fullname()] or {}
+ end
- -- select required version
- return semver.select(required_ver, versions, refs.tags, refs.branches)
+ -- select package version
+ local version, source = semver.select(package:requireinfo().version, package:get("versions"), refs.tags, refs.branches)
+
+ -- save version to package
+ package:version_set(version, source)
+ end
+ end
end
-- the cache directory
@@ -359,30 +387,11 @@ function load_packages(requires, requires_extra)
-- laod all required packages recursively
local packages = _load_packages(requires, requires_extra)
- -- add all urls to fasturl and prepare to sort them together
- for _, package in ipairs(packages) do
- fasturl.add(package:urls())
- end
-
- -- load git refs from packages
- local gitrefs = _load_packages_gitrefs(packages)
-
- -- sort and update urls
- for _, package in ipairs(packages) do
-
- -- sort package urls
- package:urls_set(fasturl.sort(package:urls()))
-
- -- exists urls? otherwise be phony package (only as package group)
- if #package:urls() > 0 then
-
- -- select package version
- local version, source = _select_package_version(package, package:requireinfo().version, gitrefs)
+ -- sort package urls
+ _sort_packages_urls(packages)
- -- save version to package
- package:version_set(version, source)
- end
- end
+ -- select packages version
+ _select_packages_version(packages)
-- ok
return packages
diff --git a/xmake/modules/net/ping.lua b/xmake/modules/net/ping.lua
index a3629b193..e87c2cd94 100644
--- a/xmake/modules/net/ping.lua
+++ b/xmake/modules/net/ping.lua
@@ -84,6 +84,9 @@ function main(hosts, opt)
if cacheinfo then
cacheinfo[host] = timeval
end
+
+ -- trace
+ vprint("pinging for the host(%s) ... %d ms", host, timeval)
end
end,
catch