Browse Source

fix: some files might have wrong indentation at the beginning

Tienson Qin 4 years ago
parent
commit
2f6caed79e

+ 19 - 0
src/main/frontend/db/debug.cljs

@@ -29,6 +29,25 @@
                                              count-1
                                              (- count-1 count-2)))))
 
+(defn block-uuid-nil?
+  [block]
+  (->>
+   (concat
+    [(:block/parent block)
+     (:block/left block)
+     (:block/page block)
+     (:block/namespace block)]
+    (:block/tags block)
+    (:block/alias block)
+    (:block/refs block)
+    (:block/path-refs block))
+   (remove nil?)
+   (some (fn [x]
+           (and
+            (vector? x)
+            (= :block/uuid (first x))
+            (nil? (second x)))))))
+
 (comment
   (defn debug!
     []

+ 10 - 5
src/main/frontend/format/block.cljs

@@ -677,11 +677,16 @@
                 (let [[f r] (split-with (fn [p] (<= (:block/level-spaces p) level-spaces)) parents)
                       left (first r)
                       parents' (->> (concat f [left]) vec)
-                      block (assoc block
-                                   :block/parent [:block/uuid (:block/uuid (last f))]
-                                   :block/left [:block/uuid (:block/uuid left)]
-                                   :block/level (:block/level left)
-                                   :block/level-spaces (:block/level-spaces left))
+                      parent-id (if-let [block-id (:block/uuid (last f))]
+                                  [:block/uuid block-id]
+                                  page-id)
+                      block (cond->
+                              (assoc block
+                                     :block/parent parent-id
+                                     :block/left [:block/uuid (:block/uuid left)]
+                                     :block/level (:block/level left)
+                                     :block/level-spaces (:block/level-spaces left)))
+
                       parents' (->> (concat f [block]) vec)
                       result' (conj result block)]
                   [others parents' block result'])))]

+ 20 - 11
src/main/frontend/handler/extract.cljs

@@ -130,9 +130,11 @@
                      ;; remove block references
                      (remove vector?))
           pages (util/distinct-by :block/name pages)
-          block-ids (mapv (fn [block]
-                            {:block/uuid (:block/uuid block)})
-                          (remove nil? blocks))
+          block-ids (->>
+                     (mapv (fn [block]
+                             {:block/uuid (:block/uuid block)})
+                           (remove nil? blocks))
+                     (remove nil?))
           pages (remove nil? pages)
           pages (map (fn [page] (assoc page :block/uuid (db/new-block-id))) pages)]
       [pages
@@ -189,6 +191,18 @@
          (map (partial apply merge))
          (with-block-uuid))))
 
+(defn- remove-illegal-refs
+  [block block-ids-set refresh?]
+  (let [aux-fn (fn [refs]
+                 (let [block-refs (if refresh? (set refs)
+                                      (set/intersection (set refs) block-ids-set))]
+                   (set/union
+                    (filter :block/name refs)
+                    block-refs)))]
+    (-> block
+        (update :block/refs aux-fn)
+        (update :block/path-refs aux-fn))))
+
 (defn extract-all-blocks-pages
   [repo-url files metadata refresh?]
   (when (seq files)
@@ -207,6 +221,8 @@
                       (remove empty?))]
       (when (seq result)
         (let [[pages block-ids blocks] (apply map concat result)
+              block-ids (remove (fn [b] (or (nil? b)
+                                           (nil? (:block/uuid b)))) block-ids)
               pages (with-ref-pages pages blocks)
               blocks (map (fn [block]
                             (let [id (:block/uuid block)
@@ -216,12 +232,5 @@
               ;; To prevent "unique constraint" on datascript
               pages-index (map #(select-keys % [:block/name]) pages)
               block-ids-set (set (map (fn [{:block/keys [uuid]}] [:block/uuid uuid]) block-ids))
-              blocks (map (fn [b]
-                            (update b :block/refs
-                                    (fn [refs]
-                                      (let [block-refs (if refresh? (set refs)
-                                                           (set/intersection (set refs) block-ids-set))]
-                                        (set/union
-                                         (filter :block/name refs)
-                                         block-refs))))) blocks)]
+              blocks (map #(remove-illegal-refs % block-ids-set refresh?) blocks)]
           (apply concat [pages-index pages block-ids blocks]))))))