Support :ignored-file config key

Prevent the compiler attempting to process files defined by a list of
regexps. By default ignore emacs and vi backup files.
This commit is contained in:
J Irving 2014-12-27 02:38:25 -05:00
parent a49bda02bc
commit efbe831261
5 changed files with 36 additions and 23 deletions

View file

@ -1,4 +1,4 @@
(defproject cryogen-core "0.1.8"
(defproject cryogen-core "0.1.9-SNAPSHOT"
:description "Cryogen's compiler"
:url "https://github.com/lacarmen/cryogen-core"
:license {:name "Eclipse Public License"

View file

@ -26,18 +26,18 @@
(defn find-md-assets
"Returns a list of files ending with .md under templates"
[]
(find-assets "templates" ".md"))
[ignored-files]
(find-assets "templates" ".md" ignored-files))
(defn find-posts
"Returns a list of markdown files representing posts under the post root in templates/md"
[{:keys [post-root]}]
(find-assets (str "templates/md" post-root) ".md"))
[{:keys [post-root ignored-files]}]
(find-assets (str "templates/md" post-root) ".md" ignored-files))
(defn find-pages
"Returns a list of markdown files representing pages under the page root in templates/md"
[{:keys [page-root]}]
(find-assets (str "templates/md" page-root) ".md"))
[{:keys [page-root ignored-files]}]
(find-assets (str "templates/md" page-root) ".md" ignored-files))
(defn parse-post-date
"Parses the post date from the post's file name and returns the corresponding java date object"
@ -257,7 +257,8 @@
(update-in [:sass-src] (fnil str "css"))
(update-in [:sass-dest] (fnil str "css"))
(update-in [:post-date-format] (fnil str "yyyy-MM-dd"))
(update-in [:keep-files] (fnil seq [])))
(update-in [:keep-files] (fnil seq []))
(update-in [:ignored-files] (fnil seq [#"^\.#.*" #".*\.swp$"])))
site-url (:site-url config)
blog-prefix (:blog-prefix config)]
(merge
@ -272,7 +273,7 @@
"Generates all the html and copies over resources specified in the config"
[]
(println (green "compiling assets..."))
(let [{:keys [site-url blog-prefix rss-name recent-posts sass-src sass-dest keep-files] :as config} (read-config)
(let [{:keys [site-url blog-prefix rss-name recent-posts sass-src sass-dest keep-files ignored-files] :as config} (read-config)
posts (add-prev-next (read-posts config))
pages (add-prev-next (read-pages config))
[navbar-pages sidebar-pages] (group-pages pages)
@ -297,7 +298,7 @@
(compile-index default-params config)
(compile-archives default-params posts config)
(println (blue "generating site map"))
(spit (str public blog-prefix "/sitemap.xml") (sitemap/generate site-url))
(spit (str public blog-prefix "/sitemap.xml") (sitemap/generate site-url ignored-files))
(println (blue "generating rss"))
(spit (str public blog-prefix "/" rss-name) (rss/make-channel config posts))
(println (blue "compiling sass"))

View file

@ -11,9 +11,16 @@
(.toURI)
(io/file)))
(defn find-assets [f ext]
(defn ignore [ignored-files]
(fn [file]
(let [name (.getName file)
matches (map #(re-find % name) ignored-files)]
(not (some seq matches)))))
(defn find-assets [f ext ignored-files]
(->> (get-resource f)
file-seq
(filter (ignore ignored-files))
(filter (fn [file] (-> file .getName (.endsWith ext))))))
(defn create-folder [folder]

View file

@ -13,13 +13,13 @@
(defn loc [f]
(-> f (.getAbsolutePath) (.split "resources/public/") second))
(defn generate [site-url]
(defn generate [site-url ignored-files]
(with-out-str
(emit
{:tag :urlset
:attrs {:xmlns "http://www.sitemaps.org/schemas/sitemap/0.9"}
:content
(for [f (find-assets "public" ".html")]
(for [f (find-assets "public" ".html" ignored-files)]
{:tag :url
:content
[{:tag :loc

View file

@ -1,21 +1,26 @@
(ns cryogen-core.watcher
(:require [clojure.java.io :refer [file]]))
(:require [clojure.java.io :refer [file]]
[cryogen-core.io :refer [ignore]]))
(defn get-assets [root]
(file-seq (file root)))
(defn get-assets [root ignored-files]
(->> root
file
file-seq
(filter #(not (.isDirectory %)))
(filter (ignore ignored-files))))
(defn sum-times [path]
(->> (get-assets path) (map #(.lastModified %)) (reduce +)))
(defn sum-times [path ignored-files]
(->> (get-assets path ignored-files) (map #(.lastModified %)) (reduce +)))
(defn watch-assets [root action]
(loop [times (sum-times root)]
(defn watch-assets [root ignored-files action]
(loop [times (sum-times root ignored-files)]
(Thread/sleep 300)
(let [new-times (sum-times root)]
(let [new-times (sum-times root ignored-files)]
(when-not (= times new-times)
(action))
(recur new-times))))
(defn start-watcher! [root action]
(doto (Thread. #(watch-assets root action))
(defn start-watcher! [root ignored-files action]
(doto (Thread. #(watch-assets root ignored-files action))
(.setDaemon true)
(.start)))