Skip to content

Commit dacf88b

Browse files
authored
Merge pull request #302 from tayloraswift/handle-upper-prerelease-bound
fix #297
2 parents 37e6164 + 0367bcd commit dacf88b

File tree

7 files changed

+79
-37
lines changed

7 files changed

+79
-37
lines changed

Sources/PackageMetadata/Manifests/SPM.Manifest.Dependency.Resolvable.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ extension SPM.Manifest.Dependency.Resolvable:JSONObjectDecodable
8484
with: \.value.value)))
8585

8686
case .range:
87-
let (lower, upper):(SemanticVersion, PatchVersion) = try json.decode(
87+
let (lower, upper):(SemanticVersion, SemanticVersion) = try json.decode(
8888
as: JSON.SingleElementRepresentation<
8989
JSON.ObjectDecoder<CodingKey.Requirement.Range>>.self)
9090
{
@@ -93,7 +93,7 @@ extension SPM.Manifest.Dependency.Resolvable:JSONObjectDecodable
9393
as: JSON.StringRepresentation<SemanticVersion>.self,
9494
with: \.value),
9595
try $0.value[.upperBound].decode(
96-
as: JSON.StringRepresentation<PatchVersion>.self,
96+
as: JSON.StringRepresentation<SemanticVersion>.self,
9797
with: \.value)
9898
)
9999
}

Sources/PackageMetadataTests/Main.PackageSwift.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ extension Main.PackageSwift:TestBattery
214214
location: .remote(
215215
url: "https://github.com/tayloraswift/swift-grammar"),
216216
requirement: .stable(.range(.release(.v(0, 3, 1)),
217-
to: .v(0, 4, 0))))),
217+
to: .release(.v(0, 4, 0)))))),
218218

219219
.resolvable(.init(
220220
identity: "swift-hash",
@@ -228,7 +228,7 @@ extension Main.PackageSwift:TestBattery
228228
location: .local(
229229
root: "/swift/swift-mongodb"),
230230
requirement: .stable(.range(.release(.v(0, 4, 5)),
231-
to: .v(0, 5, 0))))),
231+
to: .release(.v(0, 5, 0)))))),
232232

233233
.resolvable(.init(
234234
identity: "swift-system",

Sources/SymbolGraphBuilderTests/Main.swift

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -248,8 +248,7 @@ enum Main:TestMain, TestBattery
248248
})
249249
{
250250
// the swift-docc-plugin dependency should have been linted.
251-
tests.expect(docs.metadata.dependencies.map(\.package.name) **?
252-
[
251+
tests.expect(docs.metadata.dependencies.map(\.package.name) **? [
253252
"swift-atomics",
254253
"swift-collections",
255254
// swift-nio grew a dependency on swift-system in 2.63.0
@@ -276,8 +275,7 @@ enum Main:TestMain, TestBattery
276275
with: toolchain)
277276
})
278277
{
279-
tests.expect(docs.metadata.dependencies.map(\.package.name) **?
280-
[
278+
tests.expect(docs.metadata.dependencies.map(\.package.name) **? [
281279
"swift-collections",
282280
"swift-atomics",
283281
"swift-nio",
@@ -302,8 +300,7 @@ enum Main:TestMain, TestBattery
302300
with: toolchain)
303301
})
304302
{
305-
tests.expect(docs.metadata.dependencies.map(\.package.name) **?
306-
[
303+
tests.expect(docs.metadata.dependencies.map(\.package.name) **? [
307304
"swift-collections",
308305
"swift-atomics",
309306
"swift-nio",
@@ -337,6 +334,33 @@ enum Main:TestMain, TestBattery
337334
docs.roundtrip(for: tests, in: workspace.artifacts)
338335
}
339336

337+
// The swift-snapshot-testing package at 1.17.0 has a dependency on SwiftSyntax with
338+
// prerelease bounds on both sides, so we should be able to handle that.
339+
340+
// This test is disabled on macOS because `swift symbolgraph-extract` crashes there.
341+
#if os(Linux)
342+
if let tests:TestGroup = tests / "swift-snapshot-testing",
343+
let docs:SymbolGraphObject<Void> = (tests.do
344+
{
345+
try workspace.build(package: try .remote(
346+
project: "swift-snapshot-testing",
347+
from: "https://github.com/pointfreeco/swift-snapshot-testing.git",
348+
at: "1.17.0",
349+
in: workspace),
350+
with: toolchain)
351+
})
352+
{
353+
tests.expect(docs.metadata.dependencies.map(\.package.name) **? [
354+
"swift-syntax",
355+
])
356+
357+
tests.expect(docs.graph.cultures.count >? 0)
358+
tests.expect(docs.graph.decls.nodes.count >? 0)
359+
360+
docs.roundtrip(for: tests, in: workspace.artifacts)
361+
}
362+
#endif
363+
340364
// IndexstoreDB links the LLVM Blocks runtime, so this tests that we handle that.
341365
// Since it involves specifying the location of the Swift runtime, we can only expect
342366
// this to work within a particular Docker container.

Sources/SymbolGraphs/Metadata/SymbolGraphMetadata.Dependency.swift

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,10 @@ extension SymbolGraphMetadata.Dependency
4444
{
4545
case package_name = "P"
4646
case package_scope = "S"
47-
case requirement_suffix = "B"
48-
case requirement_lower = "L"
49-
case requirement_upper = "U"
47+
case requirement_lowerNumber = "L"
48+
case requirement_lowerSuffix = "B"
49+
case requirement_upperNumber = "U"
50+
case requirement_upperSuffix = "C"
5051
case revision = "H"
5152
case version = "V"
5253
}
@@ -65,13 +66,16 @@ extension SymbolGraphMetadata.Dependency:BSONDocumentEncodable
6566
break
6667

6768
case .range(let version, to: let upper)?:
68-
bson[.requirement_upper] = upper
69+
let suffix:String = "\(upper.suffix)"
70+
bson[.requirement_upperNumber] = upper.number
71+
bson[.requirement_upperSuffix] = suffix.isEmpty ? nil : suffix
72+
6973
fallthrough
7074

7175
case .exact(let version)?:
7276
let suffix:String = "\(version.suffix)"
73-
bson[.requirement_lower] = version.number
74-
bson[.requirement_suffix] = suffix.isEmpty ? nil : suffix
77+
bson[.requirement_lowerNumber] = version.number
78+
bson[.requirement_lowerSuffix] = suffix.isEmpty ? nil : suffix
7579
}
7680

7781
bson[.revision] = self.revision
@@ -84,9 +88,10 @@ extension SymbolGraphMetadata.Dependency:BSONDocumentDecodable
8488
init(bson:BSON.DocumentDecoder<CodingKey>) throws
8589
{
8690
let requirement:SymbolGraphMetadata.DependencyRequirement? = .init(
87-
suffix: try bson[.requirement_suffix]?.decode(),
88-
lower: try bson[.requirement_lower]?.decode(),
89-
upper: try bson[.requirement_upper]?.decode())
91+
lowerNumber: try bson[.requirement_lowerNumber]?.decode(),
92+
lowerSuffix: try bson[.requirement_lowerSuffix]?.decode(),
93+
upperNumber: try bson[.requirement_upperNumber]?.decode(),
94+
upperSuffix: try bson[.requirement_upperSuffix]?.decode())
9095

9196
self.init(package: .init(
9297
scope: try bson[.package_scope]?.decode(),

Sources/SymbolGraphs/Metadata/SymbolGraphMetadata.DependencyRequirement.swift

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,40 @@ extension SymbolGraphMetadata
66
enum DependencyRequirement:Equatable, Hashable, Sendable
77
{
88
case exact(SemanticVersion)
9-
case range(SemanticVersion, to:PatchVersion)
9+
case range(SemanticVersion, to:SemanticVersion)
1010
}
1111
}
1212
extension SymbolGraphMetadata.DependencyRequirement
1313
{
1414
@inlinable public
15-
init?(suffix:SemanticVersion.Suffix?, lower:PatchVersion?, upper:PatchVersion?)
15+
init?(
16+
lowerNumber:PatchVersion?,
17+
lowerSuffix:SemanticVersion.Suffix?,
18+
upperNumber:PatchVersion?,
19+
upperSuffix:SemanticVersion.Suffix?)
1620
{
1721
guard
18-
let version:PatchVersion = lower
22+
let lowerNumber:PatchVersion
1923
else
2024
{
2125
return nil
2226
}
2327

24-
let suffix:SemanticVersion.Suffix = suffix ?? .release()
28+
let lower:SemanticVersion = .init(
29+
number: lowerNumber,
30+
suffix: lowerSuffix ?? .release())
2531

26-
if let upper:PatchVersion,
27-
upper >= version
32+
if let upperNumber:PatchVersion,
33+
upperNumber >= lowerNumber
2834
{
29-
self = .range(.init(number: version, suffix: suffix), to: upper)
35+
let upper:SemanticVersion = .init(number: upperNumber,
36+
suffix: upperSuffix ?? .release())
37+
38+
self = .range(lower, to: upper)
3039
}
3140
else
3241
{
33-
self = .exact(.init(number: version, suffix: suffix))
42+
self = .exact(lower)
3443
}
3544
}
3645
}

Sources/SymbolGraphs/SymbolGraphABI.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ import SemanticVersions
33
@frozen public
44
enum SymbolGraphABI
55
{
6-
@inlinable public static var version:PatchVersion { .v(0, 9, 6) }
6+
@inlinable public static var version:PatchVersion { .v(0, 9, 7) }
77
}

Sources/UnidocRecords/Volumes/Metadata/Unidoc.VolumeMetadata.Dependency.swift

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,10 @@ extension Unidoc.VolumeMetadata.Dependency
3838
enum CodingKey:String, Sendable
3939
{
4040
case exonym = "_id"
41-
case requirement_suffix = "B"
42-
case requirement_lower = "L"
43-
case requirement_upper = "U"
41+
case requirement_lowerNumber = "L"
42+
case requirement_lowerSuffix = "B"
43+
case requirement_upperNumber = "U"
44+
case requirement_upperSuffix = "C"
4445
case resolution = "S"
4546
case linked = "p"
4647
case pinned = "q"
@@ -59,13 +60,15 @@ extension Unidoc.VolumeMetadata.Dependency:BSONDocumentEncodable
5960
break
6061

6162
case .range(let version, to: let upper)?:
62-
bson[.requirement_upper] = upper
63+
let suffix:String = "\(upper.suffix)"
64+
bson[.requirement_upperNumber] = upper.number
65+
bson[.requirement_upperSuffix] = suffix.isEmpty ? nil : suffix
6366
fallthrough
6467

6568
case .exact(let version)?:
6669
let suffix:String = "\(version.suffix)"
67-
bson[.requirement_lower] = version.number
68-
bson[.requirement_suffix] = suffix.isEmpty ? nil : suffix
70+
bson[.requirement_lowerNumber] = version.number
71+
bson[.requirement_lowerSuffix] = suffix.isEmpty ? nil : suffix
6972
}
7073

7174
bson[.resolution] = self.resolution
@@ -84,9 +87,10 @@ extension Unidoc.VolumeMetadata.Dependency:BSONDocumentDecodable
8487
init(bson:BSON.DocumentDecoder<CodingKey>) throws
8588
{
8689
let requirement:SymbolGraphMetadata.DependencyRequirement? = .init(
87-
suffix: try bson[.requirement_suffix]?.decode(),
88-
lower: try bson[.requirement_lower]?.decode(),
89-
upper: try bson[.requirement_upper]?.decode())
90+
lowerNumber: try bson[.requirement_lowerNumber]?.decode(),
91+
lowerSuffix: try bson[.requirement_lowerSuffix]?.decode(),
92+
upperNumber: try bson[.requirement_upperNumber]?.decode(),
93+
upperSuffix: try bson[.requirement_upperSuffix]?.decode())
9094

9195
let pin:Unidoc.VolumeMetadata.DependencyPin?
9296

0 commit comments

Comments
 (0)