fix: never delete today page itself because it'll be auto-generated

This commit is contained in:
Tienson Qin
2026-01-20 18:24:54 +08:00
parent d0cd12a034
commit 75a326a83e
3 changed files with 31 additions and 17 deletions

View File

@@ -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))

View File

@@ -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)

View File

@@ -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