Skip to content

Commit 817a355

Browse files
committed
wip
1 parent 5d039ee commit 817a355

21 files changed

+113
-145
lines changed

Sources/Commands/SwiftTool.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -785,14 +785,9 @@ public class SwiftTool {
785785
cachePath = try self.getCachePath().map{ $0.appending(component: "manifests") }
786786
}
787787

788-
// inject URL mapping (aka mirrors)
789-
let config = try self.getSwiftPMConfig()
790-
let identityResolver = DefaultIdentityResolver(urlMapper: config.mirrors.effectiveURL(forURL:))
791-
792788
return try ManifestLoader(
793789
// Always use the host toolchain's resources for parsing manifest.
794790
manifestResources: self._hostToolchain.get().manifestResources,
795-
identityResolver: identityResolver,
796791
isManifestSandboxEnabled: !self.options.shouldDisableSandbox,
797792
cacheDir: cachePath,
798793
extraManifestFlags: self.options.manifestFlags

Sources/PackageGraph/LocalPackageContainer.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import TSCUtility
2525
/// Examples: Root packages, local dependencies, edited packages.
2626
public final class LocalPackageContainer: PackageContainer {
2727
public let package: PackageReference
28-
private let mirrors: DependencyMirrors
28+
private let identityResolver: IdentityResolver
2929
private let manifestLoader: ManifestLoaderProtocol
3030
private let toolsVersionLoader: ToolsVersionLoaderProtocol
3131
private let currentToolsVersion: ToolsVersion
@@ -53,6 +53,7 @@ public final class LocalPackageContainer: PackageContainer {
5353
version: nil,
5454
revision: nil,
5555
toolsVersion: toolsVersion,
56+
identityResolver: identityResolver,
5657
fileSystem: fileSystem,
5758
diagnostics: nil,
5859
on: .global(),
@@ -62,7 +63,7 @@ public final class LocalPackageContainer: PackageContainer {
6263
}
6364

6465
public func getUnversionedDependencies(productFilter: ProductFilter) throws -> [PackageContainerConstraint] {
65-
return try loadManifest().dependencyConstraints(productFilter: productFilter, mirrors: mirrors)
66+
return try loadManifest().dependencyConstraints(productFilter: productFilter)
6667
}
6768

6869
public func getUpdatedIdentifier(at boundVersion: BoundVersion) throws -> PackageReference {
@@ -73,15 +74,15 @@ public final class LocalPackageContainer: PackageContainer {
7374

7475
public init(
7576
package: PackageReference,
76-
mirrors: DependencyMirrors,
77+
identityResolver: IdentityResolver,
7778
manifestLoader: ManifestLoaderProtocol,
7879
toolsVersionLoader: ToolsVersionLoaderProtocol,
7980
currentToolsVersion: ToolsVersion,
8081
fileSystem: FileSystem = localFileSystem
8182
) {
8283
assert(URL.scheme(package.location) == nil, "unexpected scheme \(URL.scheme(package.location)!) in \(package.location)")
8384
self.package = package
84-
self.mirrors = mirrors
85+
self.identityResolver = identityResolver
8586
self.manifestLoader = manifestLoader
8687
self.toolsVersionLoader = toolsVersionLoader
8788
self.currentToolsVersion = currentToolsVersion

Sources/PackageGraph/PackageGraph+Loading.swift

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ extension PackageGraph {
2020
/// Load the package graph for the given package path.
2121
public static func load(
2222
root: PackageGraphRoot,
23-
mirrors: DependencyMirrors = [:],
23+
identityResolver: IdentityResolver,
2424
additionalFileRules: [FileRuleDescription] = [],
2525
externalManifests: [Manifest],
2626
requiredDependencies: Set<PackageReference> = [],
@@ -129,7 +129,7 @@ extension PackageGraph {
129129
// Resolve dependencies and create resolved packages.
130130
let resolvedPackages = try createResolvedPackages(
131131
allManifests: allManifests,
132-
mirrors: mirrors,
132+
identityResolver: identityResolver,
133133
manifestToPackage: manifestToPackage,
134134
rootManifestSet: rootManifestSet,
135135
unsafeAllowedPackages: unsafeAllowedPackages,
@@ -187,7 +187,7 @@ private func checkAllDependenciesAreUsed(_ rootPackages: [ResolvedPackage], _ di
187187
/// Create resolved packages from the loaded packages.
188188
private func createResolvedPackages(
189189
allManifests: [GraphLoadingNode],
190-
mirrors: DependencyMirrors,
190+
identityResolver: IdentityResolver,
191191
manifestToPackage: [Manifest: Package],
192192
// FIXME: This shouldn't be needed once <rdar://problem/33693433> is fixed.
193193
rootManifestSet: Set<Manifest>,
@@ -420,12 +420,11 @@ private func createResolvedPackages(
420420
// explicitly reference the package containing the product, or for the product, package and
421421
// dependency to share the same name. We don't check this in manifest loading for root-packages so
422422
// we can provide a more detailed diagnostic here.
423-
let referencedPackageURL = mirrors.effectiveURL(forURL: product.packageBuilder.package.manifest.packageLocation)
424-
let referencedPackageIdentity = PackageIdentity(url: referencedPackageURL)
423+
let referencedPackageIdentity = identityResolver.resolveIdentity(for: product.packageBuilder.package.manifest.packageLocation)
425424
guard let packageDependency = (packageBuilder.package.manifest.dependencies.first { package in
426425
return package.identity == referencedPackageIdentity
427426
}) else {
428-
throw InternalError("dependency reference for \(referencedPackageURL) not found")
427+
throw InternalError("dependency reference for \(product.packageBuilder.package.manifest.packageLocation) not found")
429428
}
430429

431430
let packageName = product.packageBuilder.package.name

Sources/PackageGraph/PackageGraphRoot.swift

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,11 @@ public struct PackageGraphRootInput {
2222
/// Top level dependencies to the graph.
2323
public let dependencies: [PackageDependencyDescription]
2424

25-
/// Dependency mirrors for the graph.
26-
public let mirrors: DependencyMirrors
2725

2826
/// Create a package graph root.
29-
public init(packages: [AbsolutePath], dependencies: [PackageDependencyDescription] = [], mirrors: DependencyMirrors = [:]) {
27+
public init(packages: [AbsolutePath], dependencies: [PackageDependencyDescription] = []) {
3028
self.packages = packages
3129
self.dependencies = dependencies
32-
self.mirrors = mirrors
3330
}
3431
}
3532

@@ -71,13 +68,13 @@ public struct PackageGraphRoot {
7168
}
7269

7370
/// Returns the constraints imposed by root manifests + dependencies.
74-
public func constraints(mirrors: DependencyMirrors) -> [PackageContainerConstraint] {
71+
public func constraints() -> [PackageContainerConstraint] {
7572
let constraints = packageRefs.map{
7673
PackageContainerConstraint(package: $0, requirement: .unversioned, products: .everything)
7774
}
7875
return constraints + dependencies.map{
7976
PackageContainerConstraint(
80-
package: $0.createPackageRef(mirrors: mirrors),
77+
package: $0.createPackageRef(),
8178
requirement: $0.toConstraintRequirement(),
8279
products: $0.productFilter
8380
)

Sources/PackageGraph/PackageModel+Extensions.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import SourceControl
1313

1414
extension PackageDependencyDescription {
1515
/// Create the package reference object for the dependency.
16-
public func createPackageRef(mirrors: DependencyMirrors) -> PackageReference {
16+
public func createPackageRef() -> PackageReference {
1717
// TODO (next steps): move the location into PackageKind to preserve path vs. location
1818
let packageKind: PackageReference.Kind
1919
let location: String
@@ -35,10 +35,10 @@ extension PackageDependencyDescription {
3535

3636
extension Manifest {
3737
/// Constructs constraints of the dependencies in the raw package.
38-
public func dependencyConstraints(productFilter: ProductFilter, mirrors: DependencyMirrors) -> [PackageContainerConstraint] {
38+
public func dependencyConstraints(productFilter: ProductFilter) -> [PackageContainerConstraint] {
3939
return dependenciesRequired(for: productFilter).map({
4040
return PackageContainerConstraint(
41-
package: $0.createPackageRef(mirrors: mirrors),
41+
package: $0.createPackageRef(),
4242
requirement: $0.toConstraintRequirement(),
4343
products: $0.productFilter)
4444
})

Sources/PackageGraph/RepositoryPackageContainer.swift

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public class RepositoryPackageContainer: PackageContainer, CustomStringConvertib
5757

5858
public let package: PackageReference
5959
private let repository: Repository
60-
private let mirrors: DependencyMirrors
60+
private let identityResolver: IdentityResolver
6161
private let manifestLoader: ManifestLoaderProtocol
6262
private let toolsVersionLoader: ToolsVersionLoaderProtocol
6363
private let currentToolsVersion: ToolsVersion
@@ -76,14 +76,14 @@ public class RepositoryPackageContainer: PackageContainer, CustomStringConvertib
7676

7777
init(
7878
package: PackageReference,
79-
mirrors: DependencyMirrors,
79+
identityResolver: IdentityResolver,
8080
repository: Repository,
8181
manifestLoader: ManifestLoaderProtocol,
8282
toolsVersionLoader: ToolsVersionLoaderProtocol,
8383
currentToolsVersion: ToolsVersion
8484
) {
8585
self.package = package
86-
self.mirrors = mirrors
86+
self.identityResolver = identityResolver
8787
self.repository = repository
8888
self.manifestLoader = manifestLoader
8989
self.toolsVersionLoader = toolsVersionLoader
@@ -222,7 +222,7 @@ public class RepositoryPackageContainer: PackageContainer, CustomStringConvertib
222222
productFilter: ProductFilter
223223
) throws -> (Manifest, [Constraint]) {
224224
let manifest = try self.loadManifest(at: revision, version: version)
225-
return (manifest, manifest.dependencyConstraints(productFilter: productFilter, mirrors: mirrors))
225+
return (manifest, manifest.dependencyConstraints(productFilter: productFilter))
226226
}
227227

228228
public func getUnversionedDependencies(productFilter: ProductFilter) throws -> [Constraint] {
@@ -287,6 +287,7 @@ public class RepositoryPackageContainer: PackageContainer, CustomStringConvertib
287287
version: version,
288288
revision: nil,
289289
toolsVersion: toolsVersion,
290+
identityResolver: identityResolver,
290291
fileSystem: fs,
291292
diagnostics: nil,
292293
on: .global(),
@@ -311,7 +312,7 @@ public class RepositoryPackageContainer: PackageContainer, CustomStringConvertib
311312
public class RepositoryPackageContainerProvider: PackageContainerProvider {
312313
let repositoryManager: RepositoryManager
313314
let manifestLoader: ManifestLoaderProtocol
314-
let mirrors: DependencyMirrors
315+
let identityResolver: IdentityResolver
315316

316317
/// The tools version currently in use. Only the container versions less than and equal to this will be provided by
317318
/// the container.
@@ -329,13 +330,13 @@ public class RepositoryPackageContainerProvider: PackageContainerProvider {
329330
/// - toolsVersionLoader: The tools version loader.
330331
public init(
331332
repositoryManager: RepositoryManager,
332-
mirrors: DependencyMirrors = [:],
333+
identityResolver: IdentityResolver,
333334
manifestLoader: ManifestLoaderProtocol,
334335
currentToolsVersion: ToolsVersion = ToolsVersion.currentToolsVersion,
335336
toolsVersionLoader: ToolsVersionLoaderProtocol = ToolsVersionLoader()
336337
) {
337338
self.repositoryManager = repositoryManager
338-
self.mirrors = mirrors
339+
self.identityResolver = identityResolver
339340
self.manifestLoader = manifestLoader
340341
self.currentToolsVersion = currentToolsVersion
341342
self.toolsVersionLoader = toolsVersionLoader
@@ -352,7 +353,7 @@ public class RepositoryPackageContainerProvider: PackageContainerProvider {
352353
return queue.async {
353354
let container = LocalPackageContainer(
354355
package: package,
355-
mirrors: self.mirrors,
356+
identityResolver: self.identityResolver,
356357
manifestLoader: self.manifestLoader,
357358
toolsVersionLoader: self.toolsVersionLoader,
358359
currentToolsVersion: self.currentToolsVersion,
@@ -372,7 +373,7 @@ public class RepositoryPackageContainerProvider: PackageContainerProvider {
372373
let repository = try handle.open()
373374
return RepositoryPackageContainer(
374375
package: package,
375-
mirrors: self.mirrors,
376+
identityResolver: self.identityResolver,
376377
repository: repository,
377378
manifestLoader: self.manifestLoader,
378379
toolsVersionLoader: self.toolsVersionLoader,

Sources/PackageLoading/IdentityResolver.swift

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,26 @@ import PackageModel
1515
public protocol IdentityResolver {
1616
func resolveIdentity(for location: String) -> PackageIdentity
1717
func resolveIdentity(for path: AbsolutePath) -> PackageIdentity
18-
func resolveURL(from otherURL: String) -> String
18+
func resolveLocation(from location: String) -> String
1919
}
2020

2121
public struct DefaultIdentityResolver: IdentityResolver {
22-
let urlMapper: (String) -> String
22+
let locationMapper: (String) -> String
2323

24-
public init(urlMapper: @escaping (String) -> String = { $0 }) {
25-
self.urlMapper = urlMapper
24+
public init(locationMapper: @escaping (String) -> String = { $0 }) {
25+
self.locationMapper = locationMapper
2626
}
2727

2828
public func resolveIdentity(for location: String) -> PackageIdentity {
29+
let location = self.resolveLocation(from: location)
2930
return PackageIdentity(url: location)
3031
}
3132

3233
public func resolveIdentity(for path: AbsolutePath) -> PackageIdentity {
3334
return PackageIdentity(url: path.pathString)
3435
}
3536

36-
public func resolveURL(from otherURL: String) -> String {
37-
return self.urlMapper(otherURL)
37+
public func resolveLocation(from location: String) -> String {
38+
return self.locationMapper(location)
3839
}
3940
}

Sources/PackageLoading/ManifestLoader.swift

Lines changed: 8 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public protocol ManifestLoaderProtocol {
8080
/// - version: Optional. The version the manifest is from, if known.
8181
/// - revision: Optional. The revision the manifest is from, if known
8282
/// - toolsVersion: The version of the tools the manifest supports.
83-
/// - kind: The kind of package the manifest is from.
83+
/// - identityResolver: A helper to resolve identities based on configuration
8484
/// - fileSystem: The file system to load from.
8585
/// - diagnostics: Optional. The diagnostics engine.
8686
/// - on: The dispatch queue to perform asynchronous operations on.
@@ -92,6 +92,7 @@ public protocol ManifestLoaderProtocol {
9292
version: Version?,
9393
revision: String?,
9494
toolsVersion: ToolsVersion,
95+
identityResolver: IdentityResolver,
9596
fileSystem: FileSystem,
9697
diagnostics: DiagnosticsEngine?,
9798
on queue: DispatchQueue,
@@ -126,7 +127,6 @@ public final class ManifestLoader: ManifestLoaderProtocol {
126127
private let isManifestSandboxEnabled: Bool
127128
private let delegate: ManifestLoaderDelegate?
128129
private let extraManifestFlags: [String]
129-
private let identityResolver: IdentityResolver
130130

131131
private let databaseCacheDir: AbsolutePath?
132132

@@ -136,7 +136,6 @@ public final class ManifestLoader: ManifestLoaderProtocol {
136136

137137
public init(
138138
manifestResources: ManifestResourceProvider,
139-
identityResolver: IdentityResolver,
140139
serializedDiagnostics: Bool = false,
141140
isManifestSandboxEnabled: Bool = true,
142141
cacheDir: AbsolutePath? = nil,
@@ -148,7 +147,6 @@ public final class ManifestLoader: ManifestLoaderProtocol {
148147
self.isManifestSandboxEnabled = isManifestSandboxEnabled
149148
self.delegate = delegate
150149
self.extraManifestFlags = extraManifestFlags
151-
self.identityResolver = identityResolver
152150

153151
self.databaseCacheDir = cacheDir.map(resolveSymlinks)
154152

@@ -176,7 +174,7 @@ public final class ManifestLoader: ManifestLoaderProtocol {
176174
do {
177175
let fileSystem = localFileSystem
178176
let resources = try UserManifestResources(swiftCompiler: swiftCompiler, swiftCompilerFlags: swiftCompilerFlags)
179-
let loader = ManifestLoader(manifestResources: resources, identityResolver: identityResolver)
177+
let loader = ManifestLoader(manifestResources: resources)
180178
let toolsVersion = try ToolsVersionLoader().load(at: path, fileSystem: fileSystem)
181179
loader.load(
182180
at: path,
@@ -185,6 +183,7 @@ public final class ManifestLoader: ManifestLoaderProtocol {
185183
version: nil,
186184
revision: nil,
187185
toolsVersion: toolsVersion,
186+
identityResolver: identityResolver,
188187
fileSystem: fileSystem,
189188
diagnostics: nil,
190189
on: queue,
@@ -195,39 +194,14 @@ public final class ManifestLoader: ManifestLoaderProtocol {
195194
}
196195
}
197196

198-
// FIXME: deprecated 12/2020, remove once clients migrate
199-
@available(*, deprecated, message: "use non-blocking version instead")
200-
public func load(
201-
packagePath path: AbsolutePath,
202-
baseURL: String,
203-
version: Version?,
204-
revision: String?,
205-
toolsVersion: ToolsVersion,
206-
packageKind: PackageReference.Kind,
207-
fileSystem: FileSystem? = nil,
208-
diagnostics: DiagnosticsEngine? = nil
209-
) throws -> Manifest {
210-
try temp_await{
211-
self.load(at: path,
212-
packageKind: packageKind,
213-
packageLocation: baseURL,
214-
version: version,
215-
revision: revision,
216-
toolsVersion: toolsVersion,
217-
fileSystem: fileSystem ?? localFileSystem,
218-
diagnostics: diagnostics,
219-
on: .global(),
220-
completion: $0)
221-
}
222-
}
223-
224197
public func load(
225198
at path: AbsolutePath,
226199
packageKind: PackageReference.Kind,
227200
packageLocation: String,
228201
version: Version?,
229202
revision: String?,
230203
toolsVersion: ToolsVersion,
204+
identityResolver: IdentityResolver,
231205
fileSystem: FileSystem,
232206
diagnostics: DiagnosticsEngine? = nil,
233207
on queue: DispatchQueue,
@@ -243,6 +217,7 @@ public final class ManifestLoader: ManifestLoaderProtocol {
243217
version: version,
244218
revision: revision,
245219
toolsVersion: toolsVersion,
220+
identityResolver: identityResolver,
246221
fileSystem: fileSystem,
247222
diagnostics: diagnostics,
248223
on: queue) { result in
@@ -272,6 +247,7 @@ public final class ManifestLoader: ManifestLoaderProtocol {
272247
version: Version?,
273248
revision: String?,
274249
toolsVersion: ToolsVersion,
250+
identityResolver: IdentityResolver,
275251
fileSystem: FileSystem,
276252
diagnostics: DiagnosticsEngine? = nil,
277253
on queue: DispatchQueue,
@@ -303,7 +279,7 @@ public final class ManifestLoader: ManifestLoaderProtocol {
303279
let parsedManifest = try ManifestJSONParser.parse(v4: jsonString,
304280
toolsVersion: toolsVersion,
305281
packageLocation: packageLocation,
306-
identityResolver: self.identityResolver,
282+
identityResolver: identityResolver,
307283
fileSystem: fileSystem)
308284
// Throw if we encountered any runtime errors.
309285
guard parsedManifest.errors.isEmpty else {

0 commit comments

Comments
 (0)