@@ -220,7 +220,13 @@ extension ClientImage {
220220 } )
221221 }
222222
223- public static func pull( reference: String , platform: Platform ? = nil , scheme: RequestScheme = . auto, progressUpdate: ProgressUpdateHandler ? = nil ) async throws -> ClientImage {
223+ public static func pull(
224+ reference: String , platform: Platform ? = nil , scheme: RequestScheme = . auto, progressUpdate: ProgressUpdateHandler ? = nil , maxConcurrentDownloads: Int = 3
225+ ) async throws -> ClientImage {
226+ guard maxConcurrentDownloads > 0 else {
227+ throw ContainerizationError ( . invalidArgument, message: " maximum number of concurrent downloads must be greater than 0, got \( maxConcurrentDownloads) " )
228+ }
229+
224230 let client = newXPCClient ( )
225231 let request = newRequest ( . imagePull)
226232
@@ -234,6 +240,7 @@ extension ClientImage {
234240
235241 let insecure = try scheme. schemeFor ( host: host) == . http
236242 request. set ( key: . insecureFlag, value: insecure)
243+ request. set ( key: . maxConcurrentDownloads, value: Int64 ( maxConcurrentDownloads) )
237244
238245 var progressUpdateClient : ProgressUpdateClient ?
239246 if let progressUpdate {
@@ -313,8 +320,9 @@ extension ClientImage {
313320 return ( totalCount: total, activeCount: active, totalSize: size, reclaimableSize: reclaimable)
314321 }
315322
316- public static func fetch( reference: String , platform: Platform ? = nil , scheme: RequestScheme = . auto, progressUpdate: ProgressUpdateHandler ? = nil ) async throws -> ClientImage
317- {
323+ public static func fetch(
324+ reference: String , platform: Platform ? = nil , scheme: RequestScheme = . auto, progressUpdate: ProgressUpdateHandler ? = nil , maxConcurrentDownloads: Int = 3
325+ ) async throws -> ClientImage {
318326 do {
319327 let match = try await self . get ( reference: reference)
320328 if let platform {
@@ -327,7 +335,7 @@ extension ClientImage {
327335 guard err. isCode ( . notFound) else {
328336 throw err
329337 }
330- return try await Self . pull ( reference: reference, platform: platform, scheme: scheme, progressUpdate: progressUpdate)
338+ return try await Self . pull ( reference: reference, platform: platform, scheme: scheme, progressUpdate: progressUpdate, maxConcurrentDownloads : maxConcurrentDownloads )
331339 }
332340 }
333341}
0 commit comments