Browse Source

fix: export for overlapping property+class

overlapping entity with blocks was exporting duplicate blocks
Gabriel Horner 6 months ago
parent
commit
dd4b68a140

+ 3 - 2
deps/db/script/diff_graphs.cljs

@@ -52,8 +52,9 @@
         (fn [m]
           (cond->
            (-> m
-               (update :classes update-vals (fn [m]
-                                              (update m :build/class-properties sort)))
+               ;; TODO: Fix order of these build keys
+               (update :classes update-vals (fn [m] (update m :build/class-properties sort)))
+               (update :properties update-vals (fn [m] (update m :build/property-classes sort)))
                (update ::sqlite-export/kv-values
                        (fn [kvs]
                          ;; Ignore extra metadata that a copied graph can add

+ 5 - 5
deps/db/src/logseq/db/sqlite/export.cljs

@@ -544,8 +544,8 @@
                          {:exclude-ontology? true}))
         page-ids (concat (map :e (d/datoms db :avet :block/tags :logseq.class/Page))
                          (map :e (d/datoms db :avet :block/tags :logseq.class/Journal)))
-        ontology-ids (concat (map :e (d/datoms db :avet :block/tags :logseq.class/Tag))
-                             (map :e (d/datoms db :avet :block/tags :logseq.class/Property)))
+        ontology-ids (set/union (set (map :e (d/datoms db :avet :block/tags :logseq.class/Tag)))
+                                (set (map :e (d/datoms db :avet :block/tags :logseq.class/Property))))
         page-exports (mapv (fn [eid]
                              (let [page-blocks (get-page-blocks db eid)]
                                (build-page-export* db eid page-blocks (merge options {:include-uuid-fn (constantly true)}))))
@@ -562,9 +562,9 @@
                                      (get-in page-export [:pages-and-blocks 0 :page :build/properties :logseq.property/built-in?])))
                               (concat page-exports ontology-page-exports))
         alias-uuids  (concat (mapcat (fn [{:keys [pages-and-blocks]}]
-                                (mapcat #(map second (get-in % [:page :block/alias]))
-                                        pages-and-blocks))
-                              page-exports')
+                                       (mapcat #(map second (get-in % [:page :block/alias]))
+                                               pages-and-blocks))
+                                     page-exports')
                              (mapcat #(map second (:block/alias %))
                                      (vals (:classes graph-ontology)))
                              (mapcat #(map second (:block/alias %))

+ 16 - 5
deps/db/test/logseq/db/sqlite/export_test.cljs

@@ -734,20 +734,31 @@
     (is (= (::sqlite-export/graph-files original-data) (::sqlite-export/graph-files imported-graph))
         "All :file/path entities are imported")))
 
-(deftest import-graph-overlapping-ontology-properties
-  (let [original-data
+(deftest import-graph-with-overlapping-ontology-properties
+  (let [overlapping-uuid (random-uuid)
+        original-data
         {:properties {:user.property/p1
-                      {:logseq.property/type :node
+                      {:block/uuid overlapping-uuid
+                       :build/keep-uuid? true
+                       :logseq.property/type :node
                        :build/property-classes [:user.property/p1]}
                       :user.property/p2 {:logseq.property/type :default}}
          :classes {:user.class/C1 {}
                    :user.property/p1
-                   {:build/class-parent :user.class/C1
+                   {:build/keep-uuid? true
+                    :block/uuid overlapping-uuid
+                    :build/class-parent :user.class/C1
                     :build/class-properties [:user.property/p2]}}
+         :pages-and-blocks
+         [{:page {:block/uuid overlapping-uuid}
+           :blocks [{:block/title "b1"
+                     :build/children [{:block/title "b2"}]}]}]
          :build-existing-tx? true}
         conn (db-test/create-conn-with-blocks original-data)
         conn2 (db-test/create-conn)
-        imported-graph (export-graph-and-import-to-another-graph conn conn2 {})]
+        imported-graph (export-graph-and-import-to-another-graph conn conn2 {:exclude-built-in-pages? true})]
+
+    (is (= (sort-pages-and-blocks (:pages-and-blocks original-data)) (:pages-and-blocks imported-graph)))
     (is (= (expand-properties (:properties original-data)) (:properties imported-graph)))
     (is (= (expand-classes (:classes original-data))
            (-> (:classes imported-graph)