Skip to content

Commit 1a6a370

Browse files
authored
[SR-14782] swift package describe is omitting product dependencies from per-target output (#3556)
While `swift package describe` had an entry for `target_dependencies` in the output of each target, it omitted `product_dependencies`. rdar://79358923
1 parent 7e0f5e6 commit 1a6a370

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

Sources/Commands/Describe.swift

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ fileprivate struct DescribedPackage: Encodable {
155155
let sources: [String]
156156
let resources: [PackageModel.Resource]?
157157
let targetDependencies: [String]?
158+
let productDependencies: [String]?
158159
let productMemberships: [String]?
159160

160161
init(from target: Target, in package: Package, productMemberships: [String]?) {
@@ -166,7 +167,10 @@ fileprivate struct DescribedPackage: Encodable {
166167
self.path = target.sources.root.relative(to: package.path).pathString
167168
self.sources = target.sources.relativePaths.map{ $0.pathString }
168169
self.resources = target.resources.isEmpty ? nil : target.resources
169-
self.targetDependencies = target.dependencies.isEmpty ? nil : target.dependencies.compactMap{ $0.target?.name }
170+
let targetDependencies = target.dependencies.compactMap{ $0.target }
171+
self.targetDependencies = targetDependencies.isEmpty ? nil : targetDependencies.map{ $0.name }
172+
let productDependencies = target.dependencies.compactMap{ $0.product }
173+
self.productDependencies = productDependencies.isEmpty ? nil : productDependencies.map{ $0.name }
170174
self.productMemberships = productMemberships
171175
}
172176
}

Tests/CommandsTests/PackageToolTests.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,21 @@ final class PackageToolTests: XCTestCase {
254254
XCTAssert(textChunk6.contains("Path: Sources/CExec"), textChunk6)
255255
XCTAssert(textChunk6.contains("Sources:\n main.c"), textChunk6)
256256
}
257+
258+
fixture(name: "DependencyResolution/External/Simple/Bar") { prefix in
259+
// Generate the JSON description.
260+
let jsonResult = try SwiftPMProduct.SwiftPackage.executeProcess(["describe", "--type=json"], packagePath: prefix)
261+
let jsonOutput = try jsonResult.utf8Output()
262+
let json = try JSON(bytes: ByteString(encodingAsUTF8: jsonOutput))
263+
264+
// Check that product dependencies and memberships are as expected.
265+
XCTAssertEqual(json["name"]?.string, "Bar")
266+
let jsonTarget = try XCTUnwrap(json["targets"]?.array?[0])
267+
XCTAssertEqual(jsonTarget["product_memberships"]?.array?[0].stringValue, "Bar")
268+
XCTAssertEqual(jsonTarget["product_dependencies"]?.array?[0].stringValue, "Foo")
269+
XCTAssertNil(jsonTarget["target_dependencies"])
270+
}
271+
257272
}
258273

259274
func testDescribePackageUsingPlugins() throws {

0 commit comments

Comments
 (0)