1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
add = (tmpl) ->
package.path ..= ";#{tmpl}.lua"
package.moonpath ..= ";#{tmpl}.moon"
add '?'
add '?.server'
add '?/init'
add '?/init.server'
require 'mmm'
require 'lfs'
import Key from require 'mmm.mmmfs.fileder'
import SQLStore from require 'mmm.mmmfs.stores.sql'
-- usage:
-- moon import.moon <root> [output.sqlite3]
{ root, store } = arg
assert root, "please specify the root directory"
-- load a fs file as a fileder facet
load_facet = (filename, filepath) ->
key = (filename\match '(.*)%.%w+') or filename
key = Key key\gsub '%$', '/'
key.filename = filename
file = assert (io.open filepath, 'rb'), "couldn't open facet file '#{filename}'"
value = file\read '*all'
file\close!
key, value
with SQLStore :file, verbose: true
import_fileder = (fileder, dirpath) ->
for file in lfs.dir dirpath
continue if '.' == file\sub 1, 1
continue if file == 'Tupdefault.lua'
continue if file == 'index.html'
continue if file == '$order'
filepath = "#{dirpath}/#{file}"
switch lfs.attributes filepath, 'mode'
when 'file'
key, value = load_facet file, filepath
\create_facet fileder, key.name, key.type, value
when 'directory'
next_fileder = \create_fileder fileder, file
-- \create_facet next_fileder, 'name', 'alpha', file
import_fileder next_fileder, filepath
else
warn "unknown entry type '#{attr.mode}'"
import_fileder '', root
|