@@ -113,7 +113,7 @@ func batchLoadTrees(boxIDs, paths []string, luteEngine *lute.Lute) (ret []*parse
113113 return
114114}
115115
116- func LoadTree (boxID , p string , luteEngine * lute.Lute ) (ret * parse.Tree , err error ) {
116+ func LoadTreeWithFix (boxID , p string , luteEngine * lute.Lute ) (ret * parse.Tree , needFix bool , err error ) {
117117 rootID := util .GetTreeID (p )
118118 if raw , ok := cache .GetTreeData (rootID ); ok {
119119 ret , err = LoadTreeByData (raw , boxID , p , luteEngine )
@@ -127,7 +127,7 @@ func LoadTree(boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, err erro
127127 return
128128 }
129129
130- data , err = fixTreeJSONData (boxID , p , data , luteEngine )
130+ data , needFix , err = fixTreeJSONData (boxID , p , data , luteEngine )
131131 if nil != err {
132132 return
133133 }
@@ -139,6 +139,11 @@ func LoadTree(boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, err erro
139139 return
140140}
141141
142+ func LoadTree (boxID , p string , luteEngine * lute.Lute ) (ret * parse.Tree , err error ) {
143+ ret , _ , err = LoadTreeWithFix (boxID , p , luteEngine )
144+ return
145+ }
146+
142147func LoadTreeByData (data []byte , boxID , p string , luteEngine * lute.Lute ) (ret * parse.Tree , err error ) {
143148 ret , err = parseJSON2Tree (boxID , p , data , luteEngine )
144149 if nil != err {
@@ -386,20 +391,19 @@ func afterWriteTree(tree *parse.Tree) {
386391}
387392
388393// fixTreeJSONData 订正树 JSON 数据。
389- func fixTreeJSONData (boxID , p string , jsonData []byte , luteEngine * lute.Lute ) ([]byte , error ) {
394+ func fixTreeJSONData (boxID , p string , jsonData []byte , luteEngine * lute.Lute ) (data []byte , needFix bool , err error ) {
390395 jsonData = removeUnescapedUnicodeNull (jsonData )
391- var needFix bool
392396 ret , needFix , err := dataparser .ParseJSON (jsonData , luteEngine .ParseOptions )
393397 if err != nil {
394398 logging .LogErrorf ("parse json [%s] to tree failed: %s" , boxID + p , err )
395- return nil , err
399+ return
396400 }
397401
398402 ret .Box = boxID
399403 ret .Path = p
400404
401405 if err = treenode .CheckSpec (ret ); errors .Is (err , treenode .ErrSpecTooNew ) {
402- return nil , err
406+ return
403407 }
404408
405409 if treenode .UpgradeSpec (ret ) {
@@ -422,29 +426,29 @@ func fixTreeJSONData(boxID, p string, jsonData []byte, luteEngine *lute.Lute) ([
422426 }
423427
424428 if ! needFix {
425- return jsonData , nil
429+ return jsonData , false , nil
426430 }
427431
428432 renderer := render .NewJSONRenderer (ret , luteEngine .RenderOptions , luteEngine .ParseOptions )
429- data : = renderer .Render ()
433+ data = renderer .Render ()
430434
431435 if ! util .UseSingleLineSave {
432436 buf := bytes.Buffer {}
433437 buf .Grow (1024 * 1024 * 2 )
434438 if err = json .Indent (& buf , data , "" , "\t " ); err != nil {
435- return nil , err
439+ return
436440 }
437441 data = buf .Bytes ()
438442 }
439443
440444 filePath := filepath .Join (util .DataDir , ret .Box , ret .Path )
441445 if err = os .MkdirAll (filepath .Dir (filePath ), 0755 ); err != nil {
442- return nil , err
446+ return
443447 }
444448 if err = filelock .WriteFile (filePath , data ); err != nil {
445449 logging .LogErrorf ("write data [%s] failed: %s" , filePath , err )
446450 }
447- return data , nil
451+ return
448452}
449453
450454func parseJSON2Tree (boxID , p string , jsonData []byte , luteEngine * lute.Lute ) (ret * parse.Tree , err error ) {
0 commit comments