From 661cdc8636ff69ae23aadea9e010b061212bbe4a Mon Sep 17 00:00:00 2001 From: Gabriel Horner Date: Tue, 2 Apr 2024 15:57:33 -0400 Subject: [PATCH] fix: built-in properties with :name have incorrect names Properties like logseq.table.version weren't available to add. Also added conflict detection on properties graph which is how I indirectly found this bug --- deps/db/src/logseq/db/sqlite/create_graph.cljs | 8 ++++---- scripts/src/logseq/tasks/db_graph/create_graph.cljs | 11 +++-------- .../tasks/db_graph/create_graph_with_properties.cljs | 10 +++++++--- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/deps/db/src/logseq/db/sqlite/create_graph.cljs b/deps/db/src/logseq/db/sqlite/create_graph.cljs index 68a779f6f6..811f738d87 100644 --- a/deps/db/src/logseq/db/sqlite/create_graph.cljs +++ b/deps/db/src/logseq/db/sqlite/create_graph.cljs @@ -18,17 +18,17 @@ db-property/built-in-properties) (into {}))] (mapcat - (fn [[db-ident {:keys [schema original-name closed-values]}]] - (let [name (or original-name (name db-ident)) + (fn [[db-ident {:keys [schema original-name closed-values] :as m}]] + (let [prop-name (or original-name (name (:name m))) blocks (if closed-values (db-property-util/build-closed-values db-ident - name + prop-name {:db/ident db-ident :block/schema schema :closed-values closed-values} {}) [(sqlite-util/build-new-property db-ident - name + prop-name schema)])] (update blocks 0 default-db/mark-block-as-built-in))) built-in-properties))) diff --git a/scripts/src/logseq/tasks/db_graph/create_graph.cljs b/scripts/src/logseq/tasks/db_graph/create_graph.cljs index 30e92a5aaa..39882eb3d9 100644 --- a/scripts/src/logseq/tasks/db_graph/create_graph.cljs +++ b/scripts/src/logseq/tasks/db_graph/create_graph.cljs @@ -152,11 +152,8 @@ as a set. The following property types are supported: :default, :url, :checkbox, :number, :page and :date. :checkbox and :number values are written as booleans and integers. :page and :block are references that are written as - vectors e.g. `[:page \"PAGE NAME\"]` and `[:block \"block content\"]` - - This fn also takes an optional map arg which supports these keys: - * :property-uuids - A map of property keyword names to uuids to provide ids for built-in properties" - [{:keys [pages-and-blocks properties]} & {:as options}] + vectors e.g. `[:page \"PAGE NAME\"]` and `[:block \"block content\"]`" + [{:keys [pages-and-blocks properties]}] (let [;; add uuids before tx for refs in :properties pages-and-blocks' (mapv (fn [{:keys [page blocks]}] (cond-> {:page (merge {:block/uuid (random-uuid)} page)} @@ -176,9 +173,7 @@ db-ident prop-name (assoc (get properties prop-name) :db/ident db-ident) - {:icon-id - (get-in options [:property-uuids :icon]) - :translate-closed-page-value-fn + {:translate-closed-page-value-fn #(hash-map :block/uuid (translate-property-value (:value %) uuid-maps)) :property-attributes {:db/id (or (property-db-ids (name prop-name)) diff --git a/scripts/src/logseq/tasks/db_graph/create_graph_with_properties.cljs b/scripts/src/logseq/tasks/db_graph/create_graph_with_properties.cljs index c25bce9c28..5186b2dd3c 100644 --- a/scripts/src/logseq/tasks/db_graph/create_graph_with_properties.cljs +++ b/scripts/src/logseq/tasks/db_graph/create_graph_with_properties.cljs @@ -8,6 +8,7 @@ [logseq.db.frontend.property.type :as db-property-type] [clojure.string :as string] [clojure.edn :as edn] + [clojure.set :as set] [datascript.core :as d] ["path" :as node-path] ["os" :as os] @@ -185,9 +186,12 @@ ((juxt node-path/dirname node-path/basename) graph-dir) [(node-path/join (os/homedir) "logseq" "graphs") graph-dir]) conn (create-graph/init-conn dir db-name {:additional-config (:config options)}) - blocks-tx (create-graph/create-blocks-tx - (create-init-data) - {:property-uuids {:icon (:block/uuid (d/entity @conn :logseq.property/icon))}})] + blocks-tx (create-graph/create-blocks-tx (create-init-data)) + existing-names (set (map :v (d/datoms @conn :avet :block/original-name))) + conflicting-names (set/intersection existing-names (set (keep :block/original-name blocks-tx)))] + (when (seq conflicting-names) + (println "Error: Following names conflict -" (string/join "," conflicting-names)) + (js/process.exit 1)) (println "Generating" (count (filter :block/name blocks-tx)) "pages and" (count (filter :block/content blocks-tx)) "blocks ...") (d/transact! conn blocks-tx)