diff --git a/sphinx/environment.py b/sphinx/environment.py index bc12afacc..e07b5e1c8 100644 --- a/sphinx/environment.py +++ b/sphinx/environment.py @@ -14,6 +14,7 @@ import os import sys import time import types +import bisect import codecs import imghdr import string @@ -1800,7 +1801,8 @@ class BuildEnvironment: except NoUri: pass else: - entry[0].append((main, uri)) + # maintain links in sorted/deterministic order + bisect.insort(entry[0], (main, uri)) for fn, entries in iteritems(self.indexentries): # new entry types must be listed in directives/other.py! @@ -1838,8 +1840,10 @@ class BuildEnvironment: def keyfunc(entry, lcletters=string.ascii_lowercase + '_'): lckey = unicodedata.normalize('NFD', entry[0].lower()) if lckey[0:1] in lcletters: - return chr(127) + lckey - return lckey + lckey = chr(127) + lckey + # ensure a determinstic order *within* letters by also sorting on + # the entry itself + return (lckey, entry[0]) newlist = sorted(new.items(), key=keyfunc) if group_entries: