Skip to content

Commit 8ef576c

Browse files
committed
ContainerRegistry: Throw an error instead of asserting when registry digest does not match expectations
1 parent eb4e72e commit 8ef576c

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

Sources/ContainerRegistry/RegistryClient.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,24 @@ import FoundationNetworking
1919
import HTTPTypes
2020
import Basics
2121

22-
enum RegistryClientError: Error {
22+
public enum RegistryClientError: Error {
2323
case registryParseError(String)
2424
case invalidRegistryPath(String)
2525
case invalidUploadLocation(String)
2626
case invalidDigestAlgorithm(String)
27+
case digestMismatch(expected: String, registry: String)
2728
}
2829

2930
extension RegistryClientError: CustomStringConvertible {
30-
var description: String {
31+
/// Human-readable description of a RegistryClientError
32+
public var description: String {
3133
switch self {
3234
case let .registryParseError(reference): return "Unable to parse registry: \(reference)"
3335
case let .invalidRegistryPath(path): return "Unable to construct URL for registry path: \(path)"
3436
case let .invalidUploadLocation(location): return "Received invalid upload location from registry: \(location)"
3537
case let .invalidDigestAlgorithm(digest): return "Invalid or unsupported digest algorithm: \(digest)"
38+
case let .digestMismatch(expected, registry):
39+
return "Digest mismatch: expected \(expected), registry sent \(registry)"
3640
}
3741
}
3842
}

Sources/containertool/Extensions/RegistryClient+CopyBlobs.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ extension RegistryClient {
3939
log("Layer \(digest): pushing")
4040
let uploaded = try await destClient.putBlob(repository: destRepository, data: blob)
4141
log("Layer \(digest): done")
42-
assert("\(digest)" == uploaded.digest)
42+
43+
guard "\(digest)" == uploaded.digest else {
44+
throw RegistryClientError.digestMismatch(expected: "\(digest)", registry: uploaded.digest)
45+
}
4346
}
4447
}

0 commit comments

Comments
 (0)