Skip to content

Commit 73d3fe9

Browse files
authored
Revert "Revert "identity improvements (#3323)" (#3342)"
This reverts commit ec24ca3.
1 parent ec24ca3 commit 73d3fe9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+662
-400
lines changed

Examples/package-info/Sources/package-info/main.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ let packagePath = localFileSystem.currentWorkingDirectory!
3232
// Each takes longer to load than the level above it, but provides more detail.
3333
let diagnostics = DiagnosticsEngine()
3434
let identityResolver = DefaultIdentityResolver()
35-
let manifest = try tsc_await { ManifestLoader.loadManifest(at: packagePath, kind: .local, swiftCompiler: swiftCompiler, swiftCompilerFlags: [], identityResolver: identityResolver, on: .global(), completion: $0) }
36-
let loadedPackage = try tsc_await { PackageBuilder.loadPackage(at: packagePath, swiftCompiler: swiftCompiler, swiftCompilerFlags: [], identityResolver: identityResolver, diagnostics: diagnostics, on: .global(), completion: $0) }
37-
let graph = try Workspace.loadGraph(packagePath: packagePath, swiftCompiler: swiftCompiler, swiftCompilerFlags: [], identityResolver: identityResolver, diagnostics: diagnostics)
35+
let manifest = try tsc_await { ManifestLoader.loadRootManifest(at: packagePath, swiftCompiler: swiftCompiler, swiftCompilerFlags: [], identityResolver: identityResolver, on: .global(), completion: $0) }
36+
let loadedPackage = try tsc_await { PackageBuilder.loadRootPackage(at: packagePath, swiftCompiler: swiftCompiler, swiftCompilerFlags: [], identityResolver: identityResolver, diagnostics: diagnostics, on: .global(), completion: $0) }
37+
let graph = try Workspace.loadRootGraph(at: packagePath, swiftCompiler: swiftCompiler, swiftCompilerFlags: [], identityResolver: identityResolver, diagnostics: diagnostics)
3838

3939
// EXAMPLES
4040
// ========

Sources/Build/BuildOperationBuildSystemDelegateHandler.swift

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -215,13 +215,8 @@ public struct BuildDescription: Codable {
215215
self.testDiscoveryCommands = testDiscoveryCommands
216216
self.copyCommands = copyCommands
217217

218-
self.builtTestProducts = try plan.buildProducts.filter{ $0.product.type == .test }.map { desc in
219-
// FIXME(perf): Provide faster lookups.
220-
guard let package = (plan.graph.packages.first{ $0.products.contains(desc.product) }) else {
221-
throw InternalError("package with product \(desc.product) not found")
222-
}
218+
self.builtTestProducts = plan.buildProducts.filter{ $0.product.type == .test }.map { desc in
223219
return BuiltTestProduct(
224-
packageName: package.name,
225220
productName: desc.product.name,
226221
binaryPath: desc.binary
227222
)

Sources/Commands/Describe.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ fileprivate struct DescribedPackage: Encodable {
5555
let swiftLanguagesVersions: [String]?
5656

5757
init(from package: Package) {
58-
self.name = package.name
58+
self.name = package.manifestName // TODO: rename property to manifestName?
5959
self.path = package.path.pathString
6060
self.toolsVersion = "\(package.manifest.toolsVersion.major).\(package.manifest.toolsVersion.minor)"
6161
+ (package.manifest.toolsVersion.patch == 0 ? "" : ".\(package.manifest.toolsVersion.patch)")

Sources/Commands/SwiftPackageTool.swift

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -170,13 +170,16 @@ extension SwiftPackageTool {
170170
let workspace = try swiftTool.getActiveWorkspace()
171171
let root = try swiftTool.getWorkspaceRoot()
172172

173-
let manifests = try temp_await {
173+
let rootManifests = try temp_await {
174174
workspace.loadRootManifests(packages: root.packages, diagnostics: swiftTool.diagnostics, completion: $0)
175175
}
176-
guard let manifest = manifests.first else { return }
176+
guard let rootManifest = rootManifests.first else {
177+
throw StringError("invalid manifests at \(root.packages)")
178+
}
177179

178180
let builder = PackageBuilder(
179-
manifest: manifest,
181+
identity: .root(name: rootManifest.name),
182+
manifest: rootManifest,
180183
productFilter: .everything,
181184
path: try swiftTool.getPackageRoot(),
182185
xcTestMinimumDeploymentTargets: MinimumDeploymentTarget.default.xcTestMinimumDeploymentTargets,
@@ -237,12 +240,16 @@ extension SwiftPackageTool {
237240
// Get the root package.
238241
let workspace = try swiftTool.getActiveWorkspace()
239242
let root = try swiftTool.getWorkspaceRoot()
240-
let manifest = try temp_await {
243+
let rootManifests = try temp_await {
241244
workspace.loadRootManifests(packages: root.packages, diagnostics: swiftTool.diagnostics, completion: $0)
242-
}[0]
245+
}
246+
guard let rootManifest = rootManifests.first else {
247+
throw StringError("invalid manifests at \(root.packages)")
248+
}
243249

244250
let builder = PackageBuilder(
245-
manifest: manifest,
251+
identity: .root(name: rootManifest.name),
252+
manifest: rootManifest,
246253
productFilter: .everything,
247254
path: try swiftTool.getPackageRoot(),
248255
xcTestMinimumDeploymentTargets: [:], // Minimum deployment target does not matter for this operation.
@@ -366,15 +373,17 @@ extension SwiftPackageTool {
366373
let workspace = try swiftTool.getActiveWorkspace()
367374
let root = try swiftTool.getWorkspaceRoot()
368375

369-
let manifests = try temp_await {
376+
let rootManifests = try temp_await {
370377
workspace.loadRootManifests(packages: root.packages, diagnostics: swiftTool.diagnostics, completion: $0)
371378
}
372-
guard let manifest = manifests.first else { return }
379+
guard let rootManifest = rootManifests.first else {
380+
throw StringError("invalid manifests at \(root.packages)")
381+
}
373382

374383
let encoder = JSONEncoder.makeWithDefaults()
375384
encoder.userInfo[Manifest.dumpPackageKey] = true
376385

377-
let jsonData = try encoder.encode(manifest)
386+
let jsonData = try encoder.encode(rootManifest)
378387
let jsonString = String(data: jsonData, encoding: .utf8)!
379388
print(jsonString)
380389
}
@@ -582,7 +591,7 @@ extension SwiftPackageTool {
582591
destination = output
583592
} else {
584593
let graph = try swiftTool.loadPackageGraph()
585-
let packageName = graph.rootPackages[0].name
594+
let packageName = graph.rootPackages[0].manifestName // TODO: use identity instead?
586595
destination = packageRoot.appending(component: "\(packageName).zip")
587596
}
588597

@@ -657,10 +666,10 @@ extension SwiftPackageTool {
657666
dstdir = outpath.parentDirectory
658667
case let outpath?:
659668
dstdir = outpath
660-
projectName = graph.rootPackages[0].name
669+
projectName = graph.rootPackages[0].manifestName // TODO: use identity instead?
661670
case _:
662671
dstdir = try swiftTool.getPackageRoot()
663-
projectName = graph.rootPackages[0].name
672+
projectName = graph.rootPackages[0].manifestName // TODO: use identity instead?
664673
}
665674
let xcodeprojPath = Xcodeproj.buildXcodeprojPath(outputDir: dstdir, projectName: projectName)
666675

Sources/Commands/SwiftTestTool.swift

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,12 @@ public struct SwiftTestTool: SwiftCommand {
224224
case .codeCovPath:
225225
let workspace = try swiftTool.getActiveWorkspace()
226226
let root = try swiftTool.getWorkspaceRoot()
227-
let rootManifest = try temp_await {
227+
let rootManifests = try temp_await {
228228
workspace.loadRootManifests(packages: root.packages, diagnostics: swiftTool.diagnostics, completion: $0)
229-
}[0]
229+
}
230+
guard let rootManifest = rootManifests.first else {
231+
throw StringError("invalid manifests at \(root.packages)")
232+
}
230233
let buildParameters = try swiftTool.buildParametersForTest()
231234
print(codeCovAsJSONPath(buildParameters: buildParameters, packageName: rootManifest.name))
232235

@@ -352,6 +355,15 @@ public struct SwiftTestTool: SwiftCommand {
352355

353356
/// Processes the code coverage data and emits a json.
354357
private func processCodeCoverage(_ testProducts: [BuiltTestProduct], swiftTool: SwiftTool) throws {
358+
let workspace = try swiftTool.getActiveWorkspace()
359+
let root = try swiftTool.getWorkspaceRoot()
360+
let rootManifests = try temp_await {
361+
workspace.loadRootManifests(packages: root.packages, diagnostics: swiftTool.diagnostics, completion: $0)
362+
}
363+
guard let rootManifest = rootManifests.first else {
364+
throw StringError("invalid manifests at \(root.packages)")
365+
}
366+
355367
// Merge all the profraw files to produce a single profdata file.
356368
try mergeCodeCovRawDataFiles(swiftTool: swiftTool)
357369

@@ -360,7 +372,7 @@ public struct SwiftTestTool: SwiftCommand {
360372
// Export the codecov data as JSON.
361373
let jsonPath = codeCovAsJSONPath(
362374
buildParameters: buildParameters,
363-
packageName: product.packageName)
375+
packageName: rootManifest.name)
364376
try exportCodeCovAsJSON(to: jsonPath, testBinary: product.binaryPath, swiftTool: swiftTool)
365377
}
366378
}

Sources/Commands/show-dependencies.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ private final class PlainTextDumper: DependenciesDumper {
4444

4545
let pkgVersion = package.manifest.version?.description ?? "unspecified"
4646

47-
stream <<< "\(hanger)\(package.name)<\(package.manifest.packageLocation)@\(pkgVersion)>\n"
47+
stream <<< "\(hanger)\(package.identity.description)<\(package.manifest.packageLocation)@\(pkgVersion)>\n"
4848

4949
if !package.dependencies.isEmpty {
5050
let replacement = (index == packages.count - 1) ? " " : ""
@@ -69,7 +69,7 @@ private final class FlatListDumper: DependenciesDumper {
6969
func dump(dependenciesOf rootpkg: ResolvedPackage, on stream: OutputByteStream) {
7070
func recursiveWalk(packages: [ResolvedPackage]) {
7171
for package in packages {
72-
stream <<< package.name <<< "\n"
72+
stream <<< package.identity.description <<< "\n"
7373
if !package.dependencies.isEmpty {
7474
recursiveWalk(packages: package.dependencies)
7575
}
@@ -88,7 +88,7 @@ private final class DotDumper: DependenciesDumper {
8888
let url = package.manifest.packageLocation
8989
if nodesAlreadyPrinted.contains(url) { return }
9090
let pkgVersion = package.manifest.version?.description ?? "unspecified"
91-
stream <<< #""\#(url)" [label="\#(package.name)\n\#(url)\n\#(pkgVersion)"]"# <<< "\n"
91+
stream <<< #""\#(url)" [label="\#(package.identity.description)\n\#(url)\n\#(pkgVersion)"]"# <<< "\n"
9292
nodesAlreadyPrinted.insert(url)
9393
}
9494

@@ -130,7 +130,7 @@ private final class JSONDumper: DependenciesDumper {
130130
func dump(dependenciesOf rootpkg: ResolvedPackage, on stream: OutputByteStream) {
131131
func convert(_ package: ResolvedPackage) -> JSON {
132132
return .orderedDictionary([
133-
"name": .string(package.name),
133+
"name": .string(package.manifestName), // TODO: remove? add identity?
134134
"url": .string(package.manifest.packageLocation),
135135
"version": .string(package.manifest.version?.description ?? "unspecified"),
136136
"path": .string(package.path.pathString),

Sources/PackageGraph/GraphLoadingNode.swift

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,17 @@ import TSCUtility
2020
/// - SeeAlso: DependencyResolutionNode
2121
public struct GraphLoadingNode: Equatable, Hashable {
2222

23+
/// The package identity.
24+
public let identity: PackageIdentity
25+
2326
/// The package manifest.
2427
public let manifest: Manifest
2528

2629
/// The product filter applied to the package.
2730
public let productFilter: ProductFilter
2831

29-
public init(manifest: Manifest, productFilter: ProductFilter) {
32+
public init(identity: PackageIdentity, manifest: Manifest, productFilter: ProductFilter) {
33+
self.identity = identity
3034
self.manifest = manifest
3135
self.productFilter = productFilter
3236
}
@@ -41,9 +45,9 @@ extension GraphLoadingNode: CustomStringConvertible {
4145
public var description: String {
4246
switch productFilter {
4347
case .everything:
44-
return manifest.name
48+
return self.manifest.name
4549
case .specific(let set):
46-
return "\(manifest.name)[\(set.sorted().joined(separator: ", "))]"
50+
return "\(self.manifest.name)[\(set.sorted().joined(separator: ", "))]"
4751
}
4852
}
4953
}

Sources/PackageGraph/LocalPackageContainer.swift

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,22 +39,23 @@ public final class LocalPackageContainer: PackageContainer {
3939
private func loadManifest() throws -> Manifest {
4040
try manifest.memoize() {
4141
// Load the tools version.
42-
let toolsVersion = try toolsVersionLoader.load(at: AbsolutePath(package.location), fileSystem: fileSystem)
42+
let toolsVersion = try self.toolsVersionLoader.load(at: AbsolutePath(self.package.location), fileSystem: self.fileSystem)
4343

4444
// Validate the tools version.
45-
try toolsVersion.validateToolsVersion(self.currentToolsVersion, packagePath: package.location)
45+
try toolsVersion.validateToolsVersion(self.currentToolsVersion, packagePath: self.package.location)
4646

4747
// Load the manifest.
4848
// FIXME: this should not block
4949
return try temp_await {
50-
manifestLoader.load(at: AbsolutePath(package.location),
51-
packageKind: package.kind,
52-
packageLocation: package.location,
50+
manifestLoader.load(at: AbsolutePath(self.package.location),
51+
packageIdentity: self.package.identity,
52+
packageKind: self.package.kind,
53+
packageLocation: self.package.location,
5354
version: nil,
5455
revision: nil,
5556
toolsVersion: toolsVersion,
56-
identityResolver: identityResolver,
57-
fileSystem: fileSystem,
57+
identityResolver: self.identityResolver,
58+
fileSystem: self.fileSystem,
5859
diagnostics: nil,
5960
on: .global(),
6061
completion: $0)

0 commit comments

Comments
 (0)