_评论者:rymndhng_
我思考了一段时间内部数据结构,我认为可能在不破坏内部数据结构的情况下跟踪此内容。洞察力在于,我们需要通过取 clojure 源文件的 max 修改时间及其所有外部依赖的最大修改时间来确定 `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))