From dda38bb51d261f058706ada91fdf8b03701bd2e5 Mon Sep 17 00:00:00 2001 From: ruki Date: Wed, 17 Jun 2015 12:38:41 +0800 Subject: add excludes pattern for files --- xmake/scripts/base/os.lua | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'xmake/scripts/base/os.lua') diff --git a/xmake/scripts/base/os.lua b/xmake/scripts/base/os.lua index 31ff7957f..75b555651 100644 --- a/xmake/scripts/base/os.lua +++ b/xmake/scripts/base/os.lua @@ -26,6 +26,7 @@ local os = os or {} -- load modules local path = require("base/path") local utils = require("base/utils") +local string = require("base/string") -- copy file or directory function os.cp(src, dst) @@ -160,8 +161,27 @@ end -- function os.match(pattern, findir) + -- get the excludes + local excludes = pattern:match("|.*$") + if excludes then excludes = excludes:split("|") end + + -- translate excludes + if excludes then + local _excludes = {} + for _, exclude in ipairs(excludes) do + exclude = path.translate(exclude) + exclude = exclude:gsub("([%+%.%-%^%$%(%)%%])", "%%%1") + exclude = exclude:gsub("%*%*", "\001") + exclude = exclude:gsub("%*", "\002") + exclude = exclude:gsub("\001", ".*") + exclude = exclude:gsub("\002", "[^/]*") + table.insert(_excludes, exclude) + end + excludes = _excludes + end + -- translate path and remove some repeat separators - pattern = path.translate(pattern) + pattern = path.translate(pattern:gsub("|.*$", "")) -- get the root directory local rootdir = pattern @@ -182,7 +202,7 @@ function os.match(pattern, findir) pattern = pattern:gsub("\002", "[^/]*") -- find it - return os.find(rootdir, pattern, recurse, findir) + return os.find(rootdir, pattern, recurse, findir, excludes) end -- return module: os -- cgit v1.3.1