From 5fde902f82ecc3f0817fe928b4ebd0a0332a7248 Mon Sep 17 00:00:00 2001 From: Andrey Golovizin Date: Mon, 28 Sep 2015 22:29:46 +0200 Subject: [PATCH] Fix relative paths in intersphinx links --- sphinx/ext/intersphinx.py | 2 +- tests/test_ext_intersphinx.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/sphinx/ext/intersphinx.py b/sphinx/ext/intersphinx.py index a2bb9401d..7b3c83939 100644 --- a/sphinx/ext/intersphinx.py +++ b/sphinx/ext/intersphinx.py @@ -257,7 +257,7 @@ def missing_reference(app, env, node, contnode): proj, version, uri, dispname = inventory[objtype][target] if '://' not in uri and node.get('refdoc'): # get correct path in case of subdirectories - uri = path.join(relative_path(node['refdoc'], env.srcdir), uri) + uri = path.join(relative_path(node['refdoc'], '.'), uri) newnode = nodes.reference('', '', internal=False, refuri=uri, reftitle=_('(in %s v%s)') % (proj, version)) if node.get('refexplicit'): diff --git a/tests/test_ext_intersphinx.py b/tests/test_ext_intersphinx.py index 427bc87db..74ffb0dfb 100644 --- a/tests/test_ext_intersphinx.py +++ b/tests/test_ext_intersphinx.py @@ -86,6 +86,8 @@ def test_missing_reference(tempdir, app, status, warning): app.config.intersphinx_mapping = { 'https://docs.python.org/': inv_file, 'py3k': ('https://docs.python.org/py3k/', inv_file), + 'py3krel': ('py3k', inv_file), # relative path + 'py3krelparent': ('../../py3k', inv_file), # relative path, parent dir } app.config.intersphinx_cache_limit = 0 @@ -153,6 +155,19 @@ def test_missing_reference(tempdir, app, status, warning): assert rn is None assert contnode[0].astext() == 'py3k:unknown' + # check relative paths + rn = reference_check('py', 'mod', 'py3krel:module1', 'foo') + assert rn['refuri'] == 'py3k/foo.html#module-module1' + + rn = reference_check('py', 'mod', 'py3krelparent:module1', 'foo') + assert rn['refuri'] == '../../py3k/foo.html#module-module1' + + rn = reference_check('py', 'mod', 'py3krel:module1', 'foo', refdoc='sub/dir/test') + assert rn['refuri'] == '../../py3k/foo.html#module-module1' + + rn = reference_check('py', 'mod', 'py3krelparent:module1', 'foo', refdoc='sub/dir/test') + assert rn['refuri'] == '../../../../py3k/foo.html#module-module1' + @with_app() @with_tempdir