fix: remove orphaned files/blocks from db when comparing db && disk

pull/7660/head
Tienson Qin 2022-12-12 15:58:28 +08:00 committed by Andelf
parent e2bcd3ac68
commit ddd2cb3f0a
1 changed files with 20 additions and 10 deletions

View File

@ -18,7 +18,8 @@
[frontend.fs :as fs]
[frontend.fs.capacitor-fs :as capacitor-fs]
[frontend.util.fs :as fs-util]
[frontend.util :as util]))
[frontend.util :as util]
[clojure.set :as set]))
;; all IPC paths must be normalized! (via gp-util/path-normalize)
@ -119,12 +120,21 @@
(defn load-graph-files!
[graph]
(when graph
(let [dir (config/get-repo-dir graph)]
(p/let [files (fs/readdir dir :path-only? true)]
(doseq [file files]
(when-let [_ext (util/get-file-ext file)]
(->
(when-not (fs-util/ignored-path? dir file)
(let [dir (config/get-repo-dir graph)
db-files (->> (db/get-files graph)
(map first)
(filter #(string/starts-with? % (config/get-repo-dir graph))))]
(p/let [files (fs/readdir dir :path-only? true)
files (remove #(fs-util/ignored-path? dir %) files)]
(let [deleted-files (set/difference (set db-files) (set files))]
(when (seq deleted-files)
(let [delete-tx-data (->> (db/delete-files deleted-files)
(concat (db/delete-blocks graph files nil))
(remove nil?))]
(db/transact! graph delete-tx-data)))
(doseq [file files]
(when-let [_ext (util/get-file-ext file)]
(->
(p/let [content (fs/read-file dir file)
stat (fs/stat dir file)
type (if (db/file-exists? graph file)
@ -134,6 +144,6 @@
{:dir dir
:path file
:content content
:stat stat})))
(p/catch (fn [error]
(js/console.dir error))))))))))
:stat stat}))
(p/catch (fn [error]
(js/console.dir error)))))))))))