From d615eff08ed93d114c9fffbdbd16858521d51fb6 Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Sat, 29 Jun 2019 22:05:25 +0900 Subject: [PATCH] Fix #6531: Failed to load last environment object when extension added --- CHANGES | 1 + sphinx/environment/__init__.py | 7 ++----- tests/test_environment.py | 23 +++++++++++++++++++++++ 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index 7fe119d63..b264164db 100644 --- a/CHANGES +++ b/CHANGES @@ -48,6 +48,7 @@ Bugs fixed * #6507: autosummary: crashes without no autosummary_generate setting * #6511: LaTeX: autonumbered list can not be customized in LaTeX since Sphinx 1.8.0 (refs: #6533) +* #6531: Failed to load last environment object when extension added Testing -------- diff --git a/sphinx/environment/__init__.py b/sphinx/environment/__init__.py index af3b6cf1f..0fa966658 100644 --- a/sphinx/environment/__init__.py +++ b/sphinx/environment/__init__.py @@ -237,6 +237,8 @@ class BuildEnvironment: self.config_status = CONFIG_OK if self.config is None: self.config_status = CONFIG_NEW + elif self.config.extensions != config.extensions: + self.config_status = CONFIG_EXTENSIONS_CHANGED else: # check if a config value was changed that affects how # doctrees are read @@ -245,11 +247,6 @@ class BuildEnvironment: self.config_status = CONFIG_CHANGED break - # this value is not covered by the above loop because it is handled - # specially by the config class - if self.config.extensions != config.extensions: - self.config_status = CONFIG_EXTENSIONS_CHANGED - self.config = config def _update_settings(self, config): diff --git a/tests/test_environment.py b/tests/test_environment.py index 15562536f..1c6b49e64 100644 --- a/tests/test_environment.py +++ b/tests/test_environment.py @@ -11,9 +11,32 @@ import pytest from sphinx.builders.html import StandaloneHTMLBuilder from sphinx.builders.latex import LaTeXBuilder +from sphinx.environment import CONFIG_OK, CONFIG_CHANGED, CONFIG_EXTENSIONS_CHANGED, CONFIG_NEW from sphinx.testing.comparer import PathComparer +@pytest.mark.sphinx('dummy', testroot='basic') +def test_config_status(make_app, app_params): + args, kwargs = app_params + + # clean build + app1 = make_app(*args, freshenv=True, **kwargs) + assert app1.env.config_status == CONFIG_NEW + app1.build() + + # incremental build (no config changed) + app2 = make_app(*args, **kwargs) + assert app2.env.config_status == CONFIG_OK + + # incremental build (config entry changed) + app3 = make_app(*args, confoverrides={'master_doc': 'content'}, **kwargs) + assert app3.env.config_status == CONFIG_CHANGED + + # incremental build (extension changed) + app4 = make_app(*args, confoverrides={'extensions': ['sphinx.ext.autodoc']}, **kwargs) + assert app4.env.config_status == CONFIG_EXTENSIONS_CHANGED + + @pytest.mark.sphinx('dummy') def test_images(app): app.build()