summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2012-11-01 17:58:47 +0100
committerGeorg Brandl <georg@python.org>2012-11-01 17:58:47 +0100
commit1e58431a1f3e38c3681ea5befc7480b6c4794ec2 (patch)
treed7280ea67ee3d405c745620d414d03429ed5abbe
parenta062c0638f6edc5a6e42dd96e2d3619252a40fab (diff)
downloadsphinx-1e58431a1f3e38c3681ea5befc7480b6c4794ec2.tar.gz
Fix intersphinx dictionary ordering confusion differently, as proposed by Jon.
-rw-r--r--sphinx/ext/intersphinx.py19
1 files changed, 14 insertions, 5 deletions
diff --git a/sphinx/ext/intersphinx.py b/sphinx/ext/intersphinx.py
index b6eb275b..d0c812b3 100644
--- a/sphinx/ext/intersphinx.py
+++ b/sphinx/ext/intersphinx.py
@@ -188,13 +188,22 @@ def load_mappings(app):
if update:
env.intersphinx_inventory = {}
env.intersphinx_named_inventory = {}
- for name, _, invdata in cache.itervalues():
+ # Duplicate values in different inventories will shadow each
+ # other; which one will override which can vary between builds
+ # since they are specified using an unordered dict. To make
+ # it more consistent, we sort the named inventories and then
+ # add the unnamed inventories last. This means that the
+ # unnamed inventories will shadow the named ones but the named
+ # ones can still be accessed when the name is specified.
+ cached_vals = list(cache.itervalues())
+ named_vals = sorted(v for v in cached_vals if v[0])
+ unnamed_vals = [v for v in cached_vals if not v[0]]
+ for name, _, invdata in named_vals + unnamed_vals:
if name:
env.intersphinx_named_inventory[name] = invdata
- else:
- for type, objects in invdata.iteritems():
- env.intersphinx_inventory.setdefault(
- type, {}).update(objects)
+ for type, objects in invdata.iteritems():
+ env.intersphinx_inventory.setdefault(
+ type, {}).update(objects)
def missing_reference(app, env, node, contnode):