impl asses skips if cksum matches or a lotta time passes

main
Bel LaPointe 2025-05-08 15:48:08 -06:00
parent 6b51a0c0a3
commit bfbc2b6e7f
1 changed files with 33 additions and 0 deletions

View File

@ -2,9 +2,42 @@ package asses
import (
"context"
"crypto/md5"
"encoding/base64"
"io"
"math/rand"
"os"
"time"
)
func One(ctx context.Context, p string) error {
if last, err := checkLast(ctx, p); err != nil {
return err
} else if last.T.IsZero() {
} else if cksum, err := cksum(ctx, p); err != nil {
return err
} else if cksum != last.Cksum {
} else if time.Since(last.T) < 20+time.Duration(rand.Int()%10)*24*time.Hour {
return nil
}
return io.EOF
cksum, err := cksum(ctx, p)
if err != nil {
return err
}
return checked(ctx, p, cksum)
}
func cksum(ctx context.Context, p string) (string, error) {
f, err := os.Open(p)
if err != nil {
return "", err
}
defer f.Close()
hasher := md5.New()
_, err = io.Copy(hasher, f)
return base64.StdEncoding.EncodeToString(hasher.Sum(nil)), err
}