mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-19 19:43:23 +08:00
Utilities/Sphinx: Fix parallel documentation builds
In commitd78bfa1ecc
(Utilities/Sphinx: support cmakedomain running in parallel, 2022-10-24, v3.26.0-rc1~495^2) we declared the domain as parallel-safe without actually implementing the required `merge_domaindata` method. Since then, commit37e015d4a6
(Utilities/Sphinx: Refactor Sphinx reference recording) changed how we store resolved references, such that our separate fix for 3.26 does not work in 3.27+. While at it, correct a crusty comment that was overlooked during the aforementioned refactoring. Issue: #24076 Co-authored-by: Jared Dillard <jared.dillard@gmail.com>
This commit is contained in:

committed by
Brad King

parent
0cd5300665
commit
f546ebfecc
@@ -668,7 +668,7 @@ class CMakeDomain(Domain):
|
||||
'manual': CMakeXRefRole(),
|
||||
}
|
||||
initial_data = {
|
||||
'objects': {}, # fullname -> docname, objtype
|
||||
'objects': {}, # fullname -> ObjectEntry
|
||||
}
|
||||
|
||||
def clear_doc(self, docname):
|
||||
@@ -679,6 +679,20 @@ class CMakeDomain(Domain):
|
||||
for fullname in to_clear:
|
||||
del self.data['objects'][fullname]
|
||||
|
||||
def merge_domaindata(self, docnames, otherdata):
|
||||
"""Merge domaindata from the workers/chunks when they return.
|
||||
|
||||
Called once per parallelization chunk.
|
||||
Only used when sphinx is run in parallel mode.
|
||||
|
||||
:param docnames: a Set of the docnames that are part of the current
|
||||
chunk to merge
|
||||
:param otherdata: the partial data calculated by the current chunk
|
||||
"""
|
||||
for refname, obj in otherdata['objects'].items():
|
||||
if obj.docname in docnames:
|
||||
self.data['objects'][refname] = obj
|
||||
|
||||
def resolve_xref(self, env, fromdocname, builder,
|
||||
typ, target, node, contnode):
|
||||
targetid = f'{typ}:{target}'
|
||||
|
Reference in New Issue
Block a user