Skip to content

Commit 9b48517

Browse files
committed
[Pubgrub] Fix some issues related to branch-based deps
1 parent f4f146c commit 9b48517

File tree

3 files changed

+47
-20
lines changed

3 files changed

+47
-20
lines changed

Sources/PackageGraph/Pubgrub.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,14 @@ public struct Term: Equatable, Hashable {
6565
andPolarity otherIsPositive: Bool
6666
) -> Term? {
6767

68+
// FIXME: Figure out if we need to handle more of these cases.
6869
switch (self.requirement, requirement) {
6970
case (.unversioned, .unversioned):
7071
return self.isPositive == otherIsPositive ? self : nil
7172
case (.revision(let lhs), .revision(let rhs)):
7273
return self.isPositive == otherIsPositive && lhs == rhs ? self : nil
74+
case (.revision, .versionSet):
75+
return self.isPositive ? self : nil
7376
default: break
7477
}
7578

@@ -210,7 +213,7 @@ extension PackageRequirement {
210213
case (.revision, _):
211214
return false
212215
case (_, .revision):
213-
return false
216+
return true
214217
default:
215218
fatalError("unhandled \(self), \(other)")
216219
}

Tests/PackageGraphTests/PubgrubTests.swift

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -172,17 +172,17 @@ final class PubgrubTests: XCTestCase {
172172
XCTAssertEqual(Term("a^2.0.0").relation(with: "[email protected]"), .disjoint)
173173
XCTAssertEqual(Term("[email protected]").relation(with: "a@master"), .disjoint)
174174
XCTAssertEqual(Term("a^1.0.0").relation(with: "a@master"), .disjoint)
175-
XCTAssertEqual(Term("a@master").relation(with: "[email protected]"), .overlap)
176-
XCTAssertEqual(Term("a@master").relation(with: "a^1.0.0"), .overlap)
175+
XCTAssertEqual(Term("a@master").relation(with: "[email protected]"), .subset)
176+
XCTAssertEqual(Term("a@master").relation(with: "a^1.0.0"), .subset)
177177
XCTAssertEqual(Term("a@master").relation(with: "a@master"), .subset)
178178
XCTAssertEqual(Term("a@master").relation(with: "a@develop"), .disjoint)
179179

180180
// First term is negative, second term is positive.
181181
XCTAssertEqual(Term("¬a^1.0.0").relation(with: "[email protected]"), .disjoint)
182182
XCTAssertEqual(Term("¬a^1.5.0").relation(with: "a^1.0.0"), .overlap)
183183
XCTAssertEqual(Term("¬a^2.0.0").relation(with: "a^1.5.0"), .overlap)
184-
XCTAssertEqual(Term("¬[email protected]").relation(with: "a@master"), .overlap)
185-
XCTAssertEqual(Term("¬a^1.0.0").relation(with: "a@master"), .overlap)
184+
XCTAssertEqual(Term("¬[email protected]").relation(with: "a@master"), .disjoint)
185+
XCTAssertEqual(Term("¬a^1.0.0").relation(with: "a@master"), .disjoint)
186186
XCTAssertEqual(Term("¬a@master").relation(with: "[email protected]"), .overlap)
187187
XCTAssertEqual(Term("¬a@master").relation(with: "a^1.0.0"), .overlap)
188188
XCTAssertEqual(Term("¬a@master").relation(with: "a@master"), .disjoint)
@@ -194,8 +194,8 @@ final class PubgrubTests: XCTestCase {
194194
XCTAssertEqual(Term("a^1.0.0").relation(with: "¬a^1.5.0"), .overlap)
195195
XCTAssertEqual(Term("[email protected]").relation(with: "¬a@master"), .subset)
196196
XCTAssertEqual(Term("a^1.0.0").relation(with: "¬a@master"), .subset)
197-
XCTAssertEqual(Term("a@master").relation(with: "¬[email protected]"), .overlap)
198-
XCTAssertEqual(Term("a@master").relation(with: "¬a^1.0.0"), .overlap)
197+
XCTAssertEqual(Term("a@master").relation(with: "¬[email protected]"), .disjoint)
198+
XCTAssertEqual(Term("a@master").relation(with: "¬a^1.0.0"), .disjoint)
199199
XCTAssertEqual(Term("a@master").relation(with: "¬a@master"), .disjoint)
200200
XCTAssertEqual(Term("a@master").relation(with: "¬a@develop"), .subset)
201201
XCTAssertEqual(Term("a-1.0.0-2.0.0").relation(with: "¬a-1.0.0-1.2.0"), .overlap)
@@ -204,8 +204,8 @@ final class PubgrubTests: XCTestCase {
204204
XCTAssertEqual(Term("¬a^1.0.0").relation(with: "¬a^1.5.0"), .subset)
205205
XCTAssertEqual(Term("¬a^2.0.0").relation(with: "¬a^1.0.0"), .overlap)
206206
XCTAssertEqual(Term("¬a^1.5.0").relation(with: "¬a^1.0.0"), .overlap)
207-
XCTAssertEqual(Term("¬[email protected]").relation(with: "¬a@master"), .overlap)
208-
XCTAssertEqual(Term("¬a^1.0.0").relation(with: "¬a@master"), .overlap)
207+
XCTAssertEqual(Term("¬[email protected]").relation(with: "¬a@master"), .subset)
208+
XCTAssertEqual(Term("¬a^1.0.0").relation(with: "¬a@master"), .subset)
209209
XCTAssertEqual(Term("¬a@master").relation(with: "¬[email protected]"), .overlap)
210210
XCTAssertEqual(Term("¬a@master").relation(with: "¬a^1.0.0"), .overlap)
211211
XCTAssertEqual(Term("¬a@master").relation(with: "¬a@master"), .subset)
@@ -808,7 +808,24 @@ final class PubgrubTests: XCTestCase {
808808
builder.serve("bar", at: v1, with: ["foo": .versionSet(v1Range)])
809809

810810
let resolver = builder.create()
811-
// FIXME: This fails if you change the order.
811+
let dependencies = builder.create(dependencies: [
812+
"foo": .revision("master"),
813+
"bar": .versionSet(.exact(v1)),
814+
815+
])
816+
let result = resolver.solve(dependencies: dependencies)
817+
818+
AssertResult(result, [
819+
("foo", .revision("master")),
820+
("bar", .version(v1))
821+
])
822+
}
823+
824+
func testResolutionWithOverridingBranchBasedDependency2() {
825+
builder.serve("foo", at: .revision("master"))
826+
builder.serve("bar", at: v1, with: ["foo": .versionSet(v1Range)])
827+
828+
let resolver = builder.create()
812829
let dependencies = builder.create(dependencies: [
813830
"bar": .versionSet(.exact(v1)),
814831
"foo": .revision("master"),
@@ -967,7 +984,7 @@ final class PubgrubTests: XCTestCase {
967984
print(errorMsg)
968985
}
969986

970-
func _testConflict4() {
987+
func testBranchOverriding3() {
971988
builder.serve("swift-nio", at: v1)
972989
builder.serve("swift-nio", at: .revision("master"))
973990
builder.serve("swift-nio-ssl", at: .revision("master"), with: [
@@ -985,13 +1002,14 @@ final class PubgrubTests: XCTestCase {
9851002
])
9861003
let result = resolver.solve(dependencies: dependencies, pins: [])
9871004

988-
guard let errorMsg = result.errorMsg else {
989-
return
990-
}
991-
print(errorMsg)
1005+
AssertResult(result, [
1006+
("swift-nio-ssl", .revision("master")),
1007+
("swift-nio", .revision("master")),
1008+
("foo", .version(v1))
1009+
])
9921010
}
9931011

994-
func _testConflict5() {
1012+
func testBranchOverriding4() {
9951013
builder.serve("swift-nio", at: v1)
9961014
builder.serve("swift-nio", at: .revision("master"))
9971015
builder.serve("swift-nio-ssl", at: .revision("master"), with: [
@@ -1017,10 +1035,13 @@ final class PubgrubTests: XCTestCase {
10171035
])
10181036
let result = resolver.solve(dependencies: dependencies, pins: [])
10191037

1020-
guard let errorMsg = result.errorMsg else {
1021-
return
1022-
}
1023-
print(errorMsg)
1038+
AssertResult(result, [
1039+
("swift-nio-ssl", .revision("master")),
1040+
("swift-nio", .revision("master")),
1041+
("nio-postgres", .revision("master")),
1042+
("http-client", .version(v1)),
1043+
("boring-ssl", .version(v1)),
1044+
])
10241045
}
10251046
}
10261047

Tests/PackageGraphTests/XCTestManifests.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ extension PubgrubTests {
5454
// `swift test --generate-linuxmain`
5555
// to regenerate.
5656
static let __allTests__PubgrubTests = [
57+
("testBranchOverriding3", testBranchOverriding3),
58+
("testBranchOverriding4", testBranchOverriding4),
5759
("testConflict1", testConflict1),
5860
("testConflict2", testConflict2),
5961
("testConflict3", testConflict3),
@@ -69,6 +71,7 @@ extension PubgrubTests {
6971
("testResolutionNonExistentVersion", testResolutionNonExistentVersion),
7072
("testResolutionPerformingConflictResolution", testResolutionPerformingConflictResolution),
7173
("testResolutionWithOverridingBranchBasedDependency", testResolutionWithOverridingBranchBasedDependency),
74+
("testResolutionWithOverridingBranchBasedDependency2", testResolutionWithOverridingBranchBasedDependency2),
7275
("testResolutionWithRevisionConflict", testResolutionWithRevisionConflict),
7376
("testResolutionWithSimpleBranchBasedDependency", testResolutionWithSimpleBranchBasedDependency),
7477
("testResolutionWithSimpleBranchBasedDependency2", testResolutionWithSimpleBranchBasedDependency2),

0 commit comments

Comments
 (0)