routes: use Manifests for ListHandler

This commit is contained in:
Michael Yang
2024-05-06 16:34:13 -07:00
parent a2fc933fed
commit c2714fcbfd
3 changed files with 127 additions and 58 deletions

View File

@@ -6,6 +6,7 @@ import (
"encoding/json"
"fmt"
"io"
"log/slog"
"os"
"path/filepath"
@@ -16,6 +17,7 @@ type Manifest struct {
ManifestV2
filepath string
fi os.FileInfo
digest string
}
@@ -65,6 +67,11 @@ func ParseNamedManifest(n model.Name) (*Manifest, error) {
}
defer f.Close()
fi, err := f.Stat()
if err != nil {
return nil, err
}
sha256sum := sha256.New()
if err := json.NewDecoder(io.TeeReader(f, sha256sum)).Decode(&m); err != nil {
return nil, err
@@ -73,6 +80,7 @@ func ParseNamedManifest(n model.Name) (*Manifest, error) {
return &Manifest{
ManifestV2: m,
filepath: p,
fi: fi,
digest: fmt.Sprintf("%x", sha256sum.Sum(nil)),
}, nil
}
@@ -126,7 +134,8 @@ func Manifests() (map[model.Name]*Manifest, error) {
if n.IsValid() {
m, err := ParseNamedManifest(n)
if err != nil {
return nil, err
slog.Warn("bad manifest", "name", n, "error", err)
continue
}
ms[n] = m