(local json (require :json)) (local http (require :fetch)) (local svc (require :anoia.svc)) (local { : utime } (require :lualinux)) (fn download [url dest] (let [state (.. dest "/state") previously (ll.lstat state 12)] (match (http.fetch url "i" previously) (nil 10 _) ; not modified (print (.. url " not modified, already up to date")) (nil code str) (assert nil (.. "error " code ": " str)) (body { : last-modified }) (let [service (svc.open dest) lock (.. dest "/.lock")] (with-open [fout (io.open lock :w)] (fout:write "")) (service:output "." (json.decode body)) (with-open [fout (io.open state :w)] (fout:write "ok")) (utime state last-modified) (os.remove lock)) ))) (fn run [] (download (. arg 1) (. arg 2))) { : run }