From 1539b1adbcd62a22af018748bc380266a544e7ca Mon Sep 17 00:00:00 2001 From: James Addison Date: Thu, 25 Jan 2024 11:49:08 +0000 Subject: [PATCH 1/3] config: copyright correction logic: handle year-to-year ranges that do not include trailing authorship information --- sphinx/config.py | 2 +- tests/test_config/test_config.py | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/sphinx/config.py b/sphinx/config.py index 5675cfba370..22b98a83414 100644 --- a/sphinx/config.py +++ b/sphinx/config.py @@ -610,7 +610,7 @@ def _substitute_copyright_year(copyright_line: str, replace_year: str) -> str: if copyright_line[4] != '-': return copyright_line - if copyright_line[5:9].isdigit() and copyright_line[9] in ' ,': + if copyright_line[5:9].isdigit() and copyright_line[9:10] in {'', ' ', ','}: return copyright_line[:5] + replace_year + copyright_line[9:] return copyright_line diff --git a/tests/test_config/test_config.py b/tests/test_config/test_config.py index 317a50bf356..499b350ec0a 100644 --- a/tests/test_config/test_config.py +++ b/tests/test_config/test_config.py @@ -8,7 +8,13 @@ import sphinx from sphinx.builders.gettext import _gettext_compact_validator -from sphinx.config import ENUM, Config, _Opt, check_confval_types +from sphinx.config import ( + ENUM, + Config, + _Opt, + check_confval_types, + correct_copyright_year, +) from sphinx.deprecation import RemovedInSphinx90Warning from sphinx.errors import ConfigError, ExtensionError, VersionRequirementError @@ -556,6 +562,17 @@ def test_multi_line_copyright(source_date_year, app, monkeypatch): ) in content +@pytest.mark.parametrize('copyright_line', [ + '1970', + '1970-1990', # https://github.com/sphinx-doc/sphinx/issues/11913 + '1970-1990 Alice', +]) +def test_correct_copyright_year(copyright_line, source_date_year): + config = Config({}, {'copyright': copyright_line}) + correct_copyright_year(_app=None, config=config) + assert str(source_date_year or 1970) in config['copyright'] + + def test_gettext_compact_command_line_true(): config = Config({}, {'gettext_compact': '1'}) config.add('gettext_compact', True, '', {bool, str}) From 2d4e08049af8a9dda25f380b246763c70feee4c1 Mon Sep 17 00:00:00 2001 From: James Addison Date: Thu, 25 Jan 2024 12:02:22 +0000 Subject: [PATCH 2/3] tests: adjust copyright correction test coverage --- tests/test_config/test_config.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/test_config/test_config.py b/tests/test_config/test_config.py index 499b350ec0a..d979d4f7204 100644 --- a/tests/test_config/test_config.py +++ b/tests/test_config/test_config.py @@ -563,14 +563,20 @@ def test_multi_line_copyright(source_date_year, app, monkeypatch): @pytest.mark.parametrize('copyright_line', [ - '1970', + # '1970', '1970-1990', # https://github.com/sphinx-doc/sphinx/issues/11913 '1970-1990 Alice', ]) def test_correct_copyright_year(copyright_line, source_date_year): config = Config({}, {'copyright': copyright_line}) correct_copyright_year(_app=None, config=config) - assert str(source_date_year or 1970) in config['copyright'] + corrected_copyright_line = config['copyright'] + + assert '1970' in corrected_copyright_line + if source_date_year is None: + assert corrected_copyright_line == copyright_line + else: + assert str(source_date_year) in corrected_copyright_line def test_gettext_compact_command_line_true(): From 7e3f50f28050d5fbdb580f143973a706be7ef90a Mon Sep 17 00:00:00 2001 From: James Addison Date: Fri, 16 Feb 2024 16:58:13 +0000 Subject: [PATCH 3/3] tests: config: enable 1970-copyright test case --- tests/test_config/test_config.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/tests/test_config/test_config.py b/tests/test_config/test_config.py index d979d4f7204..ee305274ecf 100644 --- a/tests/test_config/test_config.py +++ b/tests/test_config/test_config.py @@ -562,21 +562,22 @@ def test_multi_line_copyright(source_date_year, app, monkeypatch): ) in content -@pytest.mark.parametrize('copyright_line', [ - # '1970', - '1970-1990', # https://github.com/sphinx-doc/sphinx/issues/11913 - '1970-1990 Alice', +@pytest.mark.parametrize(('conf_copyright', 'expected_copyright'), [ + ('1970', '{current_year}'), + # https://github.com/sphinx-doc/sphinx/issues/11913 + ('1970-1990', '1970-{current_year}'), + ('1970-1990 Alice', '1970-{current_year} Alice'), ]) -def test_correct_copyright_year(copyright_line, source_date_year): - config = Config({}, {'copyright': copyright_line}) +def test_correct_copyright_year(conf_copyright, expected_copyright, source_date_year): + config = Config({}, {'copyright': conf_copyright}) correct_copyright_year(_app=None, config=config) - corrected_copyright_line = config['copyright'] + actual_copyright = config['copyright'] - assert '1970' in corrected_copyright_line if source_date_year is None: - assert corrected_copyright_line == copyright_line + expected_copyright = conf_copyright else: - assert str(source_date_year) in corrected_copyright_line + expected_copyright = expected_copyright.format(current_year=source_date_year) + assert actual_copyright == expected_copyright def test_gettext_compact_command_line_true():