settings-1 task 3: nil-safe ChannelHasDigests
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2 files changed,
+10
−1
internal/release/digests.go+3 −0internal/release/pointerdigests_test.go+7 −1
diff --git a/internal/release/digests.go b/internal/release/digests.go| index 0ce445317..b49d53dbb 100644 |
| --- a/internal/release/digests.go |
| +++ b/internal/release/digests.go |
| @@ -83,6 +83,9 @@ func (p *ChannelPointer) CarriesDigests() bool { return p != nil && p.Digest != |
| // ChannelHasDigests reports whether any entry carries a digest: the rollback |
| // rule's test (spec §4.6, "once its channel has any digest"). |
| func (p *ChannelPointer) ChannelHasDigests() bool { |
| + if p == nil { |
| + return false |
| + } |
| if p.CarriesDigests() { |
| return true |
| } |
diff --git a/internal/release/pointerdigests_test.go b/internal/release/pointerdigests_test.go| index c56a891b2..44bb21198 100644 |
| --- a/internal/release/pointerdigests_test.go |
| +++ b/internal/release/pointerdigests_test.go |
| @@ -56,7 +56,13 @@ func TestDigestOf(t *testing.T) { |
| } |
| var nilp *ChannelPointer |
| if nilp.DigestOf("v1") != "" { |
| - t.Fatal("a nil pointer has no digests") |
| + t.Fatal("a nil pointer DigestOf returns empty string") |
| + } |
| + if nilp.CarriesDigests() { |
| + t.Fatal("a nil pointer CarriesDigests returns false") |
| + } |
| + if nilp.ChannelHasDigests() { |
| + t.Fatal("a nil pointer ChannelHasDigests returns false") |
| } |
| } |