implement children ordering in stores.fs
s-ol
3 years ago
21 | 21 | |
22 | 22 | -- fileders |
23 | 23 | list_fileders_in: (path='') => |
24 | paths = for entry_name in lfs.dir @root .. path | |
24 | entries = {} | |
25 | for entry_name in lfs.dir @root .. path | |
25 | 26 | continue if '.' == entry_name\sub 1, 1 |
26 | 27 | entry_path = @root .. "#{path}/#{entry_name}" |
27 | 28 | if 'directory' ~= lfs.attributes entry_path, 'mode' |
28 | 29 | continue |
29 | 30 | |
30 | "#{path}/#{entry_name}" | |
31 | entries[entry_name] = "#{path}/#{entry_name}" | |
31 | 32 | |
32 | table.sort paths | |
33 | sorted = {} | |
34 | ||
35 | order_file = @root .. "#{path}/$order" | |
36 | if 'file' == lfs.attributes order_file, 'mode' | |
37 | for line in io.lines order_file | |
38 | path = assert entries[line], "entry in $order but not on disk: #{line}" | |
39 | table.insert sorted, path | |
40 | sorted[line] = true | |
41 | ||
42 | entries = [path for entry, path in pairs entries when not sorted[entry]] | |
43 | table.sort entries | |
44 | for path in *entries | |
45 | table.insert sorted, path | |
46 | ||
33 | 47 | coroutine.wrap -> |
34 | -- @TODO: respect $order | |
35 | for path in *paths | |
48 | for path in *sorted | |
36 | 49 | coroutine.yield path |
37 | 50 | |
38 | 51 | create_fileder: (parent, name) => |