diff options
| author | ruki <[email protected]> | 2017-11-10 00:55:02 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2017-11-09 23:30:16 +0800 |
| commit | fffaaa614f5c3098f309fce4e7e6342659e5817f (patch) | |
| tree | f7d9fa7bfc37ca3e906c9696a7abbe9e5cf2f783 /xmake/core/base | |
| parent | aa332adff92a4d51ec02b884276cded3ba9ec83c (diff) | |
add del_files() api
Diffstat (limited to 'xmake/core/base')
| -rw-r--r-- | xmake/core/base/interpreter.lua | 37 | ||||
| -rw-r--r-- | xmake/core/base/table.lua | 9 |
2 files changed, 40 insertions, 6 deletions
diff --git a/xmake/core/base/interpreter.lua b/xmake/core/base/interpreter.lua index 12f258812..24fa05185 100644 --- a/xmake/core/base/interpreter.lua +++ b/xmake/core/base/interpreter.lua @@ -242,8 +242,8 @@ function interpreter:_api_register_xxx_values(scope_kind, action, apifunc, ...) local scope = scopes._CURRENT or root assert(scope) - -- set values? mark as "override" - if apiname and action ~= "add" then + -- set values (set, on, before, after ...)? mark as "override" + if apiname and (action ~= "add" or action ~= "del") then scope["__override_" .. apiname] = true end @@ -446,9 +446,9 @@ function interpreter:_handle(scope, remove_repeat, enable_filter) local results = {} for name, values in pairs(scope) do - -- remove repeat first + -- remove repeat first for each slice with deleted item (__del_xxx) if remove_repeat and not table.is_dictionary(values) then - values = table.unique(values) + values = table.unique(values, function (v) return v:startswith("__del_") end) end -- filter values @@ -1206,6 +1206,33 @@ function interpreter:api_register_set_pathes(scope_kind, ...) self:_api_register_xxx_values(scope_kind, "set", implementation, ...) end +-- register api for del_pathes +function interpreter:api_register_del_pathes(scope_kind, ...) + + -- check + assert(self) + + -- define implementation + local implementation = function (self, scope, name, ...) + + -- translate pathes + local values = {...} + local pathes = self:_api_translate_pathes(values) + + -- mark these pathes as deleted + local pathes_deleted = {} + for _, pathname in ipairs(pathes) do + table.insert(pathes_deleted, "__del_" .. pathname) + end + + -- save values + scope[name] = table.join2(scope[name] or {}, pathes_deleted) + end + + -- register implementation + self:_api_register_xxx_values(scope_kind, "del", implementation, ...) +end + -- register api for add_pathes function interpreter:api_register_add_pathes(scope_kind, ...) @@ -1317,7 +1344,7 @@ function interpreter:api_define(apis) -- get function prefix local prefix = nil - for _, name in ipairs({"set", "add", "on", "before", "after"}) do + for _, name in ipairs({"set", "add", "del", "on", "before", "after"}) do if funcname:startswith(name .. "_") then prefix = name break diff --git a/xmake/core/base/table.lua b/xmake/core/base/table.lua index 410b4a329..3b4013232 100644 --- a/xmake/core/base/table.lua +++ b/xmake/core/base/table.lua @@ -280,7 +280,7 @@ function table.wrap(object) end -- remove repeat from the given array -function table.unique(array) +function table.unique(array, barrier) -- remove repeat if type(array) == "table" then @@ -292,6 +292,13 @@ function table.unique(array) local exists = {} local unique = {} for _, v in ipairs(array) do + + -- exists barrier? clear the current existed items + if barrier and barrier(v) then + exists = {} + end + + -- add unique item if type(v) == "string" then if not exists[v] then exists[v] = true |
