github.com/wrgl/wrgl@v0.14.0/pkg/ref/fs/logreader.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright © 2022 Wrangle Ltd
     3  
     4  package reffs
     5  
     6  import (
     7  	"io"
     8  
     9  	"github.com/wrgl/wrgl/pkg/misc"
    10  	"github.com/wrgl/wrgl/pkg/ref"
    11  )
    12  
    13  type logReader struct {
    14  	scanner *misc.BackwardScanner
    15  	r       io.Closer
    16  }
    17  
    18  func NewReflogReader(r io.ReadSeekCloser) (ref.ReflogReader, error) {
    19  	scanner, err := misc.NewBackwardScanner(r)
    20  	if err != nil {
    21  		return nil, err
    22  	}
    23  	return &logReader{
    24  		scanner: scanner,
    25  		r:       r,
    26  	}, nil
    27  }
    28  
    29  func (r *logReader) Read() (rec *ref.Reflog, err error) {
    30  	line := ""
    31  	for line == "" {
    32  		line, err = r.scanner.ReadLine()
    33  		if err != nil {
    34  			return
    35  		}
    36  	}
    37  	rec = &ref.Reflog{}
    38  	_, err = rec.Read([]byte(line))
    39  	return rec, err
    40  }
    41  
    42  func (r *logReader) Close() error {
    43  	return r.r.Close()
    44  }