X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/d8f3785bb69288663f4cc46bf4d609c6770452d5..e86df5fad9aa2f280aad845adeefd239b0e944ae:/view.go diff --git a/view.go b/view.go index 4a6e567..9af1c21 100644 --- a/view.go +++ b/view.go @@ -88,13 +88,18 @@ func (v *View) Append(tree ViewNodeReader) (bool, error) { line := NodeKey{0, v.end} _, err := v.load(tree, line) if err != nil { - return false, err + return false, fmt.Errorf("load appended leaf: %w", err) } v.lines = append(v.lines, line) v.end++ - return v.fit(tree) + merged, err := v.fit(tree) + if err != nil { + return merged, fmt.Errorf("fit appended view: %w", err) + } + + return merged, nil } // load keeps the node of line when it is built, and tells if it is. @@ -121,14 +126,18 @@ func (v *View) fit(tree ViewNodeReader) (bool, error) { for v.merging && size > v.low { best, err := v.mostDue(tree) if err != nil || best < 0 { - return merged, err + if err != nil { + return merged, fmt.Errorf("choose merge candidate: %w", err) + } + + return merged, nil } left, right := v.lines[best], v.lines[best+1] parent := NodeKey{left.level + 1, left.index / 2} _, err = v.load(tree, parent) if err != nil { - return merged, err + return merged, fmt.Errorf("load merged parent: %w", err) } size += v.lineSize(parent) - v.lineSize(left) - v.lineSize(right) @@ -341,7 +350,7 @@ func restoreView(state ViewState, high, low int, tree ViewNodeReader) (*View, er built, err := v.load(tree, line) if err != nil { - return nil, err + return nil, fmt.Errorf("load restored view node: %w", err) } if line.level > 0 && !built {