From 6f6e4e23fe55ab08b893a287ea138b8a32bbe77c Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Wed, 25 Oct 2023 06:09:59 -0600 Subject: [PATCH] o it just werks that is sus --- ledger/file.go | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/ledger/file.go b/ledger/file.go index 4e150f9..b590b77 100644 --- a/ledger/file.go +++ b/ledger/file.go @@ -4,6 +4,7 @@ import ( "fmt" "io" "os" + "unicode" ) var filesAppendDelim = "\t" @@ -44,16 +45,43 @@ func (files Files) append(s string) error { } func (files Files) trimTrainlingWhitespace() error { - f, err := os.Open(string(files[0])) - if os.IsNotExist(err) { + idx, err := files._lastNonWhitespacePos() + if err != nil { + return err + } + if idx < 1 { return nil } + + f, err := os.OpenFile(string(files[0]), os.O_CREATE|os.O_WRONLY, os.ModePerm) if err != nil { return err } defer f.Close() - return io.EOF + return f.Truncate(int64(idx + 1)) +} + +func (files Files) _lastNonWhitespacePos() (int, error) { + f, err := os.Open(string(files[0])) + if os.IsNotExist(err) { + return -1, nil + } + if err != nil { + return -1, err + } + defer f.Close() + + b, err := io.ReadAll(f) + if err != nil { + return -1, err + } + for i := len(b) - 1; i >= 0; i-- { + if !unicode.IsSpace(rune(b[i])) { + return i, nil + } + } + return len(b) - 1, nil } func (files Files) Deltas(like ...Like) (Deltas, error) {