Enforce progress event value types (#579)

Enforces progress event value types.
This commit is contained in:
Dmitry Kovba authored and GitHub committed 2026-03-17 09:23:45 -07:00
1 parent a35b168888
commit 8df7ce78d7
6 files changed
+44 -32

No files matched your search

@@ -91,14 +91,14 @@ extension ImageStore {
for layerGroup in pushQueue {
for desc in layerGroup {
await progress?([
ProgressEvent(event: "add-total-size", value: desc.size),
ProgressEvent(event: "add-total-items", value: 1),
.addTotalSize(desc.size),
.addTotalItems(1),
])
}
}
await progress?([
ProgressEvent(event: "add-total-size", value: localIndexData.count),
ProgressEvent(event: "add-total-items", value: 1),
.addTotalSize(Int64(localIndexData.count)),
.addTotalItems(1),
])
}
@@ -135,15 +135,15 @@ extension ImageStore {
}
try await client.push(name: name, ref: tag, descriptor: descriptor, streamGenerator: generator, progress: progress)
await progress?([
ProgressEvent(event: "add-size", value: descriptor.size),
ProgressEvent(event: "add-items", value: 1),
.addSize(descriptor.size),
.addItems(1),
])
} catch let err as ContainerizationError {
guard err.code != .exists else {
// We reported the total items and size and have to account for them in existing content.
await progress?([
ProgressEvent(event: "add-size", value: descriptor.size),
ProgressEvent(event: "add-items", value: 1),
.addSize(descriptor.size),
.addItems(1),
])
return
}
@@ -52,8 +52,8 @@ extension ImageStore {
size += desc.size
}
await progress([
ProgressEvent(event: "add-total-size", value: size),
ProgressEvent(event: "add-total-items", value: toProcess.count),
.addTotalSize(size),
.addTotalItems(toProcess.count),
])
}
@@ -146,9 +146,9 @@ extension ImageStore {
try FileManager.default.copyItem(at: found.path, to: ingestDir.appendingPathComponent(descriptor.digest.trimmingDigestPrefix))
await progress?([
// Count the size of the blob
ProgressEvent(event: "add-size", value: descriptor.size),
.addSize(descriptor.size),
// Count the number of blobs
ProgressEvent(event: "add-items", value: 1),
.addItems(1),
])
return
}
@@ -160,7 +160,7 @@ extension ImageStore {
}
// Count the number of blobs
await progress?([
ProgressEvent(event: "add-items", value: 1)
.addItems(1)
])
}
@@ -190,7 +190,7 @@ extension ImageStore {
if let progress {
let size = Int64(result.size)
await progress([
ProgressEvent(event: "add-size", value: size)
.addSize(size)
])
}
guard result.digest.digestString == descriptor.digest else {
@@ -44,7 +44,7 @@ extension EXT4.Formatter {
if let progress {
Task {
await progress([
ProgressEvent(event: "add-items", value: 1)
.addItems(1)
])
}
}
@@ -88,7 +88,7 @@ extension EXT4.Formatter {
if let progress, let size = entry.size {
Task {
await progress([
ProgressEvent(event: "add-size", value: Int64(size))
.addSize(Int64(size))
])
}
}
@@ -15,23 +15,35 @@
//===----------------------------------------------------------------------===//
/// A progress update event.
public struct ProgressEvent: Sendable {
/// The event name. The possible values:
public enum ProgressEvent: Sendable {
/// The possible values:
/// - `add-items`: Increment the number of processed items by `value`.
/// - `add-total-items`: Increment the total number of items to process by `value`.
/// - `add-size`: Increment the size of processed items by `value`.
/// - `add-total-size`: Increment the total size of items to process by `value`.
public let event: String
/// The event value.
public let value: any Sendable
case addItems(Int)
case addTotalItems(Int)
case addSize(Int64)
case addTotalSize(Int64)
/// Creates an instance.
/// - Parameters:
/// - event: The event name.
/// - value: The event value.
public init(event: String, value: any Sendable) {
self.event = event
self.value = value
/// The event name.
public var event: String {
switch self {
case .addItems: "add-items"
case .addTotalItems: "add-total-items"
case .addSize: "add-size"
case .addTotalSize: "add-total-size"
}
}
/// The event value.
public var value: any Sendable {
switch self {
case .addItems(let value): value
case .addTotalItems(let value): value
case .addSize(let value): value
case .addTotalSize(let value): value
}
}
}
@@ -71,7 +71,7 @@ package final class LocalOCILayoutClient: ContentClient {
if let progress, let fileSize = fileManager.fileSize(atPath: filePath) {
await progress([
ProgressEvent(event: "add-size", value: fileSize)
.addSize(fileSize)
])
}
} catch let error as NSError {
@@ -93,7 +93,7 @@ package final class LocalOCILayoutClient: ContentClient {
if let progress, let fileSize = fileManager.fileSize(atPath: filePath) {
await progress([
ProgressEvent(event: "add-size", value: fileSize)
.addSize(fileSize)
])
}
} catch {
@@ -181,7 +181,7 @@ extension RegistryClient {
received += readBytes
let written = try await writer.write(contentsOf: buf)
await progress?([
ProgressEvent(event: "add-size", value: written)
.addSize(written)
])
guard written == readBytes else {
throw ContainerizationError(
@@ -224,7 +224,7 @@ extension RegistryClient {
let readBytes = Int64(buf.readableBytes)
received += readBytes
await progress?([
ProgressEvent(event: "add-size", value: readBytes)
.addSize(readBytes)
])
try fd.write(contentsOf: buf.readableBytesView)
hasher.update(data: buf.readableBytesView)