mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Ensure genindex output is deterministic.
See also <https://github.com/sphinx-doc/sphinx/pull/1694> Signed-off-by: Chris Lamb <chris@chris-lamb.co.uk>
This commit is contained in:
parent
018c3b6532
commit
20546b17c0
@ -14,6 +14,7 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import types
|
import types
|
||||||
|
import bisect
|
||||||
import codecs
|
import codecs
|
||||||
import imghdr
|
import imghdr
|
||||||
import string
|
import string
|
||||||
@ -1800,7 +1801,8 @@ class BuildEnvironment:
|
|||||||
except NoUri:
|
except NoUri:
|
||||||
pass
|
pass
|
||||||
else:
|
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):
|
for fn, entries in iteritems(self.indexentries):
|
||||||
# new entry types must be listed in directives/other.py!
|
# new entry types must be listed in directives/other.py!
|
||||||
@ -1838,8 +1840,10 @@ class BuildEnvironment:
|
|||||||
def keyfunc(entry, lcletters=string.ascii_lowercase + '_'):
|
def keyfunc(entry, lcletters=string.ascii_lowercase + '_'):
|
||||||
lckey = unicodedata.normalize('NFD', entry[0].lower())
|
lckey = unicodedata.normalize('NFD', entry[0].lower())
|
||||||
if lckey[0:1] in lcletters:
|
if lckey[0:1] in lcletters:
|
||||||
return chr(127) + lckey
|
lckey = chr(127) + lckey
|
||||||
return lckey
|
# ensure a determinstic order *within* letters by also sorting on
|
||||||
|
# the entry itself
|
||||||
|
return (lckey, entry[0])
|
||||||
newlist = sorted(new.items(), key=keyfunc)
|
newlist = sorted(new.items(), key=keyfunc)
|
||||||
|
|
||||||
if group_entries:
|
if group_entries:
|
||||||
|
Loading…
Reference in New Issue
Block a user