Bläddra i källkod

Merge remote-tracking branch 'origin/dev' into dev

Vanessa 2 år sedan
förälder
incheckning
ae98a6dba5
2 ändrade filer med 19 tillägg och 8 borttagningar
  1. 18 8
      kernel/filesys/tree.go
  2. 1 0
      kernel/treenode/tree.go

+ 18 - 8
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
 		}

+ 1 - 0
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))