diff options
author | Georg Brandl <georg@python.org> | 2012-11-01 17:58:47 +0100 |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2012-11-01 17:58:47 +0100 |
commit | 1e58431a1f3e38c3681ea5befc7480b6c4794ec2 (patch) | |
tree | d7280ea67ee3d405c745620d414d03429ed5abbe | |
parent | a062c0638f6edc5a6e42dd96e2d3619252a40fab (diff) | |
download | sphinx-1e58431a1f3e38c3681ea5befc7480b6c4794ec2.tar.gz |
Fix intersphinx dictionary ordering confusion differently, as proposed by Jon.
-rw-r--r-- | sphinx/ext/intersphinx.py | 19 |
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): |