diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2012-05-03 09:34:21 +0100 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2012-05-03 09:34:21 +0100 |
commit | 69b8ffad453acf7257845251416b9ffbb9050798 (patch) | |
tree | 3dfac56599dd3d10133163ca527ee7f7495a3c95 /lib/gitano/util.lua | |
parent | 092afd53e35e9fb9077a6d7e377515fd30069c7f (diff) | |
download | gitano-69b8ffad453acf7257845251416b9ffbb9050798.tar.gz |
UTIL: Add a bunch of useful util functions for path manipulation
Diffstat (limited to 'lib/gitano/util.lua')
-rw-r--r-- | lib/gitano/util.lua | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/gitano/util.lua b/lib/gitano/util.lua index b87e6ab..ac54e1c 100644 --- a/lib/gitano/util.lua +++ b/lib/gitano/util.lua @@ -89,7 +89,51 @@ local function _parse_cmdline(cmdline) return r, warnings end +local function patesc(s) + return ((s:gsub("[%%%*%-%?%.%+%[%]%(%)]", "%%%0"):gsub("%z", "%%z"))) +end + +local function mkdir_p(dirname) + -- TODO: Implement mkdir_p +end + +local function path_components(path) + local ret = {} + for elem in path:gmatch("([^/]*)/*") do + ret[#ret+1] = elem + end + ret[#ret] = nil + return ret +end + +local function dirname(path) + local t = path_components(path) + t[#t] = nil + return table.concat(t, "/") +end + +local function basename(path, ext) + local t = path_components(path) + local ret = t[#t] + if ext then + local pat = patesc(ext) .. "$" + if ret:find(pat) then + ret = ret:sub(1, -(#ext+1)) + end + end + return ret +end + return { parse_cmdline = _parse_cmdline, + + patesc = patesc, + + path_components = path_components, + dirname = dirname, + basename = basename, + + mkdir_p = mkdir_p, + deep_copy = _deep_copy } |