diff --git a/docs/configuration.rst b/docs/configuration.rst index 955f62e2..4f253cd8 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -135,7 +135,7 @@ Top level keys ``towncrier check`` will fail if there are any news fragment files that have invalid filenames, except for those in the list. ``towncrier build`` will likewise fail, but only if this list has been configured (set to an empty list if there are no files to ignore). - Some filenames such as ``.gitignore`` and ``README`` are automatically ignored. However, if a custom template is stored in the news fragment directory, you should add it to this list. + Some filenames such as .gitignore, README.rst. README.md, and the template file, are automatically ignored. ``None`` by default. diff --git a/src/towncrier/_builder.py b/src/towncrier/_builder.py index 62a7d3f3..4192942a 100644 --- a/src/towncrier/_builder.py +++ b/src/towncrier/_builder.py @@ -115,6 +115,11 @@ def find_fragments( If strict, raise ClickException if any fragments have an invalid name. """ ignored_files = {".gitignore", ".keep", "readme", "readme.md", "readme.rst"} + if isinstance(config.template, str): + # Template can be a tuple of (package_name, resource_name). + # + # See https://github.com/twisted/towncrier/issues/634 + ignored_files.add(config.template) if config.ignore: ignored_files.update(filename.lower() for filename in config.ignore) diff --git a/src/towncrier/newsfragments/632.bugfix.rst b/src/towncrier/newsfragments/632.bugfix.rst new file mode 100644 index 00000000..ea6b68ca --- /dev/null +++ b/src/towncrier/newsfragments/632.bugfix.rst @@ -0,0 +1 @@ +When the template file is stored in the same directory with the news fragments, it is automatically ignored when checking for valid fragment file names. diff --git a/src/towncrier/test/test_build.py b/src/towncrier/test/test_build.py index c14fd582..aa989fd2 100644 --- a/src/towncrier/test/test_build.py +++ b/src/towncrier/test/test_build.py @@ -1631,6 +1631,29 @@ def test_invalid_fragment_name(self, runner): self.assertEqual(1, result.exit_code, result.output) self.assertIn("Invalid news fragment name: feature.124", result.output) + @with_project( + config=""" + [tool.towncrier] + package = "foo" + template = "foo/newsfragments/template.jinja" + """ + ) + def test_ignored_template_string(self, runner): + """ + Files used in `template` are automatically ignored. + """ + with open("foo/newsfragments/123.feature", "w") as f: + f.write("This has valid filename (control case)") + with open("foo/newsfragments/template.jinja", "w") as f: + f.write("Template file should be automatically ignored") + with open("foo/newsfragments/.gitignore", "w") as f: + f.write("gitignore is automatically ignored") + + result = runner.invoke( + _main, ["--draft", "--date", "01-01-2001", "--version", "1.0.0"] + ) + self.assertEqual(0, result.exit_code, result.output) + @with_project() def test_no_ignore_configured(self, runner): """