_评论者:rymndhng_
我思考了一段时间的内部数据结构,我认为可以在不破坏内部数据结构的情况下跟踪这个问题。洞见是我们需要通过取 clojure 源文件及其任何外部依赖的最大修改时间来确定 `modified` clojure 源文件。
这需要三处更改
1. 定义外部文件依赖关系的方法(可能作为命名空间的元数据)。示例
(ns my.testing.ns
{:clojure.tools.namespace.files/filedeps #{"resources/foo1.properties"
"resources/foo2.properties"})
2. 在追踪器中新增一个名为 {{::files/filedeps}} 的条目,它将源文件映射到其他文件上。
3. 更新 `modified-files` 断言以包含 `file-deps`,大致如下
(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))