del code related to last n lines

This commit is contained in:
bel
2024-07-20 09:55:03 -06:00
parent 2141e030ef
commit f41386b3b4
3 changed files with 24 additions and 264 deletions

View File

@@ -1,17 +1,13 @@
package ledger
import (
"bufio"
"bytes"
"fmt"
"io"
"io/fs"
"io/ioutil"
"os"
"path"
"path/filepath"
"sort"
"strings"
"unicode"
)
@@ -65,89 +61,6 @@ func (files Files) Amend(old, now Delta) error {
return files.Add(transaction.payee, []Delta{old, now}...)
}
func (files Files) TempGetLastNLines(n int) ([]string, error) {
p := files.paths()[0]
f, err := os.Open(p)
if err != nil {
return nil, err
}
defer f.Close()
return peekLastNLines(io.Discard, bufio.NewReader(f), n)
}
func (files Files) TempSetLastNLines(n int, lines []string) error {
p := files.paths()[0]
newFile, err := func() (string, error) {
w, err := ioutil.TempFile(os.TempDir(), path.Base(p))
if err != nil {
return "", err
}
defer w.Close()
r, err := os.Open(p)
if err != nil {
return "", err
}
defer r.Close()
if _, err := peekLastNLines(w, bufio.NewReader(r), n); err != nil {
return "", err
}
for i := range lines {
if len(strings.TrimSpace(lines[i])) == 0 {
continue
}
if _, err := fmt.Fprintln(w, lines[i]); err != nil {
return "", err
}
}
if err := w.Close(); err != nil {
return "", err
}
return w.Name(), nil
}()
if err != nil {
return err
}
r, err := os.Open(newFile)
if err != nil {
return err
}
defer r.Close()
w, err := os.Create(p)
if err != nil {
return err
}
defer w.Close()
_, err = io.Copy(w, r)
return err
}
func peekLastNLines(w io.Writer, r *bufio.Reader, n int) ([]string, error) {
lastNLines := make([]string, 0, n)
for {
line, err := r.ReadBytes('\n')
if len(bytes.TrimSpace(line)) > 0 {
lastNLines = append(lastNLines, string(bytes.TrimRight(line, "\n")))
for i := 0; i < len(lastNLines)-n; i++ {
fmt.Fprintln(w, lastNLines[i])
}
lastNLines = lastNLines[max(0, len(lastNLines)-n):]
}
if err == io.EOF {
break
}
if err != nil {
return nil, err
}
}
return lastNLines, nil
}
func (files Files) paths() []string {
result := make([]string, 0, len(files))
for i := range files {