logging: always show source locations as absolute paths (#10460)

This commit is contained in:
Doug Hellmann 2022-06-16 14:51:49 -04:00 committed by GitHub
parent 6ef22d2613
commit 9c9a52d92b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 1 deletions

View File

@ -12,6 +12,7 @@ from docutils.utils import get_source_line
from sphinx.errors import SphinxWarning from sphinx.errors import SphinxWarning
from sphinx.util.console import colorize from sphinx.util.console import colorize
from sphinx.util.osutil import abspath
if TYPE_CHECKING: if TYPE_CHECKING:
from sphinx.application import Sphinx from sphinx.application import Sphinx
@ -514,6 +515,8 @@ class WarningLogRecordTranslator(SphinxLogRecordTranslator):
def get_node_location(node: Node) -> Optional[str]: def get_node_location(node: Node) -> Optional[str]:
(source, line) = get_source_line(node) (source, line) = get_source_line(node)
if source:
source = abspath(source)
if source and line: if source and line:
return "%s:%s" % (source, line) return "%s:%s" % (source, line)
elif source: elif source:

View File

@ -2,13 +2,14 @@
import codecs import codecs
import os import os
import os.path
import pytest import pytest
from docutils import nodes from docutils import nodes
from sphinx.errors import SphinxWarning from sphinx.errors import SphinxWarning
from sphinx.testing.util import strip_escseq from sphinx.testing.util import strip_escseq
from sphinx.util import logging from sphinx.util import logging, osutil
from sphinx.util.console import colorize from sphinx.util.console import colorize
from sphinx.util.logging import is_suppressed_warning, prefixed_warnings from sphinx.util.logging import is_suppressed_warning, prefixed_warnings
from sphinx.util.parallel import ParallelTasks from sphinx.util.parallel import ParallelTasks
@ -379,3 +380,18 @@ def test_prefixed_warnings(app, status, warning):
assert 'WARNING: Another PREFIX: message3' in warning.getvalue() assert 'WARNING: Another PREFIX: message3' in warning.getvalue()
assert 'WARNING: PREFIX: message4' in warning.getvalue() assert 'WARNING: PREFIX: message4' in warning.getvalue()
assert 'WARNING: message5' in warning.getvalue() assert 'WARNING: message5' in warning.getvalue()
def test_get_node_location_abspath():
# Ensure that node locations are reported as an absolute path,
# even if the source attribute is a relative path.
relative_filename = os.path.join('relative', 'path.txt')
absolute_filename = osutil.abspath(relative_filename)
n = nodes.Node()
n.source = relative_filename
location = logging.get_node_location(n)
assert location == absolute_filename + ':'