Merged in bsipocz/sphinx (pull request #275)

Adding the option of multiple inv for the same name & uri
This commit is contained in:
Takayuki Shimizukawa 2014-08-23 11:50:18 +09:00
commit aa744dda97
2 changed files with 31 additions and 13 deletions

View File

@ -102,6 +102,18 @@ linking:
``http://docs.python.org/3.2``. It is up to you to update the inventory file
as new objects are added to the Python documentation.
.. versionadded:: 1.3
Alternative files can be specified for each inventory. One can give a
tuple for the second inventory tuple item as shown in the following
example. This will read the inventory iterating through the (second)
tuple items until the first successful fetch. The primary use case for
this to specify mirror sites for server downtime of the primary
inventory::
intersphinx_mapping = {'python': ('http://docs.python.org/3.2',
(None, 'python-inv.txt'))}
.. confval:: intersphinx_cache_limit
The maximum number of days to cache remote inventories. The default is

View File

@ -179,19 +179,25 @@ def load_mappings(app):
# we can safely assume that the uri<->inv mapping is not changed
# during partial rebuilds since a changed intersphinx_mapping
# setting will cause a full environment reread
if not inv:
inv = posixpath.join(uri, INVENTORY_FILENAME)
# decide whether the inventory must be read: always read local
# files; remote ones only if the cache time is expired
if '://' not in inv or uri not in cache \
or cache[uri][1] < cache_time:
app.info('loading intersphinx inventory from %s...' % inv)
invdata = fetch_inventory(app, uri, inv)
if invdata:
cache[uri] = (name, now, invdata)
else:
cache.pop(uri, None)
update = True
if not isinstance(inv, tuple):
invs = (inv, )
else:
invs = inv
for inv in invs:
if not inv:
inv = posixpath.join(uri, INVENTORY_FILENAME)
# decide whether the inventory must be read: always read local
# files; remote ones only if the cache time is expired
if '://' not in inv or uri not in cache \
or cache[uri][1] < cache_time:
app.info('loading intersphinx inventory from %s...' % inv)
invdata = fetch_inventory(app, uri, inv)
if invdata:
cache[uri] = (name, now, invdata)
update = True
break
if update:
env.intersphinx_inventory = {}
env.intersphinx_named_inventory = {}