Skip to content

Commit 887c4f0

Browse files
committed
Analysing target resources
1 parent c941f33 commit 887c4f0

File tree

5 files changed

+72
-25
lines changed

5 files changed

+72
-25
lines changed

ReferencePackages/UpdatedPackage/Package.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ let package = Package(
1717
// Targets are the basic building blocks of a package, defining a module or a test suite.
1818
// Targets can depend on other targets in this package and products from dependencies.
1919
.target(
20-
name: "ReferencePackage")
20+
name: "ReferencePackage"
21+
)
2122
]
2223
)

Sources/PublicModules/PADPackageFileAnalyzer/SwiftPackageFileAnalyzer.swift

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -328,15 +328,22 @@ private extension SwiftPackageFileAnalyzer {
328328
) throws -> [Change] {
329329
guard oldTarget != newTarget else { return [] }
330330

331+
// MARK: Target Resources
332+
333+
let oldResourcePaths = Set(oldTarget.resources?.map(\.path) ?? [])
334+
let newResourcePaths = Set(newTarget.resources?.map(\.path) ?? [])
335+
336+
let addedResourcePaths = newResourcePaths.subtracting(oldResourcePaths)
337+
let consistentResourcePaths = oldResourcePaths.intersection(newResourcePaths)
338+
let removedResourcePaths = oldResourcePaths.subtracting(newResourcePaths)
339+
331340
// MARK: Target Dependencies
332341

333342
let oldTargetDependencies = Set(oldTarget.targetDependencies ?? [])
334343
let newTargetDependencies = Set(newTarget.targetDependencies ?? [])
335344

336345
let addedTargetDependencies = newTargetDependencies.subtracting(oldTargetDependencies)
337346
let removedTargetDependencies = oldTargetDependencies.subtracting(newTargetDependencies)
338-
339-
// TODO: Add analyzing of SwiftPackageDescription.Target.Resource
340347

341348
// MARK: Product Dependencies
342349

@@ -346,7 +353,29 @@ private extension SwiftPackageFileAnalyzer {
346353
let addedProductDependencies = newProductDependencies.subtracting(oldProductDependencies)
347354
let removedProductDependencies = oldProductDependencies.subtracting(newProductDependencies)
348355

356+
// MARK: Compiling list of changes
357+
349358
var listOfChanges = [String]()
359+
360+
listOfChanges += addedResourcePaths.compactMap { path in
361+
guard let resource = newTarget.resources?.first(where: { $0.path == path }) else { return nil }
362+
return "Added resource \(resource.description)"
363+
}
364+
365+
listOfChanges += consistentResourcePaths.compactMap { path in
366+
guard
367+
let newResource = newTarget.resources?.first(where: { $0.path == path }),
368+
let oldResource = oldTarget.resources?.first(where: { $0.path == path })
369+
else { return nil }
370+
371+
return "Changed resource from `\(oldResource.description)` to `\(newResource.description)`"
372+
}
373+
374+
listOfChanges += removedResourcePaths.compactMap { path in
375+
guard let resource = oldTarget.resources?.first(where: { $0.path == path }) else { return nil }
376+
return "Removed resource \(resource.description)"
377+
}
378+
350379
listOfChanges += addedTargetDependencies.map { "Added dependency .target(name: \"\($0)\")" }
351380
listOfChanges += addedProductDependencies.map { "Added dependency .product(name: \"\($0)\", ...)" }
352381

Sources/Shared/Package/SwiftPackageFileHelperModule/SwiftPackageDescription.swift

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ package extension SwiftPackageDescription {
179179
package let productDependencies: [String]?
180180
/// `.target(name: ...) dependency
181181
package let targetDependencies: [String]?
182-
// TODO: check this in the SwiftPackageFileAnalyzer
182+
/// The resources used by the Target
183183
package let resources: [Resource]?
184184

185185
// Ignoring following properties for now as they are not handled in the `PackageAnalyzer`
@@ -266,6 +266,23 @@ package extension SwiftPackageDescription.Target {
266266
}
267267
}
268268

269+
extension SwiftPackageDescription.Target.Resource: CustomStringConvertible {
270+
271+
package var description: String {
272+
return switch rule {
273+
case .copy: ".copy(\"\(path)\")"
274+
case .embeddInCode: ".embeddInCode(\"\(path)\")"
275+
case let .process(metadata):
276+
if let localization = metadata["localization"] {
277+
".process(\"\(path)\", localization: \"\(localization)\")"
278+
} else {
279+
".process(\"\(path)\")"
280+
}
281+
}
282+
}
283+
}
284+
285+
269286
package extension SwiftPackageDescription.Target.Resource {
270287

271288
enum Rule: Codable, Equatable {
@@ -319,19 +336,3 @@ package extension SwiftPackageDescription.Target.Resource {
319336
}
320337
}
321338
}
322-
323-
extension SwiftPackageDescription.Target.Resource.Rule: CustomStringConvertible {
324-
325-
package var description: String {
326-
return switch self {
327-
case .copy: "copy"
328-
case .embeddInCode: "embeddInCode"
329-
case let .process(metadata):
330-
if let localization = metadata["localization"] {
331-
"process (localization: \(localization))"
332-
} else {
333-
"process"
334-
}
335-
}
336-
}
337-
}

Sources/Shared/Public/PADCore/Change.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public struct Change: Equatable {
2626
) {
2727
self.changeType = changeType
2828
self.parentPath = parentPath
29-
self.listOfChanges = listOfChanges
29+
self.listOfChanges = listOfChanges.sorted()
3030
}
3131
}
3232

Tests/UnitTests/SwiftPackageFileAnalyzerTests.swift

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,12 @@ class SwiftPackageFileAnalyzerTests: XCTestCase {
8484
path: "some/new/path",
8585
moduleType: .swiftTarget,
8686
productDependencies: ["Some Product Dependency", "New Product Dependency"],
87-
targetDependencies: ["Some Target Dependency", "New Target Dependency"]
87+
targetDependencies: ["Some Target Dependency", "New Target Dependency"],
88+
resources: [
89+
.init(path: "copy-path", rule: .copy),
90+
.init(path: "process-path", rule: .process([:])),
91+
.init(path: "process-localization-path", rule: .process(["localization":"en_US"])),
92+
]
8893
)
8994
],
9095
toolsVersion: "1.0"
@@ -106,7 +111,13 @@ class SwiftPackageFileAnalyzerTests: XCTestCase {
106111
path: "some/old/path",
107112
moduleType: .swiftTarget,
108113
productDependencies: ["Some Product Dependency", "Old Product Dependency"],
109-
targetDependencies: ["Some Target Dependency", "Old Target Dependency"]
114+
targetDependencies: ["Some Target Dependency", "Old Target Dependency"],
115+
resources: [
116+
.init(path: "new-copy-path", rule: .copy),
117+
.init(path: "process-path", rule: .process(["localization":"en_US"])),
118+
.init(path: "process-localization-path", rule: .process([:])),
119+
.init(path: "embedd-in-code-path", rule: .embeddInCode),
120+
]
110121
)
111122
],
112123
toolsVersion: "2.0"
@@ -204,13 +215,18 @@ class SwiftPackageFileAnalyzerTests: XCTestCase {
204215
),
205216
parentPath: ".targets",
206217
listOfChanges: [
218+
"Added resource .copy(\"copy-path\")",
219+
"Changed resource from `.process(\"process-path\", localization: \"en_US\")` to `.process(\"process-path\")`",
220+
"Changed resource from `.process(\"process-localization-path\")` to `.process(\"process-localization-path\", localization: \"en_US\")`",
221+
"Removed resource .copy(\"new-copy-path\")",
222+
"Removed resource .embeddInCode(\"embedd-in-code-path\")",
207223
"Added dependency .target(name: \"New Target Dependency\")",
208224
"Added dependency .product(name: \"New Product Dependency\", ...)",
209225
"Changed path from \"some/old/path\" to \"some/new/path\"",
210226
"Changed type from `.binaryTarget` to `.target`",
211227
"Removed dependency .target(name: \"Old Target Dependency\")",
212228
"Removed dependency .product(name: \"Old Product Dependency\", ...)"
213-
]
229+
].sorted()
214230
),
215231
.init(
216232
changeType: .removal(
@@ -220,7 +236,7 @@ class SwiftPackageFileAnalyzerTests: XCTestCase {
220236
listOfChanges: []
221237
)
222238
]
223-
239+
224240
XCTAssertEqual(changes.changes, expectedChanges)
225241

226242
waitForExpectations(timeout: 1)

0 commit comments

Comments
 (0)