Skip to content

Commit

Permalink
Merge pull request #16 from irgaly/fix_dependency_order
Browse files Browse the repository at this point in the history
Fix dependency sort order, Swift Package dropped randomly
  • Loading branch information
yimajo authored Nov 5, 2023
2 parents 79ddc87 + ee59ca9 commit 5523a14
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 14 deletions.
12 changes: 10 additions & 2 deletions Sources/Converter/ProjectConverter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,17 @@ public struct ProjectConverter {
nativeTarget.packageProductDependencies.forEach { dependency in
switch dependency.type {
case .remote:
accumulators.0.append(dependency)
if !accumulators.0.contains(where: {
$0.name == dependency.name
}) {
accumulators.0.append(dependency)
}
case .local:
accumulators.1.append(dependency)
if !accumulators.1.contains(where: {
$0.name == dependency.name
}) {
accumulators.1.append(dependency)
}
}
}

Expand Down
13 changes: 10 additions & 3 deletions Sources/Formatter/Mermaid/MermaidFormatter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -117,13 +117,19 @@ public struct MermaidFormatter {

let formatNodeEdge = NodeEdgeFormatter()

project.nativeTargets.forEach { native in
result += native.targetDependencies.reduce("") { result, connectedNode in
project.nativeTargets
.sorted( by: { $0.name < $1.name } )
.forEach { native in
result += native.targetDependencies
.sorted(by: { $0.name < $1.name })
.reduce("") { result, connectedNode in
result + formatNodeEdge(node: native.name, connectedNode: connectedNode.name)
}

if swiftPackageOutput {
result += native.packageProductDependencies.reduce("") { result, connectedNode in
result += native.packageProductDependencies
.sorted(by: { $0.name < $1.name })
.reduce("") { result, connectedNode in
result + formatNodeEdge(node: native.name, connectedNode: connectedNode.name)
}
}
Expand All @@ -143,6 +149,7 @@ public struct MermaidFormatter {
return vendorOutput
}
}
.sorted(by: { $0.name < $1.name })
.reduce("") { result, connectedNode in
result + formatNodeEdge(node: native.name, connectedNode: connectedNode.name)
}
Expand Down
4 changes: 3 additions & 1 deletion Sources/Generator/ProjectMaker.swift
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,9 @@ struct ProjectMaker {
$0.packageProductDependencies.map {
if let package = $0.package, let urlString = package.repositoryURL {
return .init(
id: package.uuid,
id: $0.uuid,
name: $0.productName,
packageName: package.name,
type: .remote(
urlString: urlString
)
Expand All @@ -50,6 +51,7 @@ struct ProjectMaker {
return .init(
id: $0.uuid,
name: $0.productName,
packageName: nil,
type: .local
)
}
Expand Down
3 changes: 3 additions & 0 deletions Sources/Value/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -90,15 +90,18 @@ public struct Project {

public var id: String
public let name: String
public let packageName: String?
public let type: DependencyType

public init(
id: String,
name: String,
packageName: String?,
type: DependencyType
) {
self.id = id
self.name = name
self.packageName = packageName
self.type = type
}
}
Expand Down
6 changes: 5 additions & 1 deletion Tests/MermaidFormatterTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,10 @@ final class MermaidFormatterTests: XCTestCase {
.init(
id: "ShareExtension",
name: "ShareExtension",
targetDependencies: [.init(id: "B", name: "Core")],
targetDependencies: [
.init(id: "B", name: "Core"),
.init(id: "C", name: "LibraryC")
],
packageProductDependencies: [],
otherDependencies: []
)
Expand All @@ -43,6 +46,7 @@ final class MermaidFormatterTests: XCTestCase {
end
App --> Core
ShareExtension --> Core
ShareExtension --> LibraryC
```
"""
Expand Down
18 changes: 11 additions & 7 deletions Tests/ProjectConverterTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,20 @@ final class ProjectConverterTests: XCTestCase {

func testReduce() {
let packageProductA = Project.SwiftPackage(
id: "A", name: "A", type: .remote(urlString: "")
id: "A", name: "A", packageName: "A", type: .remote(urlString: "")
)
let packageProductB = Project.SwiftPackage(
id: "B", name: "B", type: .remote(urlString: "")
let packageProductB1 = Project.SwiftPackage(
id: "B1", name: "B1", packageName: "B", type: .remote(urlString: "")
)
let packageProductB2 = Project.SwiftPackage(
id: "B2", name: "B2", packageName: "B", type: .remote(urlString: "")
)

let internalPackageProduct1 = Project.SwiftPackage(
id: "P1", name: "InternalProduct1", type: .local
id: "P1", name: "InternalProduct1", packageName: nil, type: .local
)
let internalPackageProduct2 = Project.SwiftPackage(
id: "P2", name: "InternalProduct2", type: .local
id: "P2", name: "InternalProduct2", packageName: nil, type: .local
)

let appleSDKあ = Project.Framework(
Expand Down Expand Up @@ -64,7 +67,8 @@ final class ProjectConverterTests: XCTestCase {
],
packageProductDependencies: [
packageProductA,
packageProductB,
packageProductB1,
packageProductB2,
internalPackageProduct1,
internalPackageProduct2
],
Expand All @@ -91,7 +95,7 @@ final class ProjectConverterTests: XCTestCase {

XCTAssertEqual(
subject.packageProducts,
[packageProductA, packageProductB]
[packageProductA, packageProductB1, packageProductB2]
)

XCTAssertEqual(
Expand Down

0 comments on commit 5523a14

Please sign in to comment.