From 568f5ec6efa233950bb25e2632ff8699d9c0acf6 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 18 Oct 2022 11:34:08 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E5=8A=A0=E8=BD=BD=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E6=97=B6=E5=A6=82=E6=9E=9C=E5=8F=91=E7=8E=B0=E7=88=B6=E6=96=87?= =?UTF-8?q?=E6=A1=A3=20.sy=20=E6=96=87=E4=BB=B6=E7=BC=BA=E5=A4=B1=E5=88=99?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E9=87=8D=E5=BB=BA=20Fix=20https://github.com?= =?UTF-8?q?/siyuan-note/siyuan/issues/6252?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/filesys/tree.go | 26 ++++++++++++++++++-------- kernel/treenode/tree.go | 1 + 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/kernel/filesys/tree.go b/kernel/filesys/tree.go index 7372a9f43..7afec220d 100644 --- a/kernel/filesys/tree.go +++ b/kernel/filesys/tree.go @@ -64,23 +64,33 @@ func LoadTree(boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, err erro hPathBuilder := bytes.Buffer{} hPathBuilder.WriteString("/") for i, _ := range parts { - var parentPath string + var parentAbsPath string if 0 < i { - parentPath = strings.Join(parts[:i+1], "/") + parentAbsPath = strings.Join(parts[:i+1], "/") } else { - parentPath = parts[0] + parentAbsPath = parts[0] } - parentPath += ".sy" - parentPath = filepath.Join(util.DataDir, boxID, parentPath) - parentData, readErr := filelock.ReadFile(parentPath) + parentAbsPath += ".sy" + parentPath := parentAbsPath + parentAbsPath = filepath.Join(util.DataDir, boxID, parentAbsPath) + parentData, readErr := filelock.ReadFile(parentAbsPath) if nil != readErr { - logging.LogWarnf("read parent tree data [%s] failed: %s", parentPath, readErr) + if os.IsNotExist(readErr) { + parentTree := treenode.NewTree(boxID, parentPath, hPathBuilder.String()+"Untitled", "Untitled") + if writeErr := WriteTree(parentTree); nil != writeErr { + logging.LogErrorf("rebuild parent tree [%s] failed: %s", parentAbsPath, writeErr) + } else { + logging.LogInfof("rebuilt parent tree [%s]", parentAbsPath) + } + } else { + logging.LogWarnf("read parent tree data [%s] failed: %s", parentAbsPath, readErr) + } hPathBuilder.WriteString("Untitled/") continue } parentTree, parseErr := parse.ParseJSONWithoutFix(parentData, luteEngine.ParseOptions) if nil != parseErr { - logging.LogWarnf("parse parent tree [%s] failed: %s", parentPath, parseErr) + logging.LogWarnf("parse parent tree [%s] failed: %s", parentAbsPath, parseErr) hPathBuilder.WriteString("Untitled/") continue } diff --git a/kernel/treenode/tree.go b/kernel/treenode/tree.go index 22f9ba950..85d79fa0c 100644 --- a/kernel/treenode/tree.go +++ b/kernel/treenode/tree.go @@ -76,6 +76,7 @@ func NewTree(boxID, p, hp, title string) *parse.Tree { ret.Box = boxID ret.Path = p ret.HPath = hp + ret.Root.Spec = "1" newPara := &ast.Node{Type: ast.NodeParagraph, ID: ast.NewNodeID()} newPara.SetIALAttr("id", newPara.ID) newPara.SetIALAttr("updated", util.TimeFromID(newPara.ID))