Skip to content

Commit ad5a33c

Browse files
committed
mirror -> identity provider
1 parent 0813cbc commit ad5a33c

35 files changed

+300
-251
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// swift-tools-version:5.3
2+
3+
import PackageDescription
4+
5+
let package = Package(
6+
name: "App",
7+
dependencies: [
8+
.package(name: "Foo", url: "../Foo", .branch("main")),
9+
.package(name: "Bar", url: "../Bar", .branch("main")),
10+
],
11+
targets: [
12+
.target(name: "App", dependencies: [
13+
.product(name: "Foo", package: "Foo"),
14+
.product(name: "Bar", package: "Bar"),
15+
], path: "./")
16+
]
17+
)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import Foo
2+
import Bar
3+
4+
public func main() {
5+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
public func hello() {
2+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// swift-tools-version:4.2
2+
import PackageDescription
3+
4+
let package = Package(
5+
name: "Bar",
6+
products: [
7+
.library(name: "Bar", targets: ["Bar"]),
8+
],
9+
targets: [
10+
.target(name: "Bar", path: "./"),
11+
]
12+
)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
public func hello() {
2+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// swift-tools-version:4.2
2+
import PackageDescription
3+
4+
let package = Package(
5+
name: "Bar",
6+
products: [
7+
.library(name: "Bar", targets: ["Bar"]),
8+
],
9+
targets: [
10+
.target(name: "Bar", path: "./"),
11+
]
12+
)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
public func hello() {
2+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// swift-tools-version:4.2
2+
import PackageDescription
3+
4+
let package = Package(
5+
name: "Foo",
6+
products: [
7+
.library(name: "Foo", targets: ["Foo"]),
8+
],
9+
targets: [
10+
.target(name: "Foo", path: "./"),
11+
]
12+
)

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: 7 additions & 8 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> = [],
@@ -39,7 +39,7 @@ extension PackageGraph {
3939
// the URL but that shouldn't be needed after <rdar://problem/33693433>
4040
// Ensure that identity and package name are the same once we have an
4141
// API to specify identity in the manifest file
42-
let manifestMapSequence = (root.manifests + externalManifests).map({ (PackageIdentity(url: $0.packageLocation), $0) })
42+
let manifestMapSequence = (root.manifests + externalManifests).map({ (identityResolver.resolveIdentity(for: $0.packageLocation), $0) })
4343
let manifestMap = Dictionary(uniqueKeysWithValues: manifestMapSequence)
4444
let successors: (GraphLoadingNode) -> [GraphLoadingNode] = { node in
4545
node.requiredDependencies().compactMap{ dependency in
@@ -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>,
@@ -210,7 +210,7 @@ private func createResolvedPackages(
210210

211211
// Create a map of package builders keyed by the package identity.
212212
let packageMapByIdentity: [PackageIdentity: ResolvedPackageBuilder] = packageBuilders.spm_createDictionary{
213-
let identity = PackageIdentity(url: $0.package.manifest.packageLocation)
213+
let identity = identityResolver.resolveIdentity(for: $0.package.manifest.packageLocation)
214214
return (identity, $0)
215215
}
216216
let packageMapByName: [String: ResolvedPackageBuilder] = packageBuilders.spm_createDictionary{ ($0.package.name, $0) }
@@ -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: 4 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

@@ -47,6 +44,7 @@ public struct PackageGraphRoot {
4744

4845
/// Create a package graph root.
4946
public init(input: PackageGraphRootInput, manifests: [Manifest], explicitProduct: String? = nil) {
47+
// TODO: this does not use the identity resolver which is probably fine since its the root packages
5048
self.packageRefs = zip(input.packages, manifests).map { (path, manifest) in
5149
let identity = PackageIdentity(url: manifest.packageLocation)
5250
return .root(identity: identity, path: path)
@@ -71,13 +69,13 @@ public struct PackageGraphRoot {
7169
}
7270

7371
/// Returns the constraints imposed by root manifests + dependencies.
74-
public func constraints(mirrors: DependencyMirrors) -> [PackageContainerConstraint] {
72+
public func constraints() -> [PackageContainerConstraint] {
7573
let constraints = packageRefs.map{
7674
PackageContainerConstraint(package: $0, requirement: .unversioned, products: .everything)
7775
}
7876
return constraints + dependencies.map{
7977
PackageContainerConstraint(
80-
package: $0.createPackageRef(mirrors: mirrors),
78+
package: $0.createPackageRef(),
8179
requirement: $0.toConstraintRequirement(),
8280
products: $0.productFilter
8381
)

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
}

0 commit comments

Comments
 (0)