Fork me on GitHub
#boot
<
2019-11-29
>
respatialized20:11:29

Hey, #boot ! I'm having trouble with the watch task when trying to generate content for perun dynamically. I use clojure2d to generate images on the fly and then refer to those images using hiccup data structures that perun's boot tasks render into HTML. This works fine for one-off builds. The problem: an infinite loop when boot watch is part of the dev cycle. I have adapted one of the perun examples like so:

(set-env!
 :source-paths #{"src"}
 :resource-paths #{"content" "resources"}
 :asset-paths #{"output"}
...)

(deftask dev
  "Build and serve the perun content locally."
  []
  (comp (watch :exclude #{#"output\\/*"})
        (build)
        (serve :resource-root "public")))
The images I'm trying to display get generated from the functions called in /src, and written to /output. No matter what I do, watch always picks up the images after they write, resulting in an endless re-render cycle. I'm trying to arrange it using :exclude so that the build/watch cycle renders the content from clojure2d functions defined in /src every time they change, but the output images are in a directory that is ignored by watch so that it doesn't trigger this loop. I haven't yet had much success. Is this as simple as not regexing the path properly? I tested using re-match in the REPL but I don't know if adding a dir to the Boot environment via set-env overrides :exclude in watch.

respatialized21:11:01

I think I fixed it. It was as simple as adding /target to :exclude in watch. 😅