summaryrefslogtreecommitdiff
path: root/xmake/modules/async/jobgraph.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2025-03-27 23:05:03 +0800
committerruki <[email protected]>2025-04-08 15:31:55 +0800
commitf55ca39e18390317210ac7d660cbfaa517c1e691 (patch)
treea18b2ac8f62e18e49d5bd5c467c810f25bdb98b3 /xmake/modules/async/jobgraph.lua
parente12ddee3cc3d237b6f01f03c71f18763781eb1eb (diff)
add jobgraph:group
Diffstat (limited to 'xmake/modules/async/jobgraph.lua')
-rw-r--r--xmake/modules/async/jobgraph.lua27
1 files changed, 25 insertions, 2 deletions
diff --git a/xmake/modules/async/jobgraph.lua b/xmake/modules/async/jobgraph.lua
index fe42f6647..b9e9a46da 100644
--- a/xmake/modules/async/jobgraph.lua
+++ b/xmake/modules/async/jobgraph.lua
@@ -78,8 +78,9 @@ function jobgraph:add(name, run, opt)
dag:add_vertex(job)
self._size = self._size + 1
- if opt.groups then
- for _, group_name in ipairs(opt.groups) do
+ if self._current_groups or opt.groups then
+ local job_groups = table.join(self._current_groups or {}, opt.groups)
+ for _, group_name in ipairs(job_groups) do
local groups = self._groups[group_name]
if not groups then
groups = {}
@@ -104,6 +105,28 @@ function jobgraph:remove(name)
end
end
+-- enter group to add jobs
+--
+-- e.g.
+-- jobgraph:group("foo", function ()
+-- jobgraph:add("job1", function (index, total, opt)
+-- TODO
+-- end)
+-- jobgraph:add("job2", function (index, total, opt)
+-- TODO
+-- end)
+-- end)
+function jobgraph:group(name, callback)
+ local current_groups = self._current_groups
+ if current_groups == nil then
+ current_groups = {}
+ self._current_groups = current_groups
+ end
+ table.insert(current_groups, name)
+ callback()
+ table.remove(current_groups)
+end
+
-- add job orders, e.g. add_orders(a, b, c, ...): a -> b -> c, ...
--
-- and it supports nil, e.g add_orders("foo", nil, "bar", ...)