impl asses skips if cksum matches or a lotta time passes
parent
6b51a0c0a3
commit
bfbc2b6e7f
|
|
@ -2,9 +2,42 @@ package asses
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"crypto/md5"
|
||||||
|
"encoding/base64"
|
||||||
"io"
|
"io"
|
||||||
|
"math/rand"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func One(ctx context.Context, p string) error {
|
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
|
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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue