Skip to content

[5.8] Add package metadata to a few more ObservabilityScopes in workspace-wide package operations #5986

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Sources/PackageGraph/PackageGraph+Loading.swift
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,7 @@ private func createResolvedPackages(
)

// Create target builders for each target in the package.
let targetBuilders = package.targets.map{ ResolvedTargetBuilder(target: $0, observabilityScope: observabilityScope) }
let targetBuilders = package.targets.map{ ResolvedTargetBuilder(target: $0, observabilityScope: packageObservabilityScope) }
packageBuilder.targets = targetBuilders

// Establish dependencies between the targets. A target can only depend on another target present in the same package.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1315,7 +1315,7 @@ private final class ContainerProvider {
self.underlying.getContainer(
for: package,
skipUpdate: self.skipUpdate,
observabilityScope: self.observabilityScope,
observabilityScope: self.observabilityScope.makeChildScope(description: "getting package container", metadata: package.diagnosticsMetadata),
on: .sharedConcurrent
) { result in
let result = result.tryMap { container -> PubGrubPackageContainer in
Expand Down Expand Up @@ -1344,7 +1344,7 @@ private final class ContainerProvider {
self.underlying.getContainer(
for: identifier,
skipUpdate: self.skipUpdate,
observabilityScope: self.observabilityScope,
observabilityScope: self.observabilityScope.makeChildScope(description: "prefetcing package container", metadata: identifier.diagnosticsMetadata),
on: .sharedConcurrent
) { result in
defer { self.prefetches[identifier]?.leave() }
Expand Down
17 changes: 12 additions & 5 deletions Sources/Workspace/Workspace.swift
Original file line number Diff line number Diff line change
Expand Up @@ -715,6 +715,8 @@ extension Workspace {
observabilityScope.emit(.dependencyNotFound(packageName: packageName))
return
}

let observabilityScope = observabilityScope.makeChildScope(description: "editing package", metadata: dependency.packageRef.diagnosticsMetadata)

try self.unedit(dependency: dependency, forceRemove: forceRemove, root: root, observabilityScope: observabilityScope)
}
Expand Down Expand Up @@ -745,6 +747,8 @@ extension Workspace {
throw StringError("dependency '\(packageName)' was not found")
}

let observabilityScope = observabilityScope.makeChildScope(description: "editing package", metadata: dependency.packageRef.diagnosticsMetadata)

let defaultRequirement: PackageRequirement
switch dependency.state {
case .sourceControlCheckout(let checkoutState):
Expand Down Expand Up @@ -1269,6 +1273,8 @@ extension Workspace {
observabilityScope.emit(.dependencyNotFound(packageName: packageName))
return
}

let observabilityScope = observabilityScope.makeChildScope(description: "editing package", metadata: dependency.packageRef.diagnosticsMetadata)

let checkoutState: CheckoutState
switch dependency.state {
Expand Down Expand Up @@ -1811,7 +1817,7 @@ extension Workspace {
// Remove any managed dependency which has become a root.
for dependency in dependenciesToCheck {
if root.packages.keys.contains(dependency.packageRef.identity) {
observabilityScope.trap {
observabilityScope.makeChildScope(description: "removing managed dependencies", metadata: dependency.packageRef.diagnosticsMetadata).trap {
try self.remove(package: dependency.packageRef)
}
}
Expand Down Expand Up @@ -2060,7 +2066,7 @@ extension Workspace {
// Make a copy of dependencies as we might mutate them in the for loop.
let allDependencies = Array(self.state.dependencies)
for dependency in allDependencies {
observabilityScope.trap {
observabilityScope.makeChildScope(description: "copying managed dependencies", metadata: dependency.packageRef.diagnosticsMetadata).trap {
// If the dependency is present, we're done.
let dependencyPath = self.path(to: dependency)
if fileSystem.isDirectory(dependencyPath) {
Expand Down Expand Up @@ -2287,6 +2293,7 @@ extension Workspace {
let group = DispatchGroup()
for pin in pinsStore.pins {
group.enter()
let observabilityScope = observabilityScope.makeChildScope(description: "requesting package containers", metadata: pin.packageRef.diagnosticsMetadata)
packageContainerProvider.getContainer(for: pin.packageRef, skipUpdate: self.configuration.skipDependenciesUpdates, observabilityScope: observabilityScope, on: .sharedConcurrent, completion: { _ in
group.leave()
})
Expand Down Expand Up @@ -2314,7 +2321,7 @@ extension Workspace {

// Retrieve the required pins.
for pin in requiredPins {
observabilityScope.trap {
observabilityScope.makeChildScope(description: "retrieving dependency pins", metadata: pin.packageRef.diagnosticsMetadata).trap {
switch pin.packageRef.kind {
case .localSourceControl, .remoteSourceControl:
_ = try self.checkoutRepository(package: pin.packageRef, at: pin.state, observabilityScope: observabilityScope)
Expand Down Expand Up @@ -2517,7 +2524,7 @@ extension Workspace {

// First remove the checkouts that are no longer required.
for (packageRef, state) in packageStateChanges {
observabilityScope.trap {
observabilityScope.makeChildScope(description: "removing unneeded checkouts", metadata: packageRef.diagnosticsMetadata).trap {
switch state {
case .added, .updated, .unchanged: break
case .removed:
Expand All @@ -2528,7 +2535,7 @@ extension Workspace {

// Update or clone new packages.
for (packageRef, state) in packageStateChanges {
observabilityScope.trap {
observabilityScope.makeChildScope(description: "updating or cloning new packages", metadata: packageRef.diagnosticsMetadata).trap {
switch state {
case .added(let state):
_ = try self.updateDependency(package: packageRef, requirement: state.requirement, productFilter: state.products, observabilityScope: observabilityScope)
Expand Down
2 changes: 2 additions & 0 deletions Tests/WorkspaceTests/WorkspaceTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4603,11 +4603,13 @@ final class WorkspaceTests: XCTestCase {
diagnostic: .equal("the target 'Baz' in product 'Baz' contains unsafe build flags"),
severity: .error
)
XCTAssertEqual(diagnostic1?.metadata?.packageIdentity, .plain("foo"))
XCTAssertEqual(diagnostic1?.metadata?.targetName, "Foo")
let diagnostic2 = result.checkUnordered(
diagnostic: .equal("the target 'Bar' in product 'Baz' contains unsafe build flags"),
severity: .error
)
XCTAssertEqual(diagnostic2?.metadata?.packageIdentity, .plain("foo"))
XCTAssertEqual(diagnostic2?.metadata?.targetName, "Foo")
}
}
Expand Down