Skip to content

Commit 767294c

Browse files
committed
Avoid waiting to serializer the link hierarchy
1 parent 0a46938 commit 767294c

File tree

3 files changed

+31
-28
lines changed

3 files changed

+31
-28
lines changed

Sources/SwiftDocC/Infrastructure/ConvertActionConverter.swift

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,22 @@ package enum ConvertActionConverter {
112112
try outputConsumer.consume(externalRenderNode: externalRenderNode)
113113
}
114114

115+
let linkHierarchySerializationProblems = Synchronized<[Problem]>([])
116+
if FeatureFlags.current.isLinkHierarchySerializationEnabled {
117+
resultsGroup.async(queue: resultsSyncQueue) {
118+
signposter.withIntervalSignpost("Serialize link hierarchy", id: signposter.makeSignpostID()) {
119+
do {
120+
let serializableLinkInformation = try context.linkResolver.localResolver.prepareForSerialization(bundleID: bundle.id)
121+
try outputConsumer.consume(linkResolutionInformation: serializableLinkInformation)
122+
} catch {
123+
linkHierarchySerializationProblems.sync {
124+
recordProblem(from: error, in: &$0, withIdentifier: "link-resolver")
125+
}
126+
}
127+
}
128+
}
129+
}
130+
115131
let renderSignpostHandle = signposter.beginInterval("Render", id: signposter.makeSignpostID(), "Render \(context.knownPages.count) pages")
116132

117133
var conversionProblems: [Problem] = context.knownPages.concurrentPerform { identifier, results in
@@ -173,44 +189,25 @@ package enum ConvertActionConverter {
173189
// Wait for any concurrent updates to complete.
174190
resultsGroup.wait()
175191

192+
conversionProblems += linkHierarchySerializationProblems.sync { $0 }
193+
176194
signposter.endInterval("Render", renderSignpostHandle)
177195

178196
guard !Task.isCancelled else { return [] }
179197

180198
// Write various metadata
181-
if emitDigest {
199+
if emitDigest || FeatureFlags.current.isLinkHierarchySerializationEnabled {
182200
signposter.withIntervalSignpost("Emit digest", id: signposter.makeSignpostID()) {
183201
do {
184202
try outputConsumer.finishedConsumingLinkElementSummaries()
185-
try outputConsumer.consume(indexingRecords: indexingRecords)
186-
try outputConsumer.consume(assets: assets)
187-
} catch {
188-
recordProblem(from: error, in: &conversionProblems, withIdentifier: "metadata")
189-
}
190-
}
191-
}
192-
193-
if FeatureFlags.current.isLinkHierarchySerializationEnabled {
194-
signposter.withIntervalSignpost("Serialize link hierarchy", id: signposter.makeSignpostID()) {
195-
do {
196-
let serializableLinkInformation = try context.linkResolver.localResolver.prepareForSerialization(bundleID: bundle.id)
197-
try outputConsumer.consume(linkResolutionInformation: serializableLinkInformation)
198-
199-
if !emitDigest {
200-
try outputConsumer.finishedConsumingLinkElementSummaries()
203+
if emitDigest {
204+
// Only emit the other digest files if `--emit-digest` is passed
205+
try outputConsumer.consume(indexingRecords: indexingRecords)
206+
try outputConsumer.consume(assets: assets)
207+
try (_Deprecated(outputConsumer) as (any _DeprecatedConsumeProblemsAccess))._consume(problems: context.problems + conversionProblems)
201208
}
202209
} catch {
203-
recordProblem(from: error, in: &conversionProblems, withIdentifier: "link-resolver")
204-
}
205-
}
206-
}
207-
208-
if emitDigest {
209-
signposter.withIntervalSignpost("Emit digest", id: signposter.makeSignpostID()) {
210-
do {
211-
try (_Deprecated(outputConsumer) as (any _DeprecatedConsumeProblemsAccess))._consume(problems: context.problems + conversionProblems)
212-
} catch {
213-
recordProblem(from: error, in: &conversionProblems, withIdentifier: "problems")
210+
recordProblem(from: error, in: &conversionProblems, withIdentifier: "metadata")
214211
}
215212
}
216213
}

Sources/SwiftDocCUtilities/Action/Actions/Merge/MergeAction.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ struct MergeAction: AsyncAction {
7878
}
7979
let renderIndex = try JSONDecoder().decode(RenderIndex.self, from: jsonIndexData)
8080

81+
// TODO: Combine link-hierarchy.json, linkable-entities.json, and metadata.json
82+
8183
try combinedJSONIndex.merge(renderIndex)
8284
}
8385

Tests/SwiftDocCUtilitiesTests/MergeActionTests.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -925,6 +925,8 @@ class MergeActionTests: XCTestCase {
925925
│ ╰─ \(name.lowercased())-card.png
926926
├─ index/
927927
│ ╰─ index.json
928+
├─ link-hierarchy.json
929+
├─ linkable-entities.json
928930
├─ metadata.json
929931
╰─ videos/
930932
╰─ \(name)
@@ -971,6 +973,8 @@ class MergeActionTests: XCTestCase {
971973
│ ╰─ second-card.png
972974
├─ index/
973975
│ ╰─ index.json
976+
├─ link-hierarchy.json
977+
├─ linkable-entities.json
974978
├─ metadata.json
975979
╰─ videos/
976980
├─ First/

0 commit comments

Comments
 (0)