@@ -103,6 +103,22 @@ package enum ConvertActionConverter {
103103 let resultsSyncQueue = DispatchQueue ( label: " Convert Serial Queue " , qos: . unspecified, attributes: [ ] )
104104 let resultsGroup = DispatchGroup ( )
105105
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+
106122 let renderSignpostHandle = signposter. beginInterval ( " Render " , id: signposter. makeSignpostID ( ) , " Render \( context. knownPages. count) pages " )
107123
108124 var conversionProblems : [ Problem ] = context. knownPages. concurrentPerform { identifier, results in
@@ -164,44 +180,25 @@ package enum ConvertActionConverter {
164180 // Wait for any concurrent updates to complete.
165181 resultsGroup. wait ( )
166182
183+ conversionProblems += linkHierarchySerializationProblems. sync { $0 }
184+
167185 signposter. endInterval ( " Render " , renderSignpostHandle)
168186
169187 guard !Task. isCancelled else { return [ ] }
170188
171189 // Write various metadata
172- if emitDigest {
190+ if emitDigest || FeatureFlags . current . isLinkHierarchySerializationEnabled {
173191 signposter. withIntervalSignpost ( " Emit digest " , id: signposter. makeSignpostID ( ) ) {
174192 do {
175193 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)
192199 }
193200 } 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 " )
205202 }
206203 }
207204 }
0 commit comments