@@ -103,6 +103,22 @@ package enum ConvertActionConverter {
103
103
let resultsSyncQueue = DispatchQueue ( label: " Convert Serial Queue " , qos: . unspecified, attributes: [ ] )
104
104
let resultsGroup = DispatchGroup ( )
105
105
106
+ let linkHierarchySerializationProblems = Synchronized < [ Problem ] > ( [ ] )
107
+ if FeatureFlags . current. isLinkHierarchySerializationEnabled {
108
+ resultsGroup. async ( queue: resultsSyncQueue) {
109
+ signposter. withIntervalSignpost ( " Serialize link hierarchy " , id: signposter. makeSignpostID ( ) ) {
110
+ do {
111
+ let serializableLinkInformation = try context. linkResolver. localResolver. prepareForSerialization ( bundleID: bundle. id)
112
+ try outputConsumer. consume ( linkResolutionInformation: serializableLinkInformation)
113
+ } catch {
114
+ linkHierarchySerializationProblems. sync {
115
+ recordProblem ( from: error, in: & $0, withIdentifier: " link-resolver " )
116
+ }
117
+ }
118
+ }
119
+ }
120
+ }
121
+
106
122
let renderSignpostHandle = signposter. beginInterval ( " Render " , id: signposter. makeSignpostID ( ) , " Render \( context. knownPages. count) pages " )
107
123
108
124
var conversionProblems : [ Problem ] = context. knownPages. concurrentPerform { identifier, results in
@@ -164,44 +180,25 @@ package enum ConvertActionConverter {
164
180
// Wait for any concurrent updates to complete.
165
181
resultsGroup. wait ( )
166
182
183
+ conversionProblems += linkHierarchySerializationProblems. sync { $0 }
184
+
167
185
signposter. endInterval ( " Render " , renderSignpostHandle)
168
186
169
187
guard !Task. isCancelled else { return [ ] }
170
188
171
189
// Write various metadata
172
- if emitDigest {
190
+ if emitDigest || FeatureFlags . current . isLinkHierarchySerializationEnabled {
173
191
signposter. withIntervalSignpost ( " Emit digest " , id: signposter. makeSignpostID ( ) ) {
174
192
do {
175
193
try outputConsumer. finishedConsumingLinkElementSummaries ( )
176
- try outputConsumer. consume ( indexingRecords: indexingRecords)
177
- try outputConsumer. consume ( assets: assets)
178
- } catch {
179
- recordProblem ( from: error, in: & conversionProblems, withIdentifier: " metadata " )
180
- }
181
- }
182
- }
183
-
184
- if FeatureFlags . current. isLinkHierarchySerializationEnabled {
185
- signposter. withIntervalSignpost ( " Serialize link hierarchy " , id: signposter. makeSignpostID ( ) ) {
186
- do {
187
- let serializableLinkInformation = try context. linkResolver. localResolver. prepareForSerialization ( bundleID: bundle. id)
188
- try outputConsumer. consume ( linkResolutionInformation: serializableLinkInformation)
189
-
190
- if !emitDigest {
191
- try outputConsumer. finishedConsumingLinkElementSummaries ( )
194
+ if emitDigest {
195
+ // Only emit the other digest files if `--emit-digest` is passed
196
+ try outputConsumer. consume ( indexingRecords: indexingRecords)
197
+ try outputConsumer. consume ( assets: assets)
198
+ try outputConsumer. consume ( problems: context. problems + conversionProblems)
192
199
}
193
200
} catch {
194
- recordProblem ( from: error, in: & conversionProblems, withIdentifier: " link-resolver " )
195
- }
196
- }
197
- }
198
-
199
- if emitDigest {
200
- signposter. withIntervalSignpost ( " Emit digest " , id: signposter. makeSignpostID ( ) ) {
201
- do {
202
- try outputConsumer. consume ( problems: context. problems + conversionProblems)
203
- } catch {
204
- recordProblem ( from: error, in: & conversionProblems, withIdentifier: " problems " )
201
+ recordProblem ( from: error, in: & conversionProblems, withIdentifier: " metadata " )
205
202
}
206
203
}
207
204
}
0 commit comments