diff --git a/src/main/frontend/fs/sync.cljs b/src/main/frontend/fs/sync.cljs index 9e059f4b25..5265a12eed 100644 --- a/src/main/frontend/fs/sync.cljs +++ b/src/main/frontend/fs/sync.cljs @@ -153,23 +153,22 @@ ;;; ### configs in config.edn ;; - :file-sync/ignore-files -;; - :file-sync/monitor-dirs (defn- get-ignored-files [] (into #{#"logseq/graphs-txid.edn$" - #"logseq/\.recycle/.*" - #"logseq/version-files/.*" - #"logseq/bak/.*"} + #"logseq/version-files/" + #"logseq/bak/" + #"node_modules/" + ;; path starts with `.` in the root directory, e.g. .gitignore + #"^\.[^.]+" + ;; path includes `/.`, e.g. .git, .DS_store + #"/\." + ;; Emacs/Vim backup files end with `~` by default + #"~$"} (map re-pattern) (:file-sync/ignore-files (state/get-config)))) -(defn- get-monitor-dirs - [] - (into #{#"^assets/" #"^journals/" #"^logseq/" #"^pages/" #"^draws/"} - (map #(re-pattern (str "^" % "/"))) - (:file-sync/monitor-dirs (state/get-config)))) - ;;; ### configs ends (def ws-addr config/WS-URL) @@ -354,9 +353,6 @@ "\" (updated? " updated? ", renamed? " (.renamed? coll) ", deleted? " deleted? ", txid " txid ", checksum " checksum ")]"))) -(defn- contains-path? [regexps path] - (reduce #(when (re-find %2 path) (reduced true)) false regexps)) - (defn- assert-filetxns [filetxns] (every? true? @@ -441,16 +437,16 @@ (map list ts)))) cat)) -(defn- filter-filetxns-by-config - "return transducer. - filter filetxns by `get-ignored-files` and `get-monitored-dirs`" - [] - (let [ignored-files (get-ignored-files) - monitored-dirs (get-monitor-dirs)] - (filter - #(let [path (relative-path %)] - (and (contains-path? monitored-dirs path) - (not (contains-path? ignored-files path))))))) +(defn- contains-path? [regexps path] + (reduce #(when (re-find %2 path) (reduced true)) false regexps)) + +(defn- ignored? + "Whether file is ignored when syncing." + [path] + (-> + (get-ignored-files) + (contains-path? (relative-path path)) + (boolean))) (defn- diffs->partitioned-filetxns "transducer. @@ -465,7 +461,7 @@ (comp (map diff->filetxns) cat - (filter-filetxns-by-config) + (remove ignored?) distinct-update-filetxns-xf remove-deleted-filetxns-xf (partition-filetxns n))) @@ -2172,8 +2168,7 @@ true) (or (string/starts-with? (.-dir e) base-path) (string/starts-with? (str "file://" (.-dir e)) base-path)) ; valid path prefix - (not (contains-path? (get-ignored-files) (relative-path e))) ;not ignored - (contains-path? (get-monitor-dirs) (relative-path e)) ; dir is monitored + (not (ignored? e)) ;not ignored ;; download files will also trigger file-change-events, ignore them (let [r (not (contains? (:recent-remote->local-files @*sync-state) (recent-remote->local-file-item e))))] @@ -2220,10 +2215,9 @@ (if (empty? es) (go {:succ true}) (let [type (.-type ^FileChangeEvent (first es)) - ignored-files (get-ignored-files) es->paths-xf (comp (map #(relative-path %)) - (filter #(not (contains-path? ignored-files %))))] + (remove ignored?))] (go (let [es* (FileChangeEvent "change" base-path (.get-normalized-path ^FileMetadata %) {:size (:size %)} (:etag %))) - ;; filter ignore-files & monitored-dirs - (filter #(let [path (relative-path %)] - (and (not (contains-path? ignored-files path)) - (contains-path? monitored-dirs path))))) + (remove ignored?)) diff-local-files) change-events-partitions (sequence diff --git a/src/test/frontend/fs/sync_test.cljs b/src/test/frontend/fs/sync_test.cljs new file mode 100644 index 0000000000..58e544e353 --- /dev/null +++ b/src/test/frontend/fs/sync_test.cljs @@ -0,0 +1,22 @@ +(ns frontend.fs.sync-test + (:require [frontend.fs.sync :as sync] + [clojure.test :refer [deftest are]])) + +(deftest ignored? + [] + (are [x y] (= y (sync/ignored? x)) + ".git" true + ".gitignore" true + ".DS_store" true + "foo/.DS_store" true + "logseq/graphs-txid.edn" true + "logseq/version-files/1.md" true + "logseq/bak/1.md" true + "node_modules/test" true + "foo/node_modules/" true + "backup~" true + "foo/backup~" true + "foo/.test.md" true + "pages/test.md" false + "journals/2022_01_01.md" false + )) diff --git a/templates/config.edn b/templates/config.edn index fdbf47c21c..97e985d5ab 100644 --- a/templates/config.edn +++ b/templates/config.edn @@ -272,16 +272,8 @@ ;; :media "[[quick capture]] **{time}**: {url}"} ;; File sync options - - ;; In addition to those directories created by Logseq, - ;; files specified in the `:file-sync/monitor-dirs` directories will be synchronized too. - ;; - ;; Directories created by Logseq include: - ;; ["assets" "journals" "logseq" "pages" "draws"]. - :file-sync/monitor-dirs [] - ;; Ignore these files when syncing, regexp is supported. - :file-sync/ignore-files [".DS_Store$"] + ;; :file-sync/ignore-files [] ;; dwim (do what I mean) for Enter key when editing. ;; Context-awareness of Enter key makes editing more easily