mirror of
https://github.com/siyuan-note/siyuan.git
synced 2026-03-03 02:37:02 +00:00
🎨 Improve rollback doc to avoid ID duplication https://github.com/siyuan-note/siyuan/issues/14358
This commit is contained in:
@@ -304,18 +304,7 @@ func RollbackDocHistory(boxID, historyPath string) (err error) {
|
||||
}
|
||||
}
|
||||
for _, nodeID := range duplicatedIDs {
|
||||
node := nodes[nodeID]
|
||||
node.ID = ast.NewNodeID()
|
||||
node.SetIALAttr("id", node.ID)
|
||||
created := util.TimeFromID(node.ID)
|
||||
updated := node.IALAttr("updated")
|
||||
if "" == updated {
|
||||
updated = created
|
||||
}
|
||||
if updated < created {
|
||||
updated = created
|
||||
}
|
||||
node.SetIALAttr("updated", updated)
|
||||
treenode.ResetNodeID(nodes[nodeID])
|
||||
}
|
||||
|
||||
// 仅重新索引该文档,不进行全量索引
|
||||
|
||||
@@ -204,8 +204,7 @@ func resetDuplicateBlocksOnFileSys() {
|
||||
|
||||
if "" == n.ID {
|
||||
needOverwrite = true
|
||||
n.ID = ast.NewNodeID()
|
||||
n.SetIALAttr("id", n.ID)
|
||||
treenode.ResetNodeID(n)
|
||||
return ast.WalkContinue
|
||||
}
|
||||
|
||||
@@ -225,8 +224,7 @@ func resetDuplicateBlocksOnFileSys() {
|
||||
|
||||
// 其他情况,重置节点 ID
|
||||
needOverwrite = true
|
||||
n.ID = ast.NewNodeID()
|
||||
n.SetIALAttr("id", n.ID)
|
||||
treenode.ResetNodeID(n)
|
||||
needRefreshUI = true
|
||||
return ast.WalkContinue
|
||||
})
|
||||
|
||||
@@ -34,6 +34,28 @@ import (
|
||||
"github.com/siyuan-note/siyuan/kernel/util"
|
||||
)
|
||||
|
||||
func ResetNodeID(node *ast.Node) {
|
||||
if nil == node {
|
||||
return
|
||||
}
|
||||
|
||||
node.ID = ast.NewNodeID()
|
||||
node.SetIALAttr("id", node.ID)
|
||||
resetUpdatedByID(node)
|
||||
}
|
||||
|
||||
func resetUpdatedByID(node *ast.Node) {
|
||||
created := util.TimeFromID(node.ID)
|
||||
updated := node.IALAttr("updated")
|
||||
if "" == updated {
|
||||
updated = created
|
||||
}
|
||||
if updated < created {
|
||||
updated = created
|
||||
}
|
||||
node.SetIALAttr("updated", updated)
|
||||
}
|
||||
|
||||
func GetEmbedBlockRef(embedNode *ast.Node) (blockRefID string) {
|
||||
if nil == embedNode || ast.NodeBlockQueryEmbed != embedNode.Type {
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user