Skip to content

Commit

Permalink
🐛 The subdoc creation path is unstable when a parent doc with the sam…
Browse files Browse the repository at this point in the history
…e name exists Fix #9322
  • Loading branch information
88250 committed Sep 30, 2023
1 parent 17dd264 commit 49d9253
Showing 1 changed file with 25 additions and 6 deletions.
31 changes: 25 additions & 6 deletions kernel/model/path.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,6 @@ import (

func createDocsByHPath(boxID, hPath, content, parentID, id string /* id 参数仅在 parentID 不为空的情况下使用 */) (retID string, err error) {
hPath = strings.TrimSuffix(hPath, ".sy")
pathBuilder := bytes.Buffer{}
pathBuilder.WriteString("/")
hPathBuilder := bytes.Buffer{}
hPathBuilder.WriteString("/")

if "" != parentID {
retID = id

Expand Down Expand Up @@ -68,11 +63,35 @@ func createDocsByHPath(boxID, hPath, content, parentID, id string /* id 参数
return
}

hPathBuilder := bytes.Buffer{}
hpathBtMap := map[string]*treenode.BlockTree{}
parts := strings.Split(hPath, "/")[1:]
// The subdoc creation path is unstable when a parent doc with the same name exists https://github.com/siyuan-note/siyuan/issues/9322
// 存在同名父文档时子文档创建路径不稳定,这里需要按照完整的 hpath 映射,不能在下面的循环中边构建 hpath 边构建 path,否则虽然 hpath 相同,但是会导致 path 组装错位
for i, part := range parts {
if i == len(parts)-1 {
break
}

hPathBuilder.WriteString("/")
hPathBuilder.WriteString(part)
hp := hPathBuilder.String()
root = treenode.GetBlockTreeRootByHPath(boxID, hp)
if nil == root {
break
}

hpathBtMap[hp] = root
}

pathBuilder := bytes.Buffer{}
pathBuilder.WriteString("/")
hPathBuilder = bytes.Buffer{}
hPathBuilder.WriteString("/")
for i, part := range parts {
hPathBuilder.WriteString(part)
hp := hPathBuilder.String()
root := treenode.GetBlockTreeRootByHPath(boxID, hp)
root = hpathBtMap[hp]
isNotLast := i < len(parts)-1
if nil == root {
retID = ast.NewNodeID()
Expand Down

0 comments on commit 49d9253

Please sign in to comment.