mirror of
https://github.com/logseq/logseq.git
synced 2026-04-24 14:14:55 +00:00
fix: never delete today page itself because it'll be auto-generated
This commit is contained in:
11
deps/db/src/logseq/db/common/normalize.cljs
vendored
11
deps/db/src/logseq/db/common/normalize.cljs
vendored
@@ -3,9 +3,10 @@
|
||||
(:require [datascript.core :as d]))
|
||||
|
||||
(defn remove-retract-entity-ref
|
||||
[tx-data]
|
||||
[db tx-data]
|
||||
(let [retracted (-> (keep (fn [[op value]]
|
||||
(when (= op :db/retractEntity)
|
||||
(when (and (= op :db/retractEntity)
|
||||
(nil? (d/entity db value)))
|
||||
value)) tx-data)
|
||||
set)
|
||||
retracted-ids (set (map second retracted))]
|
||||
@@ -20,7 +21,7 @@
|
||||
tx-data)))
|
||||
|
||||
(defn replace-attr-retract-with-retract-entity-v2
|
||||
[normalized-tx-data]
|
||||
[db normalized-tx-data]
|
||||
(->> normalized-tx-data
|
||||
(map (fn [[op eid a v t]]
|
||||
(cond
|
||||
@@ -30,7 +31,7 @@
|
||||
[op eid a v t]
|
||||
:else
|
||||
[op eid])))
|
||||
remove-retract-entity-ref))
|
||||
(remove-retract-entity-ref db)))
|
||||
|
||||
(defn replace-attr-retract-with-retract-entity
|
||||
[tx-data]
|
||||
@@ -103,5 +104,5 @@
|
||||
[:db/add e' a v' t]
|
||||
[:db/retract e' a v' t])))
|
||||
d)))
|
||||
remove-retract-entity-ref
|
||||
(remove-retract-entity-ref db-after)
|
||||
distinct))
|
||||
|
||||
10
deps/outliner/src/logseq/outliner/page.cljs
vendored
10
deps/outliner/src/logseq/outliner/page.cljs
vendored
@@ -5,6 +5,7 @@
|
||||
[datascript.impl.entity :as de]
|
||||
[logseq.common.config :as common-config]
|
||||
[logseq.common.util :as common-util]
|
||||
[logseq.common.util.date-time :as date-time-util]
|
||||
[logseq.common.util.namespace :as ns-util]
|
||||
[logseq.db :as ldb]
|
||||
[logseq.db.common.entity-plus :as entity-plus]
|
||||
@@ -67,9 +68,12 @@
|
||||
(map (fn [d] [:db/retract (:e d) (:a d)]) datoms))
|
||||
(map (fn [d] [:db/retractEntity (:e d)])
|
||||
(d/datoms @conn :avet :logseq.property.history/property (:db/ident page)))))
|
||||
delete-page-tx (concat (db-refs->page page)
|
||||
delete-property-tx
|
||||
[[:db/retractEntity (:db/id page)]])
|
||||
today-page? (when-let [day (:block/journal-day page)]
|
||||
(= (date-time-util/ms->journal-day (js/Date.)) day))
|
||||
delete-page-tx (when-not today-page?
|
||||
(concat (db-refs->page page)
|
||||
delete-property-tx
|
||||
[[:db/retractEntity (:db/id page)]]))
|
||||
restore-class-parent-tx (->> (filter ldb/class? (:logseq.property.class/_extends page))
|
||||
(map (fn [p]
|
||||
{:db/id (:db/id p)
|
||||
|
||||
@@ -298,12 +298,12 @@
|
||||
item)))))
|
||||
|
||||
(defn- sanitize-tx-data
|
||||
[tx-data local-deleted-ids]
|
||||
[db tx-data local-deleted-ids]
|
||||
(let [sanitized-tx-data (->> tx-data
|
||||
db-normalize/replace-attr-retract-with-retract-entity-v2
|
||||
(db-normalize/replace-attr-retract-with-retract-entity-v2 db)
|
||||
(remove (fn [item]
|
||||
(= :db/retractEntity (first item))
|
||||
(contains? local-deleted-ids (get-lookup-id (last item)))))
|
||||
(or (= :db/retractEntity (first item))
|
||||
(contains? local-deleted-ids (get-lookup-id (last item))))))
|
||||
keep-last-update)]
|
||||
(when (not= tx-data sanitized-tx-data)
|
||||
(log/info :db-sync/tx-sanitized
|
||||
@@ -325,7 +325,7 @@
|
||||
(let [tx-ids (mapv :tx-id batch)
|
||||
txs (mapcat :tx batch)
|
||||
tx-data (->> txs
|
||||
db-normalize/remove-retract-entity-ref
|
||||
(db-normalize/remove-retract-entity-ref @conn)
|
||||
keep-last-update
|
||||
distinct)]
|
||||
;; (prn :debug :before-keep-last-update txs)
|
||||
@@ -533,9 +533,10 @@
|
||||
(->>
|
||||
(:tx-data reversed-tx-report)
|
||||
(keep
|
||||
(fn [[e a _v _t added]]
|
||||
(fn [[e a v _t added]]
|
||||
(when (and (= :block/uuid a) added
|
||||
(nil? (d/entity (:db-before reversed-tx-report) e)))
|
||||
(nil? (d/entity (:db-before reversed-tx-report)
|
||||
[:block/uuid v])))
|
||||
(d/entity (:db-after reversed-tx-report) e))))
|
||||
distinct)))
|
||||
|
||||
@@ -629,13 +630,21 @@
|
||||
(let [local-deleted-blocks (get-local-deleted-blocks reversed-tx-report reversed-tx-data)
|
||||
_ (when (seq remote-deleted-blocks)
|
||||
(reset! *remote-deleted-ids (set (map :block/uuid remote-deleted-blocks))))
|
||||
;; _ (prn :debug
|
||||
;; :local-deleted-blocks (map (fn [b] (select-keys b [:db/id :block/title])) local-deleted-blocks)
|
||||
;; :remote-deleted-blocks remote-deleted-blocks)
|
||||
deleted-nodes (concat local-deleted-blocks remote-deleted-blocks)
|
||||
deleted-ids (set (keep :block/uuid deleted-nodes))
|
||||
;; 3. rebase pending local txs
|
||||
rebase-tx-report (when (seq local-txs)
|
||||
(let [pending-tx-data (mapcat :tx local-txs)
|
||||
rebased-tx-data (sanitize-tx-data pending-tx-data
|
||||
(set (map :block/uuid local-deleted-blocks)))]
|
||||
rebased-tx-data (sanitize-tx-data
|
||||
(or (:db-after remote-tx-report)
|
||||
(:db-after reversed-tx-report))
|
||||
pending-tx-data
|
||||
(set (map :block/uuid local-deleted-blocks)))]
|
||||
;; (prn :debug :pending-tx-data pending-tx-data)
|
||||
;; (prn :debug :rebased-tx-data rebased-tx-data)
|
||||
(when (seq rebased-tx-data)
|
||||
(ldb/transact! temp-conn rebased-tx-data (assoc tx-meta :op :rebase)))))
|
||||
;; 4. fix tx data
|
||||
|
||||
Reference in New Issue
Block a user