Skip to content

Commit dafd9d3

Browse files
committed
Apply mirrors to root dependencies
We weren't applying mirros to root dependencies so far. rdar://110869499
1 parent c708d0d commit dafd9d3

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

Sources/PackageGraph/PackageGraphRoot.swift

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,39 @@ public struct PackageGraphRoot {
4747
}
4848

4949
/// The top level dependencies.
50-
public let dependencies: [PackageDependency]
50+
private let _dependencies: [PackageDependency]
51+
52+
public var dependencies: [PackageDependency] {
53+
guard let mirrors = mirrors else {
54+
return self._dependencies
55+
}
56+
57+
return self._dependencies.map {
58+
switch $0 {
59+
case .fileSystem: return $0
60+
case .registry: return $0
61+
case .sourceControl(let settings):
62+
let mappedLocation: PackageDependency.SourceControl.Location
63+
switch settings.location {
64+
case .local:
65+
mappedLocation = settings.location
66+
case .remote(let url):
67+
let effectiveLocation = mirrors.effective(for: url.absoluteString)
68+
mappedLocation = .remote(SourceControlURL(effectiveLocation))
69+
}
70+
return .sourceControl(identity: settings.identity, nameForTargetDependencyResolutionOnly: settings.nameForTargetDependencyResolutionOnly, location: mappedLocation, requirement: settings.requirement, productFilter: settings.productFilter)
71+
}
72+
}
73+
}
74+
75+
private let mirrors: DependencyMirrors?
5176

5277
/// Create a package graph root.
5378
/// Note this quietly skip inputs for which manifests are not found. this could be because the manifest failed to load or for some other reasons
5479
// FIXME: This API behavior wrt to non-found manifests is fragile, but required by IDEs
5580
// it may lead to incorrect assumption in downstream code which may expect an error if a manifest was not found
5681
// we should refactor this API to more clearly return errors for inputs that do not have a corresponding manifest
57-
public init(input: PackageGraphRootInput, manifests: [AbsolutePath: Manifest], explicitProduct: String? = nil) {
82+
public init(input: PackageGraphRootInput, manifests: [AbsolutePath: Manifest], explicitProduct: String? = nil, mirrors: DependencyMirrors? = nil) {
5883
self.packages = input.packages.reduce(into: .init(), { partial, inputPath in
5984
if let manifest = manifests[inputPath] {
6085
let packagePath = manifest.path.parentDirectory
@@ -77,7 +102,8 @@ public struct PackageGraphRoot {
77102
}
78103
}
79104

80-
self.dependencies = adjustedDependencies
105+
self._dependencies = adjustedDependencies
106+
self.mirrors = mirrors
81107
}
82108

83109
/// Returns the constraints imposed by root manifests + dependencies.

Sources/Workspace/Workspace.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,7 +1051,7 @@ extension Workspace {
10511051
let resolvedFileOriginHash = try self.computeResolvedFileOriginHash(root: root)
10521052

10531053
// Load the current manifests.
1054-
let graphRoot = PackageGraphRoot(input: root, manifests: rootManifests)
1054+
let graphRoot = PackageGraphRoot(input: root, manifests: rootManifests, mirrors: self.mirrors)
10551055
let currentManifests = try self.loadDependencyManifests(root: graphRoot, observabilityScope: observabilityScope)
10561056

10571057
// Abort if we're unable to load the pinsStore or have any diagnostics.
@@ -2582,7 +2582,7 @@ extension Workspace {
25822582

25832583
// FIXME: this should not block
25842584
let rootManifests = try temp_await { self.loadRootManifests(packages: root.packages, observabilityScope: observabilityScope, completion: $0) }
2585-
let graphRoot = PackageGraphRoot(input: root, manifests: rootManifests, explicitProduct: explicitProduct)
2585+
let graphRoot = PackageGraphRoot(input: root, manifests: rootManifests, explicitProduct: explicitProduct, mirrors: self.mirrors)
25862586

25872587
// Load the pins store or abort now.
25882588
guard let pinsStore = observabilityScope.trap({ try self.pinsStore.load() }), !observabilityScope.errorsReported else {
@@ -2697,7 +2697,7 @@ extension Workspace {
26972697
let resolvedFileOriginHash = try self.computeResolvedFileOriginHash(root: root)
26982698

26992699
// Load the current manifests.
2700-
let graphRoot = PackageGraphRoot(input: root, manifests: rootManifests, explicitProduct: explicitProduct)
2700+
let graphRoot = PackageGraphRoot(input: root, manifests: rootManifests, explicitProduct: explicitProduct, mirrors: self.mirrors)
27012701
let currentManifests = try self.loadDependencyManifests(root: graphRoot, observabilityScope: observabilityScope)
27022702
guard !observabilityScope.errorsReported else {
27032703
return currentManifests

0 commit comments

Comments
 (0)