Skip to content

Commit 9059a6f

Browse files
author
Emanuel Cunha
committed
Adds Branch Support + Tests
1 parent 35f8ee8 commit 9059a6f

File tree

10 files changed

+174
-2
lines changed

10 files changed

+174
-2
lines changed

Example/Config/RemoteDependencies.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414
"name": "RemoteDependencyC",
1515
"url": "https://github.com/DependencyC",
1616
"revision": "abcde1235kjh"
17+
},
18+
{
19+
"name": "RemoteDependencyD",
20+
"url": "https://github.com/DependencyC",
21+
"branch": "master"
1722
}
1823
]
1924
}

Sources/Core/SpecGenerator.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ final class SpecGenerator {
4646
return RemoteDependency(name: dependency.name,
4747
url: remoteDependency.url ?? dependency.url,
4848
version: remoteDependency.version ?? dependency.version,
49-
revision: remoteDependency.revision ?? dependency.revision)
49+
revision: remoteDependency.revision ?? dependency.revision,
50+
branch: remoteDependency.branch ?? dependency.branch)
5051
}
5152

5253
return Spec(name: partialSpec.name,

Sources/Models/Dependencies.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,17 @@ struct Dependency: Decodable {
1111
let url: String
1212
let version: String?
1313
let revision: String?
14+
let branch: String?
15+
16+
init(name: String, url: String, version: String?, revision: String?, branch: String?) {
17+
guard version != nil || revision != nil || branch != nil else {
18+
fatalError("You need to provide at least one of the following: version, revision or branch")
19+
}
20+
21+
self.name = name
22+
self.url = url
23+
self.version = version
24+
self.revision = revision
25+
self.branch = branch
26+
}
1427
}

Sources/Models/Spec.swift

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,14 @@ struct RemoteDependency: Decodable {
8484
let url: String?
8585
let version: String?
8686
let revision: String?
87+
let branch: String?
8788

8889
enum CodingKeys: CodingKey {
8990
case name
9091
case url
9192
case version
9293
case revision
94+
case branch
9395
}
9496

9597
init(from decoder: Decoder) throws {
@@ -98,13 +100,19 @@ struct RemoteDependency: Decodable {
98100
self.url = try container.decodeIfPresent(String.self, forKey: .url)
99101
self.version = try container.decodeIfPresent(String.self, forKey: .version)
100102
self.revision = try container.decodeIfPresent(String.self, forKey: .revision)
103+
self.branch = try container.decodeIfPresent(String.self, forKey: .branch)
101104
}
102105

103-
init(name: String, url: String, version: String?, revision: String?) {
106+
init(name: String, url: String, version: String?, revision: String?, branch: String?) {
107+
guard version != nil || revision != nil || branch != nil else {
108+
fatalError("You need to provide at least one of the following: version, revision or branch")
109+
}
110+
104111
self.name = name
105112
self.url = url
106113
self.version = version
107114
self.revision = revision
115+
self.branch = branch
108116
}
109117
}
110118

Templates/Package.stencil

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ let package = Package(
9999
exact: "{{ remote_dependency.version }}"
100100
{% elif remote_dependency.revision %}
101101
revision: "{{ remote_dependency.revision }}"
102+
{% elif remote_dependency.branch %}
103+
branch: "{{ remote_dependency.branch }}"
102104
{% endif %}
103105
),
104106
{% endfor %}

Tests/PackageGeneratorTests.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ final class PackageGeneratorTests: XCTestCase {
77

88
enum PackageType: String {
99
case revisionProduct = "RevisionProduct"
10+
case branchProduct = "BranchProduct"
1011
case singleProduct = "SingleProduct"
1112
case multipleProducts = "MultipleProducts"
1213
case customPlatforms = "CustomPlatforms"
@@ -32,6 +33,10 @@ final class PackageGeneratorTests: XCTestCase {
3233
try assertPackage(for: .revisionProduct)
3334
}
3435

36+
func test_BranchProduct() throws {
37+
try assertPackage(for: .branchProduct)
38+
}
39+
3540
func test_MultipleProducts() throws {
3641
try assertPackage(for: .multipleProducts)
3742
}

Tests/Resources/Package.stencil

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ let package = Package(
9999
exact: "{{ remote_dependency.version }}"
100100
{% elif remote_dependency.revision %}
101101
revision: "{{ remote_dependency.revision }}"
102+
{% elif remote_dependency.branch %}
103+
branch: "{{ remote_dependency.branch }}"
102104
{% endif %}
103105
),
104106
{% endfor %}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
{
2+
"name": "BranchProduct",
3+
"products": [
4+
{
5+
"name": "BranchProduct",
6+
"productType": "library",
7+
"targets": [
8+
"TargetA"
9+
]
10+
}
11+
],
12+
"localDependencies": [
13+
{
14+
"name": "LocalDependencyA",
15+
"path": "../LocalDependencies"
16+
}
17+
],
18+
"remoteDependencies": [
19+
{
20+
"name": "RemoteDependencyA"
21+
},
22+
{
23+
"name": "RemoteDependencyB"
24+
},
25+
{
26+
"name": "RemoteDependencyD"
27+
}
28+
],
29+
"targets": [
30+
{
31+
"name": "TargetA",
32+
"targetType": "target",
33+
"dependencies": [
34+
{
35+
"name": "LocalDependencyA"
36+
},
37+
{
38+
"name": "RemoteDependencyA"
39+
},
40+
{
41+
"name": "RemoteDependencyB"
42+
},
43+
{
44+
"name": "RemoteDependencyD"
45+
}
46+
],
47+
"sourcesPath": "Framework/Sources",
48+
"resourcesPath": "Resources"
49+
},
50+
{
51+
"name": "TargetATests",
52+
"targetType": "testTarget",
53+
"dependencies": [
54+
{
55+
"name": "TargetA",
56+
"isTarget": true
57+
},
58+
{
59+
"name": "RemoteDependencyB"
60+
}
61+
],
62+
"sourcesPath": "Tests/Sources",
63+
"resourcesPath": "Resources"
64+
}
65+
]
66+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// swift-tools-version: 5.7
2+
3+
// This file was automatically generated by PackageGenerator and untracked
4+
// PLEASE DO NOT EDIT MANUALLY
5+
6+
import PackageDescription
7+
8+
let package = Package(
9+
name: "BranchProduct",
10+
defaultLocalization: "en",
11+
platforms: [.iOS(.v15)],
12+
products: [
13+
.library(
14+
name: "BranchProduct",
15+
targets: ["TargetA"]
16+
),
17+
],
18+
dependencies: [
19+
.package(
20+
path: "../LocalDependencies"
21+
),
22+
.package(
23+
url: "https://github.com/DependencyA",
24+
exact: "1.0.0"
25+
),
26+
.package(
27+
url: "https://github.com/DependencyB",
28+
exact: "2.0.0"
29+
),
30+
.package(
31+
url: "https://github.com/DependencyD",
32+
branch: "master"
33+
),
34+
],
35+
targets: [
36+
.target(
37+
name: "TargetA",
38+
dependencies: [
39+
.product(name: "LocalDependencyA", package: "LocalDependencyA"),
40+
.product(name: "RemoteDependencyA", package: "RemoteDependencyA"),
41+
.product(name: "RemoteDependencyB", package: "RemoteDependencyB"),
42+
.product(name: "RemoteDependencyD", package: "RemoteDependencyD"),
43+
],
44+
path: "Framework/Sources",
45+
resources: [
46+
.process("Resources")
47+
],
48+
plugins: [
49+
]
50+
),
51+
.testTarget(
52+
name: "TargetATests",
53+
dependencies: [
54+
.byName(name: "TargetA"),
55+
.product(name: "RemoteDependencyB", package: "RemoteDependencyB"),
56+
],
57+
path: "Tests/Sources",
58+
resources: [
59+
.process("Resources")
60+
],
61+
plugins: [
62+
]
63+
),
64+
]
65+
)

Tests/Resources/TestRemoteDependencies.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414
"name": "RemoteDependencyC",
1515
"url": "https://github.com/DependencyC",
1616
"revision": "abcde1235kjh"
17+
},
18+
{
19+
"name": "RemoteDependencyD",
20+
"url": "https://github.com/DependencyD",
21+
"branch": "master"
1722
}
1823
]
1924
}

0 commit comments

Comments
 (0)