_Comment made by: rymndhng_
I've been thinking about the internal data structures for a bit, I think it may be possible to track this without breaking the internal data structures. The insight is that we need to determine `modified` clojure source files by taking the max modified timestamp of the clojure src file and any of it's external dependencies.
This would require three changes:
1. a way of defining external file dependencies (perhaps as metadata on the namespaces). Example:
(ns my.testing.ns
{:clojure.tools.namespace.files/filedeps #{"resources/foo1.properties"
"resources/foo2.properties"})
2. a new entry in tracker named {{::files/filedeps}} that maps source files -> other files.
3. update the `modified-files` predicate to take in `file-deps`, roughly like so:
(defn- modified? [tracker ^File file]
(let [filedeps (get-in tracker [::file/filedeps file])
time (::time tracker 0)]
(or (< time (.lastModified file))
(< time (apply max (map #(.lastModified %) filedeps)))
(not-every? #(.exists %) filedeps))))
(defn- modified-files [tracker files]
(filter #(modified? tracker %) files))