Skip to content

Commit d374a1c

Browse files
committed
Use pathlib version of relative_path
1 parent 230ccf2 commit d374a1c

File tree

5 files changed

+18
-22
lines changed

5 files changed

+18
-22
lines changed

sphinx/builders/html/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
from docutils.core import Publisher
2121
from docutils.frontend import OptionParser
2222
from docutils.io import DocTreeInput, StringOutput
23-
from docutils.utils import relative_path
2423

2524
from sphinx import __display_version__, package_dir
2625
from sphinx import version_info as sphinx_version
@@ -56,6 +55,7 @@
5655
from sphinx.util.osutil import (
5756
SEP,
5857
_last_modified_time,
58+
_relative_path,
5959
copyfile,
6060
ensuredir,
6161
relative_uri,
@@ -795,7 +795,7 @@ def copy_image_files(self) -> None:
795795

796796
def copy_download_files(self) -> None:
797797
def to_relpath(f: str) -> str:
798-
return relative_path(self.srcdir, f)
798+
return _relative_path(Path(f), self.srcdir).as_posix()
799799

800800
# copy downloadable files
801801
if self.env.dlfiles:

sphinx/environment/collectors/asset.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,18 @@
55
import os
66
import os.path
77
from glob import glob
8+
from pathlib import Path
89
from typing import TYPE_CHECKING
910

1011
from docutils import nodes
11-
from docutils.utils import relative_path
1212

1313
from sphinx import addnodes
1414
from sphinx.environment.collectors import EnvironmentCollector
1515
from sphinx.locale import __
1616
from sphinx.util import logging
1717
from sphinx.util.i18n import get_image_filename_for_language, search_image_for_language
1818
from sphinx.util.images import guess_mimetype
19+
from sphinx.util.osutil import _relative_path
1920

2021
if TYPE_CHECKING:
2122
from docutils.nodes import Node
@@ -110,14 +111,14 @@ def collect_candidates(
110111
) -> None:
111112
globbed: dict[str, list[str]] = {}
112113
for filename in glob(imgpath):
113-
new_imgpath = relative_path(os.path.join(env.srcdir, 'dummy'), filename)
114+
new_imgpath = _relative_path(Path(filename), env.srcdir)
114115
try:
115116
mimetype = guess_mimetype(filename)
116117
if mimetype is None:
117118
basename, suffix = os.path.splitext(filename)
118119
mimetype = 'image/x-' + suffix[1:]
119120
if mimetype not in candidates:
120-
globbed.setdefault(mimetype, []).append(new_imgpath)
121+
globbed.setdefault(mimetype, []).append(new_imgpath.as_posix())
121122
except OSError as err:
122123
logger.warning(
123124
__('image file %s not readable: %s'),

sphinx/environment/collectors/dependencies.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@
22

33
from __future__ import annotations
44

5-
import os
6-
import os.path
5+
from pathlib import Path
76
from typing import TYPE_CHECKING
87

9-
from docutils.utils import relative_path
10-
118
from sphinx.environment.collectors import EnvironmentCollector
12-
from sphinx.util.osutil import fs_encoding
9+
from sphinx.util.osutil import _relative_path, fs_encoding
1310

1411
if TYPE_CHECKING:
1512
from docutils import nodes
@@ -38,8 +35,7 @@ def merge_other(
3835

3936
def process_doc(self, app: Sphinx, doctree: nodes.document) -> None:
4037
"""Process docutils-generated dependency info."""
41-
cwd = os.getcwd()
42-
frompath = os.path.join(os.path.normpath(app.srcdir), 'dummy')
38+
cwd = Path.cwd()
4339
deps = doctree.settings.record_dependencies
4440
if not deps:
4541
return
@@ -48,7 +44,7 @@ def process_doc(self, app: Sphinx, doctree: nodes.document) -> None:
4844
# one relative to the srcdir
4945
if isinstance(dep, bytes):
5046
dep = dep.decode(fs_encoding)
51-
relpath = relative_path(frompath, os.path.normpath(os.path.join(cwd, dep)))
47+
relpath = _relative_path(cwd / dep, app.srcdir)
5248
app.env.note_dependency(relpath)
5349

5450

sphinx/ext/intersphinx/_resolve.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22

33
from __future__ import annotations
44

5-
import posixpath
65
import re
6+
from pathlib import Path
77
from typing import TYPE_CHECKING, cast
88

99
from docutils import nodes
10-
from docutils.utils import relative_path
1110

1211
from sphinx.addnodes import pending_xref
1312
from sphinx.deprecation import _deprecation_warning
@@ -16,6 +15,7 @@
1615
from sphinx.locale import _, __
1716
from sphinx.transforms.post_transforms import ReferencesResolver
1817
from sphinx.util.docutils import CustomReSTDispatcher, SphinxRole
18+
from sphinx.util.osutil import _relative_path
1919

2020
if TYPE_CHECKING:
2121
from collections.abc import Iterable
@@ -42,7 +42,7 @@ def _create_element_from_result(
4242
proj, version, uri, dispname = data
4343
if '://' not in uri and node.get('refdoc'):
4444
# get correct path in case of subdirectories
45-
uri = posixpath.join(relative_path(node['refdoc'], '.'), uri)
45+
uri = (_relative_path(Path(), Path(node['refdoc']).parent) / uri).as_posix()
4646
if version:
4747
reftitle = _('(in %s v%s)') % (proj, version)
4848
else:

sphinx/util/fileutil.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,9 @@
77
from pathlib import Path
88
from typing import TYPE_CHECKING, Any
99

10-
from docutils.utils import relative_path
11-
1210
from sphinx.locale import __
1311
from sphinx.util import logging
14-
from sphinx.util.osutil import copyfile, ensuredir
12+
from sphinx.util.osutil import _relative_path, copyfile, ensuredir
1513

1614
if TYPE_CHECKING:
1715
from collections.abc import Callable
@@ -125,7 +123,8 @@ def copy_asset(
125123
:param onerror: The error handler.
126124
:param bool force: Overwrite the destination file even if it exists.
127125
"""
128-
if not os.path.exists(source):
126+
source = Path(source)
127+
if not source.exists():
129128
return
130129

131130
if renderer is None:
@@ -134,14 +133,14 @@ def copy_asset(
134133
renderer = SphinxRenderer()
135134

136135
ensuredir(destination)
137-
if os.path.isfile(source):
136+
if source.is_file():
138137
copy_asset_file(
139138
source, destination, context=context, renderer=renderer, force=force
140139
)
141140
return
142141

143142
for root, dirs, files in os.walk(source, followlinks=True):
144-
reldir = relative_path(source, root)
143+
reldir = _relative_path(Path(root), source).as_posix()
145144
for dir in dirs.copy():
146145
if excluded(posixpath.join(reldir, dir)):
147146
dirs.remove(dir)

0 commit comments

Comments
 (0)