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 [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 == '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