_评论由: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)]
(或 (< 时间 (.lastModified 文件)))
(< 时间 (apply max (map #(.lastModified %) 文件依赖)))
((not-every? #(.exists %) 文件依赖))))
(defn- 修改后的文件 [追踪器 文件])
(filter #(修改? 追踪器 %) 文件))