Explorar el Código

fix: remove monitor-dirs

Tienson Qin hace 3 años
padre
commit
cc66195b58
Se han modificado 3 ficheros con 46 adiciones y 43 borrados
  1. 23 34
      src/main/frontend/fs/sync.cljs
  2. 22 0
      src/test/frontend/fs/sync_test.cljs
  3. 1 9
      templates/config.edn

+ 23 - 34
src/main/frontend/fs/sync.cljs

@@ -153,23 +153,22 @@
 
 
 ;;; ### configs in config.edn
 ;;; ### configs in config.edn
 ;; - :file-sync/ignore-files
 ;; - :file-sync/ignore-files
-;; - :file-sync/monitor-dirs
 
 
 (defn- get-ignored-files
 (defn- get-ignored-files
   []
   []
   (into #{#"logseq/graphs-txid.edn$"
   (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)
         (map re-pattern)
         (:file-sync/ignore-files (state/get-config))))
         (: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
 ;;; ### configs ends
 
 
 (def ws-addr config/WS-URL)
 (def ws-addr config/WS-URL)
@@ -354,9 +353,6 @@
                "\" (updated? " updated? ", renamed? " (.renamed? coll) ", deleted? " deleted?
                "\" (updated? " updated? ", renamed? " (.renamed? coll) ", deleted? " deleted?
                ", txid " txid ", checksum " checksum ")]")))
                ", txid " txid ", checksum " checksum ")]")))
 
 
-(defn- contains-path? [regexps path]
-  (reduce #(when (re-find %2 path) (reduced true)) false regexps))
-
 (defn- assert-filetxns
 (defn- assert-filetxns
   [filetxns]
   [filetxns]
   (every? true?
   (every? true?
@@ -441,16 +437,16 @@
             (map list ts))))
             (map list ts))))
    cat))
    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
 (defn- diffs->partitioned-filetxns
   "transducer.
   "transducer.
@@ -465,7 +461,7 @@
   (comp
   (comp
    (map diff->filetxns)
    (map diff->filetxns)
    cat
    cat
-   (filter-filetxns-by-config)
+   (remove ignored?)
    distinct-update-filetxns-xf
    distinct-update-filetxns-xf
    remove-deleted-filetxns-xf
    remove-deleted-filetxns-xf
    (partition-filetxns n)))
    (partition-filetxns n)))
@@ -2172,8 +2168,7 @@
                    true)
                    true)
                  (or (string/starts-with? (.-dir e) base-path)
                  (or (string/starts-with? (.-dir e) base-path)
                      (string/starts-with? (str "file://" (.-dir e)) base-path)) ; valid path prefix
                      (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
                  ;; download files will also trigger file-change-events, ignore them
                  (let [r (not (contains? (:recent-remote->local-files @*sync-state)
                  (let [r (not (contains? (:recent-remote->local-files @*sync-state)
                                          (<! (<file-change-event=>recent-remote->local-file-item e))))]
                                          (<! (<file-change-event=>recent-remote->local-file-item e))))]
@@ -2220,10 +2215,9 @@
       (if (empty? es)
       (if (empty? es)
         (go {:succ true})
         (go {:succ true})
         (let [type          (.-type ^FileChangeEvent (first es))
         (let [type          (.-type ^FileChangeEvent (first es))
-              ignored-files (get-ignored-files)
               es->paths-xf  (comp
               es->paths-xf  (comp
                              (map #(relative-path %))
                              (map #(relative-path %))
-                             (filter #(not (contains-path? ignored-files %))))]
+                             (remove ignored?))]
           (go
           (go
             (let [es*   (<! (<filter-checksum-not-consistent es))
             (let [es*   (<! (<filter-checksum-not-consistent es))
                   _     (when (not= (count es*) (count es))
                   _     (when (not= (count es*) (count es))
@@ -2295,18 +2289,13 @@
             (let [remote-all-files-meta remote-all-files-meta-or-exp
             (let [remote-all-files-meta remote-all-files-meta-or-exp
                   local-all-files-meta  (<! local-all-files-meta-c)
                   local-all-files-meta  (<! local-all-files-meta-c)
                   diff-local-files      (diff-file-metadata-sets local-all-files-meta remote-all-files-meta)
                   diff-local-files      (diff-file-metadata-sets local-all-files-meta remote-all-files-meta)
-                  monitored-dirs        (get-monitor-dirs)
-                  ignored-files         (get-ignored-files)
                   change-events
                   change-events
                   (sequence
                   (sequence
                    (comp
                    (comp
                     ;; convert to FileChangeEvent
                     ;; convert to FileChangeEvent
                     (map #(->FileChangeEvent "change" base-path (.get-normalized-path ^FileMetadata %)
                     (map #(->FileChangeEvent "change" base-path (.get-normalized-path ^FileMetadata %)
                                              {:size (:size %)} (:etag %)))
                                              {: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)
                    diff-local-files)
                   change-events-partitions
                   change-events-partitions
                   (sequence
                   (sequence

+ 22 - 0
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
+    ))

+ 1 - 9
templates/config.edn

@@ -272,16 +272,8 @@
  ;;  :media "[[quick capture]] **{time}**: {url}"}
  ;;  :media "[[quick capture]] **{time}**: {url}"}
 
 
  ;; File sync options
  ;; 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.
  ;; 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.
  ;; dwim (do what I mean) for Enter key when editing.
  ;; Context-awareness of Enter key makes editing more easily
  ;; Context-awareness of Enter key makes editing more easily