Skip to content

Commit fb0f042

Browse files
committed
Allow clients to programmatically accept an identity change
This will allow clients to take the information from specific registry error cases and programmatically accept them as valid. This can be useful if a client wants to offer a way for users to accept an allowed identity change.
1 parent 50f7b54 commit fb0f042

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

Sources/PackageRegistry/RegistryClient.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,24 @@ public final class RegistryClient: Cancellable {
102102
try self.httpClient.cancel(deadline: deadline)
103103
}
104104

105+
public func acceptIdentityChange(
106+
package: PackageIdentity.RegistryIdentity,
107+
version: Version,
108+
signingEntity: SigningEntity,
109+
observabilityScope: ObservabilityScope,
110+
callbackQueue: DispatchQueue,
111+
completion: @escaping (Result<Void, Error>) -> Void
112+
) {
113+
let signingEntityTOFU = PackageSigningEntityTOFU(signingEntityStorage: self.signingEntityStorage, signingEntityCheckingMode: self.signingEntityCheckingMode)
114+
signingEntityTOFU.writeToStorage(
115+
package: package,
116+
version: version,
117+
signingEntity: signingEntity,
118+
observabilityScope: observabilityScope,
119+
callbackQueue: callbackQueue,
120+
completion: completion)
121+
}
122+
105123
public func getPackageMetadata(
106124
package: PackageIdentity,
107125
timeout: DispatchTimeInterval? = .none,

Sources/PackageRegistry/SigningEntityTOFU.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ struct PackageSigningEntityTOFU {
178178
}
179179
}
180180

181-
private func writeToStorage(
181+
func writeToStorage(
182182
package: PackageIdentity.RegistryIdentity,
183183
version: Version,
184184
signingEntity: SigningEntity,

Sources/Workspace/Workspace.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3402,6 +3402,24 @@ extension Workspace {
34023402
// remove the local copy
34033403
try registryDownloadsManager.remove(package: dependency.packageRef.identity)
34043404
}
3405+
3406+
/// Accept an identity change that we raise a `RegistryError` for.
3407+
public func acceptIdentityChange(
3408+
package: PackageIdentity.RegistryIdentity,
3409+
version: Version,
3410+
signingEntity: SigningEntity,
3411+
observabilityScope: ObservabilityScope,
3412+
callbackQueue: DispatchQueue,
3413+
completion: @escaping (Result<Void, Error>) -> Void
3414+
) {
3415+
self.registryClient.acceptIdentityChange(
3416+
package: package,
3417+
version: version,
3418+
signingEntity: signingEntity,
3419+
observabilityScope: observabilityScope,
3420+
callbackQueue: callbackQueue,
3421+
completion: completion)
3422+
}
34053423
}
34063424

34073425
// MARK: - Utility extensions

0 commit comments

Comments
 (0)