Skip to content

Commit 4dc00a8

Browse files
committed
wip
1 parent 817a355 commit 4dc00a8

22 files changed

+196
-103
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/PackageGraph/PackageGraph+Loading.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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
@@ -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) }

Sources/PackageGraph/PackageGraphRoot.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public struct PackageGraphRoot {
4444

4545
/// Create a package graph root.
4646
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
4748
self.packageRefs = zip(input.packages, manifests).map { (path, manifest) in
4849
let identity = PackageIdentity(url: manifest.packageLocation)
4950
return .root(identity: identity, path: path)

Sources/PackageLoading/ManifestLoader.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ public final class ManifestLoader: ManifestLoaderProtocol {
209209
) {
210210
do {
211211
let manifestPath = try Manifest.path(atPackagePath: path, fileSystem: fileSystem)
212-
let packageIdentity = PackageIdentity(url: packageLocation)
212+
let packageIdentity = identityResolver.resolveIdentity(for: packageLocation)
213213
self.loadFile(at: manifestPath,
214214
packageIdentity: packageIdentity,
215215
packageKind: packageKind,

Sources/PackageModel/Manifest.swift

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -166,30 +166,30 @@ public final class Manifest: ObjectIdentifierProtocol {
166166
public func dependenciesRequired(for productFilter: ProductFilter) -> [PackageDependencyDescription] {
167167
#if ENABLE_TARGET_BASED_DEPENDENCY_RESOLUTION
168168
// If we have already calcualted it, returned the cached value.
169-
if let dependencies = _requiredDependencies[productFilter] {
170-
return dependencies
169+
if let dependencies = self._requiredDependencies[productFilter] {
170+
return self.dependencies
171171
} else {
172-
let targets = targetsRequired(for: productFilter)
173-
let dependencies = dependenciesRequired(for: targets, keepUnused: productFilter == .everything)
174-
_requiredDependencies[productFilter] = dependencies
175-
return dependencies
172+
let targets = self.targetsRequired(for: productFilter)
173+
let dependencies = self.dependenciesRequired(for: targets, keepUnused: productFilter == .everything)
174+
self._requiredDependencies[productFilter] = dependencies
175+
return self.dependencies
176176
}
177177
#else
178178
guard toolsVersion >= .v5_2 && packageKind != .root else {
179-
return dependencies
179+
return self.dependencies
180180
}
181181

182182
var requiredDependencyURLs: Set<PackageIdentity> = []
183183

184-
for target in targetsRequired(for: products) {
184+
for target in self.targetsRequired(for: products) {
185185
for targetDependency in target.dependencies {
186-
if let dependency = packageDependency(referencedBy: targetDependency) {
186+
if let dependency = self.packageDependency(referencedBy: targetDependency) {
187187
requiredDependencyURLs.insert(dependency.identity)
188188
}
189189
}
190190
}
191191

192-
return dependencies.filter { requiredDependencyURLs.contains($0.identity) }
192+
return self.dependencies.filter { requiredDependencyURLs.contains($0.identity) }
193193
#endif
194194
}
195195

Sources/PackageModel/Manifest/PackageDependencyDescription.swift

Lines changed: 9 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -48,44 +48,6 @@ public enum PackageDependencyDescription: Equatable {
4848
}
4949
}
5050

51-
/// An explicit name set by the user, to be used *only* for target dependencies resolution
52-
//public let explicitNameForTargetDependencyResolutionOnly: String?
53-
54-
/// A computed name to be used *only* for target dependencies resolution
55-
//public let nameForTargetDependencyResolutionOnly: String
56-
57-
/// The location of the package dependency.
58-
//public let location: String
59-
60-
/// The dependency requirement.
61-
//public let requirement: Requirement
62-
63-
/// The products requested of the package dependency.
64-
//public let productFilter: ProductFilter
65-
66-
/// Create a package dependency.
67-
/*public init(
68-
name: String? = nil,
69-
location: String,
70-
requirement: Requirement,
71-
productFilter: ProductFilter = .everything
72-
) {
73-
self.explicitNameForTargetDependencyResolutionOnly = name
74-
self.nameForTargetDependencyResolutionOnly = name ?? LegacyPackageIdentity.computeDefaultName(fromURL: location)
75-
self.location = location
76-
self.requirement = requirement
77-
self.productFilter = productFilter
78-
}
79-
80-
/// Returns a new package dependency with the specified products.
81-
public func filtered(by productFilter: ProductFilter) -> PackageDependencyDescription {
82-
PackageDependencyDescription(name: self.explicitNameForTargetDependencyResolutionOnly,
83-
location: self.location,
84-
requirement: self.requirement,
85-
productFilter: productFilter)
86-
}*/
87-
88-
8951
public var identity: PackageIdentity {
9052
switch self {
9153
case .local(let data):
@@ -138,24 +100,19 @@ public enum PackageDependencyDescription: Equatable {
138100
public func filtered(by productFilter: ProductFilter) -> PackageDependencyDescription {
139101
switch self {
140102
case .local(let data):
141-
return .local(
142-
.init(identity: data.identity,
143-
name: data.name,
144-
path: data.path,
145-
productFilter: productFilter)
146-
)
103+
return .local(identity: data.identity,
104+
name: data.name,
105+
path: data.path,
106+
productFilter: productFilter)
147107
case .git(let data):
148-
return .git(
149-
.init(identity: data.identity,
150-
name: data.name,
151-
location: data.location,
152-
requirement: data.requirement,
153-
productFilter: productFilter)
154-
)
108+
return .git(identity: data.identity,
109+
name: data.name,
110+
location: data.location,
111+
requirement: data.requirement,
112+
productFilter: productFilter)
155113
}
156114
}
157115

158-
159116
public static func local(identity: PackageIdentity,
160117
name: String?,
161118
path: AbsolutePath,

Sources/SPMTestSupport/MockDependency.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
See http://swift.org/CONTRIBUTORS.txt for Swift project authors
99
*/
1010

11+
import PackageLoading
1112
import PackageModel
1213
import TSCBasic
1314

@@ -34,19 +35,20 @@ public struct MockDependency {
3435
}
3536

3637
// TODO: refactor this when adding registry support
37-
public func convert(baseURL: AbsolutePath) -> PackageDependencyDescription {
38+
public func convert(baseURL: AbsolutePath, identityResolver: IdentityResolver) -> PackageDependencyDescription {
3839
let path = baseURL.appending(RelativePath(self.path))
39-
let identity = PackageIdentity(url: path.pathString)
40+
let location = identityResolver.resolveLocation(from: path.pathString)
41+
let identity = identityResolver.resolveIdentity(for: location)
4042
if let requirement = self.requirement {
4143
return .git(identity: identity,
4244
name: self.name,
43-
location: path.pathString,
45+
location: location,
4446
requirement: requirement,
4547
productFilter: self.products)
4648
} else {
4749
return .local(identity: identity,
4850
name: self.name,
49-
path: path,
51+
path: location,
5052
productFilter: self.products)
5153
}
5254
}

Sources/SPMTestSupport/MockManifestLoader.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ public final class MockManifestLoader: ManifestLoaderProtocol {
6262
completion: @escaping (Result<Manifest, Error>) -> Void
6363
) {
6464
queue.async {
65-
//let location = identityResolver.resolveLocation(from: packageLocation)
6665
let key = Key(url: packageLocation, version: version)
6766
if let result = self.manifests[key] {
6867
return completion(.success(result))

Sources/SPMTestSupport/MockWorkspace.swift

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@ public final class MockWorkspace {
2626
let roots: [MockPackage]
2727
let packages: [MockPackage]
2828
public let config: Workspace.Configuration
29+
let identityResolver: IdentityResolver
2930
public var manifestLoader: MockManifestLoader
3031
public var repoProvider: InMemoryGitRepositoryProvider
3132
public let delegate = MockWorkspaceDelegate()
3233
let toolsVersion: ToolsVersion
3334
let skipUpdate: Bool
3435
let enablePubGrub: Bool
3536

37+
3638
public init(
3739
sandbox: AbsolutePath,
3840
fs: FileSystem,
@@ -51,6 +53,7 @@ public final class MockWorkspace {
5153
self.archiver = archiver
5254
self.checksumAlgorithm = checksumAlgorithm
5355
self.config = try Workspace.Configuration(path: sandbox.appending(component: "swiftpm"), fs: fs)
56+
self.identityResolver = DefaultIdentityResolver(locationMapper: self.config.mirrors.effectiveURL(forURL:))
5457
self.roots = roots
5558
self.packages = packages
5659

@@ -126,7 +129,7 @@ public final class MockWorkspace {
126129
platforms: package.platforms,
127130
version: v,
128131
toolsVersion: toolsVersion,
129-
dependencies: package.dependencies.map { $0.convert(baseURL: packagesDir) },
132+
dependencies: package.dependencies.map { $0.convert(baseURL: packagesDir, identityResolver: self.identityResolver) },
130133
products: package.products.map { ProductDescription(name: $0.name, type: .library(.automatic), targets: $0.targets) },
131134
targets: try package.targets.map { try $0.convert() }
132135
)
@@ -167,6 +170,7 @@ public final class MockWorkspace {
167170
config: self.config,
168171
fileSystem: self.fs,
169172
repositoryProvider: self.repoProvider,
173+
identityResolver: self.identityResolver,
170174
downloader: self.downloader,
171175
archiver: self.archiver,
172176
checksumAlgorithm: self.checksumAlgorithm,
@@ -252,7 +256,7 @@ public final class MockWorkspace {
252256
packages: [String] = [],
253257
_ result: (DiagnosticsEngine) -> Void
254258
) {
255-
let dependencies = deps.map { $0.convert(baseURL: packagesDir) }
259+
let dependencies = deps.map { $0.convert(baseURL: packagesDir, identityResolver: self.identityResolver) }
256260
let diagnostics = DiagnosticsEngine()
257261
let workspace = self.createWorkspace()
258262
let rootInput = PackageGraphRootInput(
@@ -269,7 +273,7 @@ public final class MockWorkspace {
269273
deps: [MockDependency] = [],
270274
_ result: ([(PackageReference, Workspace.PackageStateChange)]?, DiagnosticsEngine) -> Void
271275
) {
272-
let dependencies = deps.map { $0.convert(baseURL: packagesDir) }
276+
let dependencies = deps.map { $0.convert(baseURL: packagesDir, identityResolver: self.identityResolver) }
273277
let diagnostics = DiagnosticsEngine()
274278
let workspace = self.createWorkspace()
275279
let rootInput = PackageGraphRootInput(
@@ -286,7 +290,7 @@ public final class MockWorkspace {
286290
deps: [MockDependency],
287291
_ result: (PackageGraph, DiagnosticsEngine) -> Void
288292
) {
289-
let dependencies = deps.map { $0.convert(baseURL: packagesDir) }
293+
let dependencies = deps.map { $0.convert(baseURL: packagesDir, identityResolver: self.identityResolver) }
290294
self.checkPackageGraph(roots: roots, dependencies: dependencies, result)
291295
}
292296

@@ -468,7 +472,7 @@ public final class MockWorkspace {
468472
deps: [MockDependency] = [],
469473
_ result: (Workspace.DependencyManifests, DiagnosticsEngine) -> Void
470474
) throws {
471-
let dependencies = deps.map { $0.convert(baseURL: packagesDir) }
475+
let dependencies = deps.map { $0.convert(baseURL: packagesDir, identityResolver: self.identityResolver) }
472476
let diagnostics = DiagnosticsEngine()
473477
let workspace = self.createWorkspace()
474478
let rootInput = PackageGraphRootInput(

Sources/SourceControl/RepositoryManager.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ public class RepositoryManager {
293293
let repositoryPath = self.path.appending(handle.subpath)
294294
// Change the state to pending.
295295
handle.status = .pending
296-
// Make sure desination is free.
296+
// Make sure destination is free.
297297
try? self.fileSystem.removeFileTree(repositoryPath)
298298

299299
// Inform delegate.
@@ -353,7 +353,7 @@ public class RepositoryManager {
353353
/// - update: Update a repository that is already cached or alternatively fetch the repository into the cache.
354354
/// - Throws:
355355
/// - Returns: Details about the performed fetch.
356-
@discardableResult
356+
@discardableResult
357357
func fetchAndPopulateCache(handle: RepositoryHandle, repositoryPath: AbsolutePath) throws -> FetchDetails {
358358
var updatedCache = false
359359
var fromCache = false

0 commit comments

Comments
 (0)