Skip to content

Commit c15aa43

Browse files
committed
deprecate the Volume.Names.origin field and source that information from ground truth in PackageRecord.repo?.origin
1 parent bc0c76f commit c15aa43

32 files changed

+467
-323
lines changed

Sources/UnidocAnalysisTests/Main.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ enum Main:SyncTests
128128
names: .init(id: swift_malibu.id,
129129
display: nil,
130130
refname: nil,
131-
origin: nil,
132131
volume: .init(
133132
package: "swift-malibu",
134133
version: "master"),

Sources/UnidocDB/Packages/PackageRepo.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ enum PackageRepo:Equatable, Sendable
1111
}
1212
extension PackageRepo
1313
{
14-
var origin:Volume.Names.Origin
14+
@inlinable public
15+
var origin:Volume.Origin
1516
{
1617
switch self
1718
{

Sources/UnidocDB/Packages/UnidocDatabase.Editions.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ extension UnidocDatabase.Editions:DatabaseCollection
9393
},
9494
]
9595
}
96-
extension UnidocDatabase.Editions
96+
extension UnidocDatabase.Editions:RecodableCollection
9797
{
9898
public
9999
func recode(with session:Mongo.Session) async throws -> (modified:Int, of:Int)

Sources/UnidocDB/Packages/UnidocDatabase.Packages.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ extension UnidocDatabase.Packages:DatabaseCollection
5656
},
5757
]
5858
}
59-
extension UnidocDatabase.Packages
59+
extension UnidocDatabase.Packages:RecodableCollection
6060
{
6161
public
6262
func recode(with session:Mongo.Session) async throws -> (modified:Int, of:Int)

Sources/UnidocDB/Packages/UnidocDatabase.swift

Lines changed: 26 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ extension UnidocDatabase
4141
var groups:Groups { .init(database: self.id) }
4242
var search:Search { .init(database: self.id) }
4343
var trees:Trees { .init(database: self.id) }
44+
@inlinable public
4445
var names:Names { .init(database: self.id) }
4546
var siteMaps:SiteMaps { .init(database: self.id) }
4647
}
@@ -99,39 +100,37 @@ extension UnidocDatabase
99100

100101
print("cleared all unidoc volumes...")
101102

102-
var origins:[Int32: Volume.Names.Origin?] = [:]
103+
// var origins:[Int32: Volume.Origin?] = [:]
103104
var count:Int = 0
104105

105106
try await self.graphs.list(with: session)
106107
{
107108
(snapshot:Snapshot) in
108109

109-
let origin:Volume.Names.Origin? = try await
110-
{
111-
switch $0
112-
{
113-
case let origin??:
114-
return origin
115-
116-
case nil?:
117-
// We already tried to find the origin for this package, and it
118-
// didn't exist.
119-
return nil
120-
121-
case nil:
122-
let package:PackageRecord? = try await self.packages.find(
123-
by: PackageRecord[.cell],
124-
of: snapshot.package,
125-
with: session)
126-
let origin:Volume.Names.Origin? = package?.repo?.origin
127-
$0 = .some(origin)
128-
return origin
129-
}
130-
} (&origins[snapshot.package])
131-
132-
let volume:Volume = try await self.link(snapshot,
133-
origin: origin,
134-
with: session)
110+
// let origin:Volume.Origin? = try await
111+
// {
112+
// switch $0
113+
// {
114+
// case let origin??:
115+
// return origin
116+
117+
// case nil?:
118+
// // We already tried to find the origin for this package, and it
119+
// // didn't exist.
120+
// return nil
121+
122+
// case nil:
123+
// let package:PackageRecord? = try await self.packages.find(
124+
// by: PackageRecord[.cell],
125+
// of: snapshot.package,
126+
// with: session)
127+
// let origin:Volume.Origin? = package?.repo?.origin
128+
// $0 = .some(origin)
129+
// return origin
130+
// }
131+
// } (&origins[snapshot.package])
132+
133+
let volume:Volume = try await self.link(snapshot, with: session)
135134

136135
try await self.publish(volume, with: session)
137136

@@ -347,7 +346,6 @@ extension UnidocDatabase
347346
version: receipt.version,
348347
metadata: docs.metadata,
349348
graph: docs.graph),
350-
origin: receipt.repo?.origin,
351349
with: session)
352350

353351
if case .update = receipt.type
@@ -395,7 +393,6 @@ extension UnidocDatabase
395393

396394
private
397395
func link(_ snapshot:__owned Snapshot,
398-
origin:__owned Volume.Names.Origin?,
399396
with session:Mongo.Session) async throws -> Volume
400397
{
401398
let context:DynamicContext = .init(snapshot,
@@ -420,7 +417,6 @@ extension UnidocDatabase
420417
names: .init(id: snapshot.edition,
421418
display: snapshot.metadata.display,
422419
refname: snapshot.metadata.commit?.refname,
423-
origin: origin,
424420
volume: id.volume,
425421
latest: true,
426422
patch: id.version.stable?.patch))
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/// A database collection that can be migrated to a new schema.
2+
import MongoDB
3+
4+
public
5+
protocol RecodableCollection
6+
{
7+
func recode(with session:Mongo.Session) async throws -> (modified:Int, of:Int)
8+
}

Sources/UnidocDB/Volumes/UnidocDatabase.Names.swift

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
import ModuleGraphs
2+
import MongoDB
23
import MongoQL
34
import Unidoc
45
import UnidocRecords
56

67
extension UnidocDatabase
78
{
8-
public
9+
@frozen public
910
struct Names
1011
{
12+
public
1113
let database:Mongo.Database
1214

15+
@inlinable internal
1316
init(database:Mongo.Database)
1417
{
1518
self.database = database
@@ -82,6 +85,16 @@ extension UnidocDatabase.Names:DatabaseCollection
8285
},
8386
]
8487
}
88+
extension UnidocDatabase.Names:RecodableCollection
89+
{
90+
public
91+
func recode(with session:Mongo.Session) async throws -> (modified:Int, of:Int)
92+
{
93+
try await self.recode(through: Volume.Names.self,
94+
with: session,
95+
by: .now.advanced(by: .seconds(30)))
96+
}
97+
}
8598
extension UnidocDatabase.Names
8699
{
87100
/// Returns the latest release version of the specified package, if one exists.

Sources/UnidocDB/Volumes/UnidocDatabase.Vertices.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ extension UnidocDatabase.Vertices:DatabaseCollection
6767
},
6868
]
6969
}
70-
extension UnidocDatabase.Vertices
70+
extension UnidocDatabase.Vertices:RecodableCollection
7171
{
7272
public
7373
func recode(with session:Mongo.Session) async throws -> (modified:Int, of:Int)

Sources/UnidocPages/Groups/Inliner.Groups.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ extension Inliner.Groups:HyperTextOutputStreamable
178178
html[.section, { $0.class = "group topic" }]
179179
{
180180
guard
181-
let principal:Unidoc.Scalar = self.inliner.masters.principal,
181+
let principal:Unidoc.Scalar = self.inliner.vertices.principal,
182182
group.members.contains(.scalar(principal))
183183
else
184184
{
@@ -314,7 +314,7 @@ extension Inliner.Groups:HyperTextOutputStreamable
314314
group.subforms.reduce(into: ([], []))
315315
{
316316
if case true? =
317-
self.inliner.masters[$1]?.decl?.kinks[is: .intrinsicWitness]
317+
self.inliner.vertices[$1]?.decl?.kinks[is: .intrinsicWitness]
318318
{
319319
$0.1.append($1)
320320
}

Sources/UnidocPages/Inlining/Inliner.swift

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import MarkdownABI
44
import ModuleGraphs
55
import Signatures
66
import Unidoc
7+
import UnidocDB
78
import UnidocRecords
89

910
final
@@ -15,19 +16,22 @@ class Inliner
1516
private
1617
var cache:InlinerCache
1718

19+
let repo:PackageRepo?
20+
1821
private
19-
init(cache:InlinerCache)
22+
init(cache:InlinerCache, repo:PackageRepo?)
2023
{
2124
self.outlines = []
2225
self.cache = cache
26+
self.repo = repo
2327
}
2428
}
2529
extension Inliner
2630
{
27-
var masters:InlinerCache.Masters
31+
var vertices:InlinerCache.Vertices
2832
{
29-
_read { yield self.cache.masters }
30-
_modify { yield &self.cache.masters }
33+
_read { yield self.cache.vertices }
34+
_modify { yield &self.cache.vertices }
3135
}
3236
var names:InlinerCache.Names
3337
{
@@ -38,18 +42,20 @@ extension Inliner
3842
extension Inliner
3943
{
4044
convenience
41-
init(principal scalar:Unidoc.Scalar, names:Volume.Names)
45+
init(principal scalar:Unidoc.Scalar, names:Volume.Names, repo:PackageRepo?)
4246
{
4347
self.init(cache: .init(
44-
masters: .init(principal: scalar),
45-
names: .init(principal: names)))
48+
vertices: .init(principal: scalar),
49+
names: .init(principal: names)),
50+
repo: repo)
4651
}
4752
convenience
48-
init(principal names:Volume.Names)
53+
init(principal names:Volume.Names, repo:PackageRepo?)
4954
{
5055
self.init(cache: .init(
51-
masters: .init(principal: nil),
52-
names: .init(principal: names)))
56+
vertices: .init(principal: nil),
57+
names: .init(principal: names)),
58+
repo: repo)
5359
}
5460
}
5561
extension Inliner
@@ -127,9 +133,19 @@ extension Inliner
127133
}
128134
func link(file:Unidoc.Scalar, line:Int? = nil) -> HTML.SourceLink?
129135
{
130-
self.cache[file: file, line: line].map
136+
if let origin:Volume.Origin = self.repo?.origin,
137+
let refname:String = self.names[file.zone]?.refname,
138+
let file:Volume.Vertex.File = self.vertices[file]?.file,
139+
let blob:String = origin.blob(refname: refname, file: file.symbol)
140+
{
141+
return .init(
142+
file: file.symbol.last,
143+
line: line,
144+
target: line.map { "\(blob)#L\($0 + 1)" } ?? blob)
145+
}
146+
else
131147
{
132-
.init(file: $0.symbol.last, line: line, target: $1)
148+
return nil
133149
}
134150
}
135151
}

0 commit comments

Comments
 (0)