_评论者:rymndhng_
关于内部数据结构,我想了一些,我认为可能在不会破坏内部数据结构的情况下实现跟踪。洞察力在于,我们需要通过取Clojure源文件及其实际依赖文件的最大修改时间来确定`已修改`的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))