[Python-checkins] r56645 - in doctools/trunk: TODO converter/newfiles/conf.py converter/newfiles/doc_sphinx.rst sphinx/builder.py sphinx/patchlevel.py sphinx/templates/sidebar.html

georg.brandl python-checkins at python.org
Wed Aug 1 18:06:46 CEST 2007


Author: georg.brandl
Date: Wed Aug 1 18:06:45 2007
New Revision: 56645
Added:
 doctools/trunk/sphinx/patchlevel.py
Modified:
 doctools/trunk/TODO
 doctools/trunk/converter/newfiles/conf.py
 doctools/trunk/converter/newfiles/doc_sphinx.rst
 doctools/trunk/sphinx/builder.py
 doctools/trunk/sphinx/templates/sidebar.html
Log:
Automatically get version info from the patchlevel.h file.
Modified: doctools/trunk/TODO
==============================================================================
--- doctools/trunk/TODO	(original)
+++ doctools/trunk/TODO	Wed Aug 1 18:06:45 2007
@@ -3,7 +3,7 @@
 
 - "often used" combo box in sidebar
 - discuss and debug comments system
-- write new Makefile, handle automatic version info and checkout
+- write new Makefile, handle automatic checkout
 - write a "printable" builder (export to latex, most probably)
 - discuss lib -> ref section move
 - prepare for databases other than sqlite for comments
Modified: doctools/trunk/converter/newfiles/conf.py
==============================================================================
--- doctools/trunk/converter/newfiles/conf.py	(original)
+++ doctools/trunk/converter/newfiles/conf.py	Wed Aug 1 18:06:45 2007
@@ -6,11 +6,17 @@
 # that aren't pickleable (module imports are okay, they're removed automatically).
 #
 
-# The default replacements for |version| and |release|:
+# The default replacements for |version| and |release|.
+# If 'auto', Sphinx looks for the Include/patchlevel.h file in the current Python
+# source tree and replaces the values accordingly.
+#
 # The short X.Y version.
-version = '2.6'
+# version = '2.6'
+version = 'auto'
 # The full version, including alpha/beta/rc tags.
-release = '2.6a0'
+# release = '2.6a0'
+release = 'auto'
+
 # There are two options for replacing |today|: either, you set today to some
 # non-false value, then it is used:
 today = ''
Modified: doctools/trunk/converter/newfiles/doc_sphinx.rst
==============================================================================
--- doctools/trunk/converter/newfiles/doc_sphinx.rst	(original)
+++ doctools/trunk/converter/newfiles/doc_sphinx.rst	Wed Aug 1 18:06:45 2007
@@ -17,17 +17,22 @@
 
 These variables are:
 
-release : string
- A string that is used as a replacement for the ``|release|`` reST
- substitution. It should be the full version string including
- alpha/beta/release candidate tags, e.g. ``2.5.2b3``.
-
 version : string
 A string that is used as a replacement for the ``|version|`` reST
 substitution. It should be the Python version the documentation refers to.
 This consists only of the major and minor version parts, e.g. ``2.5``, even
 for version 2.5.1.
 
+release : string
+ A string that is used as a replacement for the ``|release|`` reST
+ substitution. It should be the full version string including
+ alpha/beta/release candidate tags, e.g. ``2.5.2b3``.
+
+Both ``release`` and ``version`` can be ``'auto'``, which means that they are
+determined at runtime from the ``Include/patchlevel.h`` file, if a complete
+Python source distribution can be found, or else from the interpreter running
+Sphinx.
+
 today_fmt : string
 A ``strftime`` format that is used to format a replacement for the
 ``|today|`` reST substitution.
@@ -37,7 +42,7 @@
 output literally. If this is nonzero, it is used instead of
 ``strftime(today_fmt)``.
 
-unused_file : list of strings
+unused_files : list of strings
 A list of reST filenames that are to be disregarded during building. This
 could be docs for temporarily disabled modules or documentation that's not
 yet ready for public consumption.
Modified: doctools/trunk/sphinx/builder.py
==============================================================================
--- doctools/trunk/sphinx/builder.py	(original)
+++ doctools/trunk/sphinx/builder.py	Wed Aug 1 18:06:45 2007
@@ -31,6 +31,7 @@
 from .writer import HTMLWriter
 from .util.console import bold, purple, green
 from .htmlhelp import build_hhx
+from .patchlevel import get_version_info, get_sys_version_info
 from .environment import BuildEnvironment
 from .highlighting import pygments, get_stylesheet
 
@@ -96,6 +97,18 @@
 for key, val in self.config.items():
 if isinstance(val, types.ModuleType):
 del self.config[key]
+ # replace version info if 'auto'
+ if self.config['version'] == 'auto' or self.config['revision'] == 'auto':
+ try:
+ version, release = get_version_info(srcdirname)
+ except (IOError, OSError):
+ print >>warning_stream, 'WARNING: Can\'t get version info from ' \
+ 'Include/patchlevel.h, using version of this interpreter.'
+ version, release = get_sys_version_info()
+ if self.config['version'] == 'auto':
+ self.config['version'] = version
+ if self.config['release'] == 'auto':
+ self.config['release'] = release
 if confoverrides:
 self.config.update(confoverrides)
 
Added: doctools/trunk/sphinx/patchlevel.py
==============================================================================
--- (empty file)
+++ doctools/trunk/sphinx/patchlevel.py	Wed Aug 1 18:06:45 2007
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+"""
+ sphinx.patchlevel
+ ~~~~~~~~~~~~~~~~~
+
+ Extract version info from Include/patchlevel.h.
+ Adapted from Doc/tools/getversioninfo.
+
+ :copyright: 2007 by Georg Brandl.
+ :license: Python license.
+"""
+from __future__ import with_statement
+
+import os
+import re
+import sys
+
+def get_version_info(srcdir):
+ patchlevel_h = os.path.join(srcdir, '..', "Include", "patchlevel.h")
+
+ # This won't pick out all #defines, but it will pick up the ones we
+ # care about.
+ rx = re.compile(r"\s*#define\s+([a-zA-Z][a-zA-Z_0-9]*)\s+([a-zA-Z_0-9]+)")
+
+ d = {}
+ with open(patchlevel_h) as f:
+ for line in f:
+ m = rx.match(line)
+ if m is not None:
+ name, value = m.group(1, 2)
+ d[name] = value
+
+ release = version = "%s.%s" % (d["PY_MAJOR_VERSION"], d["PY_MINOR_VERSION"])
+ micro = int(d["PY_MICRO_VERSION"])
+ if micro != 0:
+ release += "." + str(micro)
+
+ level = d["PY_RELEASE_LEVEL"]
+ suffixes = {
+ "PY_RELEASE_LEVEL_ALPHA": "a",
+ "PY_RELEASE_LEVEL_BETA": "b",
+ "PY_RELEASE_LEVEL_GAMMA": "c",
+ }
+ if level != "PY_RELEASE_LEVEL_FINAL":
+ release += suffixes[level] + str(int(d["PY_RELEASE_SERIAL"]))
+ return version, release
+
+
+def get_sys_version_info():
+ major, minor, micro, level, serial = sys.version_info
+ release = version = '%s.%s' % (major, minor)
+ if micro:
+ release += '.%s' % micro
+ if level != 'final':
+ release += '%s%s' % (level[0], serial)
+ return version, release
Modified: doctools/trunk/sphinx/templates/sidebar.html
==============================================================================
--- doctools/trunk/sphinx/templates/sidebar.html	(original)
+++ doctools/trunk/sphinx/templates/sidebar.html	Wed Aug 1 18:06:45 2007
@@ -23,7 +23,7 @@
 {% elif builder == 'html' %}
 <li><a href="{{ pathto(sourcename, true)|e }}">Show Source</a></li>
 {% endif %}
- <li><a href="http://bugs.python.org/XXX?page={{ sourcename|e }}">Report Bug</a></li>
+ {# <li><a href="http://bugs.python.org/XXX?page={{ sourcename|e }}">Report Bug</a></li> #}
 </ul>
 {% endif %}
 {% if current_page_name == "index" %}


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /