Merge lp:~mitya57/ubuntu/raring/sphinx/fix-ftbfs into lp:ubuntu/raring/sphinx
- Raring (13.04)
- fix-ftbfs
- Merge into raring
Proposed by
Dmitry Shachnev
Status: | Merged | ||||
---|---|---|---|---|---|
Merged at revision: | 38 | ||||
Proposed branch: | lp:~mitya57/ubuntu/raring/sphinx/fix-ftbfs | ||||
Merge into: | lp:ubuntu/raring/sphinx | ||||
Diff against target: |
600 lines (+105/-386) 8 files modified
.pc/applied-patches (+0/-1) .pc/fix_manpages_generation_with_new_docutils.diff/sphinx/writers/manpage.py (+0/-345) debian/changelog (+9/-0) debian/control (+2/-2) debian/patches/fix_manpages_generation_with_new_docutils.diff (+0/-33) debian/patches/series (+1/-0) debian/patches/support_python_3.3.diff (+87/-0) sphinx/writers/manpage.py (+6/-5) |
||||
To merge this branch: | bzr merge lp:~mitya57/ubuntu/raring/sphinx/fix-ftbfs | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Ubuntu branches | Pending | ||
Review via email: mp+130856@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
- 38. By Dmitry Shachnev
-
Build-depend on python3-all instead of python3.
- 39. By Dmitry Shachnev
-
* debian/
patches/ support_ python_ 3.3:
Fix various testsuite failures with Python 3.3 (LP: #1070336).
* Update Homepage field. - 40. By Dmitry Shachnev
-
Fix patch format.
- 41. By Dmitry Shachnev
-
No-change merge from lp:ubuntu/sphinx.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file '.pc/applied-patches' |
2 | --- .pc/applied-patches 2012-10-22 20:20:35 +0000 |
3 | +++ .pc/applied-patches 2012-11-01 17:56:20 +0000 |
4 | @@ -8,4 +8,3 @@ |
5 | fix_nepali_po.diff |
6 | pygments_byte_strings.diff |
7 | fix_shorthandoff.diff |
8 | -fix_manpages_generation_with_new_docutils.diff |
9 | |
10 | === removed directory '.pc/fix_manpages_generation_with_new_docutils.diff' |
11 | === removed directory '.pc/fix_manpages_generation_with_new_docutils.diff/sphinx' |
12 | === removed directory '.pc/fix_manpages_generation_with_new_docutils.diff/sphinx/writers' |
13 | === removed file '.pc/fix_manpages_generation_with_new_docutils.diff/sphinx/writers/manpage.py' |
14 | --- .pc/fix_manpages_generation_with_new_docutils.diff/sphinx/writers/manpage.py 2012-10-22 20:20:35 +0000 |
15 | +++ .pc/fix_manpages_generation_with_new_docutils.diff/sphinx/writers/manpage.py 1970-01-01 00:00:00 +0000 |
16 | @@ -1,345 +0,0 @@ |
17 | -# -*- coding: utf-8 -*- |
18 | -""" |
19 | - sphinx.writers.manpage |
20 | - ~~~~~~~~~~~~~~~~~~~~~~ |
21 | - |
22 | - Manual page writer, extended for Sphinx custom nodes. |
23 | - |
24 | - :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. |
25 | - :license: BSD, see LICENSE for details. |
26 | -""" |
27 | - |
28 | -from docutils import nodes |
29 | -try: |
30 | - from docutils.writers.manpage import MACRO_DEF, Writer, \ |
31 | - Translator as BaseTranslator |
32 | - has_manpage_writer = True |
33 | -except ImportError: |
34 | - # define the classes in any case, sphinx.application needs it |
35 | - Writer = BaseTranslator = object |
36 | - has_manpage_writer = False |
37 | - |
38 | -from sphinx import addnodes |
39 | -from sphinx.locale import admonitionlabels, versionlabels, _ |
40 | -from sphinx.util.osutil import ustrftime |
41 | - |
42 | - |
43 | -class ManualPageWriter(Writer): |
44 | - def __init__(self, builder): |
45 | - Writer.__init__(self) |
46 | - self.builder = builder |
47 | - |
48 | - def translate(self): |
49 | - visitor = ManualPageTranslator(self.builder, self.document) |
50 | - self.visitor = visitor |
51 | - self.document.walkabout(visitor) |
52 | - self.output = visitor.astext() |
53 | - |
54 | - |
55 | -class ManualPageTranslator(BaseTranslator): |
56 | - """ |
57 | - Custom translator. |
58 | - """ |
59 | - |
60 | - def __init__(self, builder, *args, **kwds): |
61 | - BaseTranslator.__init__(self, *args, **kwds) |
62 | - self.builder = builder |
63 | - |
64 | - self.in_productionlist = 0 |
65 | - |
66 | - # first title is the manpage title |
67 | - self.section_level = -1 |
68 | - |
69 | - # docinfo set by man_pages config value |
70 | - self._docinfo['title'] = self.document.settings.title |
71 | - self._docinfo['subtitle'] = self.document.settings.subtitle |
72 | - if self.document.settings.authors: |
73 | - # don't set it if no author given |
74 | - self._docinfo['author'] = self.document.settings.authors |
75 | - self._docinfo['manual_section'] = self.document.settings.section |
76 | - |
77 | - # docinfo set by other config values |
78 | - self._docinfo['title_upper'] = self._docinfo['title'].upper() |
79 | - if builder.config.today: |
80 | - self._docinfo['date'] = builder.config.today |
81 | - else: |
82 | - self._docinfo['date'] = ustrftime(builder.config.today_fmt |
83 | - or _('%B %d, %Y')) |
84 | - self._docinfo['copyright'] = builder.config.copyright |
85 | - self._docinfo['version'] = builder.config.version |
86 | - self._docinfo['manual_group'] = builder.config.project |
87 | - |
88 | - # since self.append_header() is never called, need to do this here |
89 | - self.body.append(MACRO_DEF) |
90 | - |
91 | - # overwritten -- added quotes around all .TH arguments |
92 | - def header(self): |
93 | - tmpl = (".TH \"%(title_upper)s\" \"%(manual_section)s\"" |
94 | - " \"%(date)s\" \"%(version)s\" \"%(manual_group)s\"\n" |
95 | - ".SH NAME\n" |
96 | - "%(title)s \- %(subtitle)s\n") |
97 | - return tmpl % self._docinfo |
98 | - |
99 | - def visit_start_of_file(self, node): |
100 | - pass |
101 | - def depart_start_of_file(self, node): |
102 | - pass |
103 | - |
104 | - def visit_desc(self, node): |
105 | - self.visit_definition_list(node) |
106 | - def depart_desc(self, node): |
107 | - self.depart_definition_list(node) |
108 | - |
109 | - def visit_desc_signature(self, node): |
110 | - self.visit_definition_list_item(node) |
111 | - self.visit_term(node) |
112 | - def depart_desc_signature(self, node): |
113 | - self.depart_term(node) |
114 | - |
115 | - def visit_desc_addname(self, node): |
116 | - pass |
117 | - def depart_desc_addname(self, node): |
118 | - pass |
119 | - |
120 | - def visit_desc_type(self, node): |
121 | - pass |
122 | - def depart_desc_type(self, node): |
123 | - pass |
124 | - |
125 | - def visit_desc_returns(self, node): |
126 | - self.body.append(' -> ') |
127 | - def depart_desc_returns(self, node): |
128 | - pass |
129 | - |
130 | - def visit_desc_name(self, node): |
131 | - pass |
132 | - def depart_desc_name(self, node): |
133 | - pass |
134 | - |
135 | - def visit_desc_parameterlist(self, node): |
136 | - self.body.append('(') |
137 | - self.first_param = 1 |
138 | - def depart_desc_parameterlist(self, node): |
139 | - self.body.append(')') |
140 | - |
141 | - def visit_desc_parameter(self, node): |
142 | - if not self.first_param: |
143 | - self.body.append(', ') |
144 | - else: |
145 | - self.first_param = 0 |
146 | - def depart_desc_parameter(self, node): |
147 | - pass |
148 | - |
149 | - def visit_desc_optional(self, node): |
150 | - self.body.append('[') |
151 | - def depart_desc_optional(self, node): |
152 | - self.body.append(']') |
153 | - |
154 | - def visit_desc_annotation(self, node): |
155 | - pass |
156 | - def depart_desc_annotation(self, node): |
157 | - pass |
158 | - |
159 | - def visit_desc_content(self, node): |
160 | - self.visit_definition(node) |
161 | - def depart_desc_content(self, node): |
162 | - self.depart_definition(node) |
163 | - |
164 | - def visit_refcount(self, node): |
165 | - self.body.append(self.defs['emphasis'][0]) |
166 | - def depart_refcount(self, node): |
167 | - self.body.append(self.defs['emphasis'][1]) |
168 | - |
169 | - def visit_versionmodified(self, node): |
170 | - self.visit_paragraph(node) |
171 | - text = versionlabels[node['type']] % node['version'] |
172 | - if len(node): |
173 | - text += ': ' |
174 | - else: |
175 | - text += '.' |
176 | - self.body.append(text) |
177 | - def depart_versionmodified(self, node): |
178 | - self.depart_paragraph(node) |
179 | - |
180 | - def visit_termsep(self, node): |
181 | - self.body.append(', ') |
182 | - raise nodes.SkipNode |
183 | - |
184 | - # overwritten -- we don't want source comments to show up |
185 | - def visit_comment(self, node): |
186 | - raise nodes.SkipNode |
187 | - |
188 | - # overwritten -- added ensure_eol() |
189 | - def visit_footnote(self, node): |
190 | - self.ensure_eol() |
191 | - BaseTranslator.visit_footnote(self, node) |
192 | - |
193 | - # overwritten -- handle footnotes rubric |
194 | - def visit_rubric(self, node): |
195 | - self.ensure_eol() |
196 | - if len(node.children) == 1: |
197 | - rubtitle = node.children[0].astext() |
198 | - if rubtitle in ('Footnotes', _('Footnotes')): |
199 | - self.body.append('.SH ' + self.deunicode(rubtitle).upper() + |
200 | - '\n') |
201 | - raise nodes.SkipNode |
202 | - else: |
203 | - self.body.append('.sp\n') |
204 | - def depart_rubric(self, node): |
205 | - pass |
206 | - |
207 | - def visit_seealso(self, node): |
208 | - self.visit_admonition(node) |
209 | - def depart_seealso(self, node): |
210 | - self.depart_admonition(node) |
211 | - |
212 | - # overwritten -- use our own label translations |
213 | - def visit_admonition(self, node, name=None): |
214 | - if name: |
215 | - self.body.append('.IP %s\n' % |
216 | - self.deunicode(admonitionlabels.get(name, name))) |
217 | - |
218 | - def visit_productionlist(self, node): |
219 | - self.ensure_eol() |
220 | - names = [] |
221 | - self.in_productionlist += 1 |
222 | - self.body.append('.sp\n.nf\n') |
223 | - for production in node: |
224 | - names.append(production['tokenname']) |
225 | - maxlen = max(len(name) for name in names) |
226 | - for production in node: |
227 | - if production['tokenname']: |
228 | - lastname = production['tokenname'].ljust(maxlen) |
229 | - self.body.append(self.defs['strong'][0]) |
230 | - self.body.append(self.deunicode(lastname)) |
231 | - self.body.append(self.defs['strong'][1]) |
232 | - self.body.append(' ::= ') |
233 | - else: |
234 | - self.body.append('%s ' % (' '*len(lastname))) |
235 | - production.walkabout(self) |
236 | - self.body.append('\n') |
237 | - self.body.append('\n.fi\n') |
238 | - self.in_productionlist -= 1 |
239 | - raise nodes.SkipNode |
240 | - |
241 | - def visit_production(self, node): |
242 | - pass |
243 | - def depart_production(self, node): |
244 | - pass |
245 | - |
246 | - # overwritten -- don't emit a warning for images |
247 | - def visit_image(self, node): |
248 | - if 'alt' in node.attributes: |
249 | - self.body.append(_('[image: %s]') % node['alt'] + '\n') |
250 | - self.body.append(_('[image]') + '\n') |
251 | - raise nodes.SkipNode |
252 | - |
253 | - # overwritten -- don't visit inner marked up nodes |
254 | - def visit_reference(self, node): |
255 | - self.body.append(self.defs['reference'][0]) |
256 | - self.body.append(node.astext()) |
257 | - self.body.append(self.defs['reference'][1]) |
258 | - |
259 | - uri = node.get('refuri', '') |
260 | - if uri.startswith('mailto:') or uri.startswith('http:') or \ |
261 | - uri.startswith('https:') or uri.startswith('ftp:'): |
262 | - # if configured, put the URL after the link |
263 | - if self.builder.config.man_show_urls and \ |
264 | - node.astext() != uri: |
265 | - if uri.startswith('mailto:'): |
266 | - uri = uri[7:] |
267 | - self.body.extend([ |
268 | - ' <', |
269 | - self.defs['strong'][0], uri, self.defs['strong'][1], |
270 | - '>']) |
271 | - raise nodes.SkipNode |
272 | - |
273 | - def visit_centered(self, node): |
274 | - self.ensure_eol() |
275 | - self.body.append('.sp\n.ce\n') |
276 | - def depart_centered(self, node): |
277 | - self.body.append('\n.ce 0\n') |
278 | - |
279 | - def visit_compact_paragraph(self, node): |
280 | - pass |
281 | - def depart_compact_paragraph(self, node): |
282 | - pass |
283 | - |
284 | - def visit_highlightlang(self, node): |
285 | - pass |
286 | - def depart_highlightlang(self, node): |
287 | - pass |
288 | - |
289 | - def visit_download_reference(self, node): |
290 | - pass |
291 | - def depart_download_reference(self, node): |
292 | - pass |
293 | - |
294 | - def visit_toctree(self, node): |
295 | - raise nodes.SkipNode |
296 | - |
297 | - def visit_index(self, node): |
298 | - raise nodes.SkipNode |
299 | - |
300 | - def visit_tabular_col_spec(self, node): |
301 | - raise nodes.SkipNode |
302 | - |
303 | - def visit_glossary(self, node): |
304 | - pass |
305 | - def depart_glossary(self, node): |
306 | - pass |
307 | - |
308 | - def visit_acks(self, node): |
309 | - self.ensure_eol() |
310 | - self.body.append(', '.join(n.astext() |
311 | - for n in node.children[0].children) + '.') |
312 | - self.body.append('\n') |
313 | - raise nodes.SkipNode |
314 | - |
315 | - def visit_hlist(self, node): |
316 | - self.visit_bullet_list(node) |
317 | - def depart_hlist(self, node): |
318 | - self.depart_bullet_list(node) |
319 | - |
320 | - def visit_hlistcol(self, node): |
321 | - pass |
322 | - def depart_hlistcol(self, node): |
323 | - pass |
324 | - |
325 | - def visit_literal_emphasis(self, node): |
326 | - return self.visit_emphasis(node) |
327 | - def depart_literal_emphasis(self, node): |
328 | - return self.depart_emphasis(node) |
329 | - |
330 | - def visit_abbreviation(self, node): |
331 | - pass |
332 | - def depart_abbreviation(self, node): |
333 | - pass |
334 | - |
335 | - # overwritten: handle section titles better than in 0.6 release |
336 | - def visit_title(self, node): |
337 | - if isinstance(node.parent, addnodes.seealso): |
338 | - self.body.append('.IP "') |
339 | - return |
340 | - elif isinstance(node.parent, nodes.section): |
341 | - if self.section_level == 0: |
342 | - # skip the document title |
343 | - raise nodes.SkipNode |
344 | - elif self.section_level == 1: |
345 | - self.body.append('.SH %s\n' % |
346 | - self.deunicode(node.astext().upper())) |
347 | - raise nodes.SkipNode |
348 | - return BaseTranslator.visit_title(self, node) |
349 | - def depart_title(self, node): |
350 | - if isinstance(node.parent, addnodes.seealso): |
351 | - self.body.append('"\n') |
352 | - return |
353 | - return BaseTranslator.depart_title(self, node) |
354 | - |
355 | - def visit_raw(self, node): |
356 | - if 'manpage' in node.get('format', '').split(): |
357 | - self.body.append(node.astext()) |
358 | - raise nodes.SkipNode |
359 | - |
360 | - def unknown_visit(self, node): |
361 | - raise NotImplementedError('Unknown node: ' + node.__class__.__name__) |
362 | |
363 | === modified file 'debian/changelog' |
364 | --- debian/changelog 2012-10-22 20:20:35 +0000 |
365 | +++ debian/changelog 2012-11-01 17:56:20 +0000 |
366 | @@ -1,3 +1,12 @@ |
367 | +sphinx (1.1.3+dfsg-4ubuntu5) raring; urgency=low |
368 | + |
369 | + * Build-depend on python3-all instead of python3. |
370 | + * debian/patches/support_python_3.3: |
371 | + Fix various testsuite failures with Python 3.3 (LP: #1070336). |
372 | + * Update Homepage field. |
373 | + |
374 | + -- Dmitry Shachnev <mitya57@gmail.com> Thu, 01 Nov 2012 21:39:16 +0400 |
375 | + |
376 | sphinx (1.1.3+dfsg-4ubuntu4) raring; urgency=low |
377 | |
378 | * debian/patches/fix_manpages_generation_with_new_docutils.diff: |
379 | |
380 | === modified file 'debian/control' |
381 | --- debian/control 2012-08-21 17:45:58 +0000 |
382 | +++ debian/control 2012-11-01 17:56:20 +0000 |
383 | @@ -4,9 +4,9 @@ |
384 | Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> |
385 | XSBC-Original-Maintainer: Jakub Wilk <jwilk@debian.org> |
386 | Uploaders: Debian Python Modules Team <python-modules-team@lists.alioth.debian.org> |
387 | -Homepage: http://sphinx.pocoo.org/ |
388 | +Homepage: http://sphinx-doc.org/ |
389 | Build-Depends: debhelper (>= 7) |
390 | -Build-Depends-Indep: python-all (>= 2.6.5-2~), python3 (>= 3.1.2-7~), |
391 | +Build-Depends-Indep: python-all (>= 2.6.5-2~), python3-all (>= 3.1.2-7~), |
392 | python-setuptools (>= 0.6c5-1~), python3-setuptools, |
393 | python-docutils (>= 0.7), python3-docutils (>= 0.7), |
394 | python-pygments (>= 1.2), python3-pygments (>= 1.2), |
395 | |
396 | === added file 'debian/patches/fix_manpages_generation_with_new_docutils.diff' |
397 | --- debian/patches/fix_manpages_generation_with_new_docutils.diff 1970-01-01 00:00:00 +0000 |
398 | +++ debian/patches/fix_manpages_generation_with_new_docutils.diff 2012-11-01 17:56:20 +0000 |
399 | @@ -0,0 +1,33 @@ |
400 | +Description: Fix build failure with Docutils 0.9 |
401 | +Bug: https://bitbucket.org/birkenfeld/sphinx/issue/998/docutils-010-will-break-sphinx-manpage |
402 | +Author: Toshio Kuratomi <a.badger@gmail.com> |
403 | +Last-Update: 2012-10-22 |
404 | + |
405 | +diff -up a/sphinx/writers/manpage.py b/sphinx/writers/manpage.py |
406 | +--- a/sphinx/writers/manpage.py 2011-11-01 00:38:44.000000000 -0700 |
407 | ++++ b/sphinx/writers/manpage.py 2012-08-21 12:38:33.380808202 -0700 |
408 | +@@ -72,6 +72,11 @@ class ManualPageTranslator(BaseTranslato |
409 | + # since self.append_header() is never called, need to do this here |
410 | + self.body.append(MACRO_DEF) |
411 | + |
412 | ++ # Overwrite admonition label translations with our own |
413 | ++ for label, translation in admonitionlabels.items(): |
414 | ++ self.language.labels[label] = self.deunicode(translation) |
415 | ++ |
416 | ++ |
417 | + # overwritten -- added quotes around all .TH arguments |
418 | + def header(self): |
419 | + tmpl = (".TH \"%(title_upper)s\" \"%(manual_section)s\"" |
420 | +@@ -193,12 +198,6 @@ class ManualPageTranslator(BaseTranslato |
421 | + def depart_seealso(self, node): |
422 | + self.depart_admonition(node) |
423 | + |
424 | +- # overwritten -- use our own label translations |
425 | +- def visit_admonition(self, node, name=None): |
426 | +- if name: |
427 | +- self.body.append('.IP %s\n' % |
428 | +- self.deunicode(admonitionlabels.get(name, name))) |
429 | +- |
430 | + def visit_productionlist(self, node): |
431 | + self.ensure_eol() |
432 | + names = [] |
433 | |
434 | === removed file 'debian/patches/fix_manpages_generation_with_new_docutils.diff' |
435 | --- debian/patches/fix_manpages_generation_with_new_docutils.diff 2012-10-22 20:20:35 +0000 |
436 | +++ debian/patches/fix_manpages_generation_with_new_docutils.diff 1970-01-01 00:00:00 +0000 |
437 | @@ -1,33 +0,0 @@ |
438 | -Description: Fix build failure with Docutils 0.9 |
439 | -Bug: https://bitbucket.org/birkenfeld/sphinx/issue/998/docutils-010-will-break-sphinx-manpage |
440 | -Author: Toshio Kuratomi <a.badger@gmail.com> |
441 | -Last-Update: 2012-10-22 |
442 | - |
443 | -diff -up a/sphinx/writers/manpage.py b/sphinx/writers/manpage.py |
444 | ---- a/sphinx/writers/manpage.py 2011-11-01 00:38:44.000000000 -0700 |
445 | -+++ b/sphinx/writers/manpage.py 2012-08-21 12:38:33.380808202 -0700 |
446 | -@@ -72,6 +72,11 @@ class ManualPageTranslator(BaseTranslato |
447 | - # since self.append_header() is never called, need to do this here |
448 | - self.body.append(MACRO_DEF) |
449 | - |
450 | -+ # Overwrite admonition label translations with our own |
451 | -+ for label, translation in admonitionlabels.items(): |
452 | -+ self.language.labels[label] = self.deunicode(translation) |
453 | -+ |
454 | -+ |
455 | - # overwritten -- added quotes around all .TH arguments |
456 | - def header(self): |
457 | - tmpl = (".TH \"%(title_upper)s\" \"%(manual_section)s\"" |
458 | -@@ -193,12 +198,6 @@ class ManualPageTranslator(BaseTranslato |
459 | - def depart_seealso(self, node): |
460 | - self.depart_admonition(node) |
461 | - |
462 | -- # overwritten -- use our own label translations |
463 | -- def visit_admonition(self, node, name=None): |
464 | -- if name: |
465 | -- self.body.append('.IP %s\n' % |
466 | -- self.deunicode(admonitionlabels.get(name, name))) |
467 | -- |
468 | - def visit_productionlist(self, node): |
469 | - self.ensure_eol() |
470 | - names = [] |
471 | |
472 | === modified file 'debian/patches/series' |
473 | --- debian/patches/series 2012-10-22 20:20:35 +0000 |
474 | +++ debian/patches/series 2012-11-01 17:56:20 +0000 |
475 | @@ -9,3 +9,4 @@ |
476 | pygments_byte_strings.diff |
477 | fix_shorthandoff.diff |
478 | fix_manpages_generation_with_new_docutils.diff |
479 | +support_python_3.3.diff |
480 | |
481 | === added file 'debian/patches/support_python_3.3.diff' |
482 | --- debian/patches/support_python_3.3.diff 1970-01-01 00:00:00 +0000 |
483 | +++ debian/patches/support_python_3.3.diff 2012-11-01 17:56:20 +0000 |
484 | @@ -0,0 +1,87 @@ |
485 | +Description: Fix various testsuite failures with Python 3.3 |
486 | +Author: Takayuki Shimizukawa <shimizukawa@gmail.com> |
487 | +Bug: https://bitbucket.org/birkenfeld/sphinx/issue/1008/test-failures-with-python-33 |
488 | +Bug-Ubuntu: https://bugs.launchpad.net/bugs/1070336 |
489 | +Last-Update: 2012-11-01 |
490 | + |
491 | +=== modified file 'sphinx/environment.py' |
492 | +--- a/sphinx/environment.py 2012-03-30 23:32:16 +0000 |
493 | ++++ b/sphinx/environment.py 2012-11-01 17:33:08 +0000 |
494 | +@@ -782,7 +782,11 @@ |
495 | + app.emit('doctree-read', doctree) |
496 | + |
497 | + # store time of build, for outdated files detection |
498 | +- self.all_docs[docname] = time.time() |
499 | ++ # (Some filesystems have coarse timestamp resolution; |
500 | ++ # therefore time.time() is older than filesystem's timestamp. |
501 | ++ # For example, FAT32 has 2sec timestamp resolution.) |
502 | ++ self.all_docs[docname] = max( |
503 | ++ time.time(), path.getmtime(self.doc2path(docname))) |
504 | + |
505 | + if self.versioning_condition: |
506 | + # get old doctree |
507 | + |
508 | +=== modified file 'sphinx/ext/autodoc.py' |
509 | +--- a/sphinx/ext/autodoc.py 2012-03-30 23:32:16 +0000 |
510 | ++++ b/sphinx/ext/autodoc.py 2012-11-01 17:33:08 +0000 |
511 | +@@ -1098,7 +1098,7 @@ |
512 | + """ |
513 | + objtype = 'method' |
514 | + member_order = 50 |
515 | +- priority = 0 |
516 | ++ priority = 1 # must be more than FunctionDocumenter |
517 | + |
518 | + @classmethod |
519 | + def can_document_member(cls, member, membername, isattr, parent): |
520 | + |
521 | +=== modified file 'sphinx/ext/intersphinx.py' |
522 | +--- a/sphinx/ext/intersphinx.py 2012-03-30 23:32:16 +0000 |
523 | ++++ b/sphinx/ext/intersphinx.py 2012-11-01 17:33:13 +0000 |
524 | +@@ -188,7 +188,17 @@ |
525 | + if update: |
526 | + env.intersphinx_inventory = {} |
527 | + env.intersphinx_named_inventory = {} |
528 | +- for name, _, invdata in cache.itervalues(): |
529 | ++ # Duplicate values in different inventories will shadow each |
530 | ++ # other; which one will override which can vary between builds |
531 | ++ # since they are specified using an unordered dict. To make |
532 | ++ # it more consistent, we sort the named inventories and then |
533 | ++ # add the unnamed inventories last. This means that the |
534 | ++ # unnamed inventories will shadow the named ones but the named |
535 | ++ # ones can still be accessed when the name is specified. |
536 | ++ cached_vals = list(cache.itervalues()) |
537 | ++ named_vals = sorted(v for v in cached_vals if v[0]) |
538 | ++ unnamed_vals = [v for v in cached_vals if not v[0]] |
539 | ++ for name, _, invdata in named_vals + unnamed_vals: |
540 | + if name: |
541 | + env.intersphinx_named_inventory[name] = invdata |
542 | + for type, objects in invdata.iteritems(): |
543 | + |
544 | +=== modified file 'sphinx/util/__init__.py' |
545 | +--- a/sphinx/util/__init__.py 2012-03-30 23:32:16 +0000 |
546 | ++++ b/sphinx/util/__init__.py 2012-11-01 17:37:41 +0000 |
547 | +@@ -197,13 +197,18 @@ |
548 | + except Exception, err: |
549 | + raise PycodeError('error importing %r' % modname, err) |
550 | + mod = sys.modules[modname] |
551 | +- if hasattr(mod, '__loader__'): |
552 | +- try: |
553 | +- source = mod.__loader__.get_source(modname) |
554 | ++ filename = getattr(mod, '__file__', None) |
555 | ++ loader = getattr(mod, '__loader__', None) |
556 | ++ if loader and getattr(loader, 'get_filename', None): |
557 | ++ try: |
558 | ++ filename = loader.get_filename(modname) |
559 | ++ except Exception, err: |
560 | ++ raise PycodeError('error getting filename for %r' % filename, err) |
561 | ++ if filename is None and loader: |
562 | ++ try: |
563 | ++ return 'string', loader.get_source(modname) |
564 | + except Exception, err: |
565 | + raise PycodeError('error getting source for %r' % modname, err) |
566 | +- return 'string', source |
567 | +- filename = getattr(mod, '__file__', None) |
568 | + if filename is None: |
569 | + raise PycodeError('no source found for module %r' % modname) |
570 | + filename = path.normpath(path.abspath(filename)) |
571 | + |
572 | |
573 | === modified file 'sphinx/writers/manpage.py' |
574 | --- sphinx/writers/manpage.py 2012-10-22 20:20:35 +0000 |
575 | +++ sphinx/writers/manpage.py 2012-11-01 17:56:20 +0000 |
576 | @@ -72,11 +72,6 @@ |
577 | # since self.append_header() is never called, need to do this here |
578 | self.body.append(MACRO_DEF) |
579 | |
580 | - # Overwrite admonition label translations with our own |
581 | - for label, translation in admonitionlabels.items(): |
582 | - self.language.labels[label] = self.deunicode(translation) |
583 | - |
584 | - |
585 | # overwritten -- added quotes around all .TH arguments |
586 | def header(self): |
587 | tmpl = (".TH \"%(title_upper)s\" \"%(manual_section)s\"" |
588 | @@ -198,6 +193,12 @@ |
589 | def depart_seealso(self, node): |
590 | self.depart_admonition(node) |
591 | |
592 | + # overwritten -- use our own label translations |
593 | + def visit_admonition(self, node, name=None): |
594 | + if name: |
595 | + self.body.append('.IP %s\n' % |
596 | + self.deunicode(admonitionlabels.get(name, name))) |
597 | + |
598 | def visit_productionlist(self, node): |
599 | self.ensure_eol() |
600 | names = [] |