From f1ff144740b84513e2a26a2e18bfb164b400ca60 Mon Sep 17 00:00:00 2001 From: vickydotbat Date: Sat, 4 Jul 2026 23:34:52 +0200 Subject: [PATCH] fix(depot): include asset path in invalid-sha error Co-Authored-By: Claude Fable 5 --- internal/depot/manifest.go | 16 +++++----------- internal/depot/manifest_test.go | 7 ++++--- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/internal/depot/manifest.go b/internal/depot/manifest.go index f6c2d04..6a639b6 100644 --- a/internal/depot/manifest.go +++ b/internal/depot/manifest.go @@ -17,12 +17,10 @@ type manifestFile struct { } `yaml:"assets"` } +var sha256Pattern = regexp.MustCompile(`^[0-9a-f]{64}$`) + func ValidSHA(s string) bool { - if len(s) != 64 { - return false - } - match, _ := regexp.MatchString("^[0-9a-f]{64}$", s) - return match + return sha256Pattern.MatchString(s) } func BlobKey(sha string) string { @@ -42,7 +40,7 @@ func ReferencedSHAs(dir string) (map[string]int64, error) { if entry.IsDir() { continue } - if !hasYAMLExt(entry.Name()) { + if filepath.Ext(entry.Name()) != ".yml" { continue } @@ -60,7 +58,7 @@ func ReferencedSHAs(dir string) (map[string]int64, error) { for _, asset := range manifest.Assets { if !ValidSHA(asset.SHA256) { - return nil, fmt.Errorf("%s: invalid sha256 hash", entry.Name()) + return nil, fmt.Errorf("%s: asset %q: invalid sha256 %q", entry.Name(), asset.Path, asset.SHA256) } // Keep the largest size for each sha @@ -76,7 +74,3 @@ func ReferencedSHAs(dir string) (map[string]int64, error) { return result, nil } - -func hasYAMLExt(name string) bool { - return filepath.Ext(name) == ".yml" || filepath.Ext(name) == ".yaml" -} diff --git a/internal/depot/manifest_test.go b/internal/depot/manifest_test.go index b738e6e..54f1748 100644 --- a/internal/depot/manifest_test.go +++ b/internal/depot/manifest_test.go @@ -111,10 +111,11 @@ func TestReferencedSHAs(t *testing.T) { _, err = ReferencedSHAs(tmpdir) if err == nil { - t.Errorf("ReferencedSHAs with bad sha: got nil error, want error naming file") + t.Fatalf("ReferencedSHAs with bad sha: got nil error, want error naming file and asset path") } - if err != nil && err.Error() != "badsha.yml: invalid sha256 hash" { - t.Errorf("ReferencedSHAs error message: got %q, should mention badsha.yml", err.Error()) + want := `badsha.yml: asset "file5.txt": invalid sha256 "not_a_valid_sha"` + if err.Error() != want { + t.Errorf("ReferencedSHAs error message: got %q, want %q", err.Error(), want) } }