_评论由: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))