From 294da2aa0991b769d475f298976d906bd547778e Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sun, 8 May 2022 02:30:23 +0900 Subject: [PATCH] refactor: Create a copy of settings on Builder.write_doctree() --- sphinx/builders/__init__.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/sphinx/builders/__init__.py b/sphinx/builders/__init__.py index a67948accd2..45188cd565c 100644 --- a/sphinx/builders/__init__.py +++ b/sphinx/builders/__init__.py @@ -476,11 +476,6 @@ def read_doc(self, docname: str) -> None: publisher.publish() doctree = publisher.document - # The settings object is reused by the Publisher for each document. - # Becuase we modify the settings object in ``write_doctree``, we - # need to ensure that each doctree has an independent copy. - doctree.settings = doctree.settings.copy() - # store time of reading, for outdated files detection # (Some filesystems have coarse timestamp resolution; # therefore time.time() can be older than filesystem's timestamp. @@ -499,6 +494,10 @@ def write_doctree(self, docname: str, doctree: nodes.document) -> None: # make it picklable doctree.reporter = None doctree.transformer = None + + # Create a copy of settings object before modification because it is + # shared with other documents. + doctree.settings = doctree.settings.copy() doctree.settings.warning_stream = None doctree.settings.env = None doctree.settings.record_dependencies = None