aboutsummaryrefslogtreecommitdiffhomepage
path: root/core/lfs_ext.lua
diff options
context:
space:
mode:
authorGravatar mitchell <70453897+667e-11@users.noreply.github.com>2015-04-13 13:43:27 -0400
committerGravatar mitchell <70453897+667e-11@users.noreply.github.com>2015-04-13 13:43:27 -0400
commit4d61548017affb260ac4bd6a5fd37a02c5d8c014 (patch)
tree1d61ed20556d125463d6f6658ede1e99d0c3ead2 /core/lfs_ext.lua
parent1a08d256d40dea3d63c877eda7828109ff5fb9d4 (diff)
Added `symlink` filter option for ignoring symlinked files and directories.
Diffstat (limited to 'core/lfs_ext.lua')
-rw-r--r--core/lfs_ext.lua34
1 files changed, 25 insertions, 9 deletions
diff --git a/core/lfs_ext.lua b/core/lfs_ext.lua
index b3dda4f7..6cab4b11 100644
--- a/core/lfs_ext.lua
+++ b/core/lfs_ext.lua
@@ -21,6 +21,7 @@ lfs.FILTER = {
folders = {'%.bzr$', '%.git$', '%.hg$', '%.svn$', 'CVS$'}
}
+local lfs_symlinkattributes = lfs.symlinkattributes
-- Determines whether or not the given file matches the given filter.
-- @param file The filename.
-- @param filter The filter table.
@@ -37,7 +38,7 @@ local function exclude(file, filter)
if not file:find(patt:sub(2)) then return true end
end
end
- return false
+ return filter.symlink and lfs_symlinkattributes(file, 'mode') == 'link'
end
---
@@ -45,11 +46,20 @@ end
-- directory *dir*, calling function *f* with each file found.
-- Files passed to *f* do not match any pattern in string or table *filter*,
-- and, unless *exclude_FILTER* is `true`, `lfs.FILTER` as well. A filter table
--- contains Lua patterns that match filenames to exclude, an optional `folders`
--- sub-table that contains patterns matching directories to exclude, and an
--- optional `extensions` sub-table that contains raw file extensions to exclude.
--- Any patterns starting with '!' exclude files and directories that do not
--- match the pattern that follows.
+-- contains:
+--
+-- + Lua patterns that match filenames to exclude.
+-- + Optional `folders` sub-table that contains patterns matching directories
+-- to exclude.
+-- + Optional `extensions` sub-table that contains raw file extensions to
+-- exclude.
+-- + Optional `symlink` flag that when `true`, excludes symlinked files (but
+-- not symlinked directories).
+-- + Optional `folders.symlink` flag that when `true`, excludes symlinked
+-- directories.
+--
+-- Any filter patterns starting with '!' exclude files and directories that do
+-- not match the pattern that follows.
-- @param dir The directory path to iterate over.
-- @param f Function to call with each full file path found. If *f* returns
-- `false` explicitly, iteration ceases.
@@ -77,9 +87,15 @@ function lfs.dir_foreach(dir, f, filter, exclude_FILTER, n, include_dirs, level)
-- Add FILTER to filter unless specified otherwise.
if not exclude_FILTER then
for k, v in pairs(lfs.FILTER) do
- if not filter[k] then filter[k] = {} end
- local filter_k = filter[k]
- for i = 1, #v do filter_k[#filter_k + 1] = v[i] end
+ if type(v) == 'table' then
+ if not filter[k] then filter[k] = {} end
+ local filter_k = filter[k]
+ for k2, v2 in pairs(v) do
+ filter_k[tonumber(k2) and #filter_k + 1 or k2] = v2
+ end
+ else
+ filter[tonumber(k) and #filter + 1 or k] = v
+ end
end
end
-- Create file extension filter hash table for quick lookups.