(ns watch.watcher (:require [clj-reload.core :as reload] [clojure.edn :as edn] [clojure.string :as str] [dev :as dev] [metabase.util.log :as log] [nextjournal.beholder :as beholder] [user :as user]) (:gen-class)) | |
(set! *warn-on-reflection* true) | |
Returns all paths that contain code. These are the paths we should watch. | (def all-paths-to-watch (memoize (fn all-paths-to-watch* [] (->> (str (System/getProperty "user.dir") "/deps.edn") slurp edn/read-string :aliases vals (keep :extra-paths) (mapv #(if (coll? %) % [%])) (apply concat) (map (comp first #(str/split % #"/"))) (concat ["dev" "src" "test"]) distinct vec)))) |
Reloads the system when a file changes. | (defn watch-fn [{:keys [type path]}] (log/warnf "type: %s | path: %s" type path) (let [before (System/currentTimeMillis) _ (log/warn (-> (reload/reload {:throw false :no-reload '#{watch.watcher user dev}}) (update :unloaded count) (update :loaded count))) after (System/currentTimeMillis) _ (log/warn (str "Reloaded in " (- after before) " ms"))])) |
#_:clj-kondo/ignore (defonce watcher (do (log/warn "Watching paths:" (all-paths-to-watch)) (reload/init {:dirs (all-paths-to-watch)}) (apply (partial beholder/watch watch-fn) (all-paths-to-watch)))) | |
Watcher main function | (defn -main [& _args] (user/dev) (dev/start!)) |
(comment (beholder/stop watcher) ) | |