diff options
author | Barry Warsaw <barry@python.org> | 2005-12-18 01:27:35 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 2005-12-18 01:27:35 (GMT) |
commit | 2a38a86c1c48adbf9cf76d485c515002f042fd56 (patch) | |
tree | 728b60b9fdc895f23a1a18dca41d49ce38a5ce62 | |
parent | 11ca77e6deb795a697ce00849c2f081e9bdbabb7 (diff) | |
download | cpython-2a38a86c1c48adbf9cf76d485c515002f042fd56.zip cpython-2a38a86c1c48adbf9cf76d485c515002f042fd56.tar.gz cpython-2a38a86c1c48adbf9cf76d485c515002f042fd56.tar.bz2 |
Expose Subversion revision number (calculated via "svnversion .") to Python.
Add C API function Py_GetBuildNumber(), add it to the interactive prompt
banner (i.e. Py_GetBuildInfo()), and add it as the sys.build_number
attribute. The build number is a string instead of an int because it may
contain a trailing 'M' if there are local modifications.
-rw-r--r-- | Doc/api/init.tex | 6 | ||||
-rw-r--r-- | Doc/lib/libsys.tex | 6 | ||||
-rw-r--r-- | Include/pythonrun.h | 1 | ||||
-rw-r--r-- | Makefile.pre.in | 6 | ||||
-rw-r--r-- | Misc/NEWS | 4 | ||||
-rw-r--r-- | Modules/getbuildinfo.c | 10 | ||||
-rw-r--r-- | Python/sysmodule.c | 3 |
7 files changed, 32 insertions, 4 deletions
diff --git a/Doc/api/init.tex b/Doc/api/init.tex index 51b925f..67f74a1 100644 --- a/Doc/api/init.tex +++ b/Doc/api/init.tex @@ -272,6 +272,12 @@ \withsubitem{(in module sys)}{\ttindex{version}} \end{cfuncdesc} +\begin{cfuncdesc}{const char*}{Py_GetBuildNumber}{} + Return a string representing the Subversion revision that this Python + executable was built from. This number is a string because it may contain a + trailing 'M' if Python was built from a mixed revision source tree. +\end{cfuncdesc} + \begin{cfuncdesc}{const char*}{Py_GetPlatform}{} Return the platform identifier for the current platform. On \UNIX, this is formed from the ``official'' name of the operating system, diff --git a/Doc/lib/libsys.tex b/Doc/lib/libsys.tex index 4efe5f6..7ffa35d 100644 --- a/Doc/lib/libsys.tex +++ b/Doc/lib/libsys.tex @@ -27,6 +27,12 @@ It is always available. \versionadded{2.0} \end{datadesc} +\begin{datadesc}{build_number} + A string representing the Subversion revision that this Python executable + was built from. This number is a string because it may contain a trailing + 'M' if Python was built from a mixed revision source tree. +\end{datadesc} + \begin{datadesc}{builtin_module_names} A tuple of strings giving the names of all modules that are compiled into this Python interpreter. (This information is not available in diff --git a/Include/pythonrun.h b/Include/pythonrun.h index e309078..6cf33d8 100644 --- a/Include/pythonrun.h +++ b/Include/pythonrun.h @@ -108,6 +108,7 @@ PyAPI_FUNC(const char *) Py_GetPlatform(void); PyAPI_FUNC(const char *) Py_GetCopyright(void); PyAPI_FUNC(const char *) Py_GetCompiler(void); PyAPI_FUNC(const char *) Py_GetBuildInfo(void); +PyAPI_FUNC(const char *) Py_GetBuildNumber(void); /* Internal -- various one-time initializations */ PyAPI_FUNC(PyObject *) _PyBuiltin_Init(void); diff --git a/Makefile.pre.in b/Makefile.pre.in index ab01deb..0ce2afa 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -349,7 +349,9 @@ buildno: $(PARSER_OBJS) \ $(SIGNAL_OBJS) \ $(MODOBJS) \ $(srcdir)/Modules/getbuildinfo.c - if test -f buildno; then \ + if test -d .svn; then \ + svnversion . >buildno; \ + elif test -f buildno; then \ expr `cat buildno` + 1 >buildno1; \ mv -f buildno1 buildno; \ else echo 1 >buildno; fi @@ -444,7 +446,7 @@ Modules/Setup: $(srcdir)/Modules/Setup.dist # Special rules for object files Modules/getbuildinfo.o: $(srcdir)/Modules/getbuildinfo.c buildno - $(CC) -c $(PY_CFLAGS) -DBUILD=`cat buildno` -o $@ $(srcdir)/Modules/getbuildinfo.c + $(CC) -c $(PY_CFLAGS) -DBUILD=\"`cat buildno`\" -o $@ $(srcdir)/Modules/getbuildinfo.c Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile $(CC) -c $(PY_CFLAGS) -DPYTHONPATH='"$(PYTHONPATH)"' \ @@ -12,6 +12,10 @@ What's New in Python 2.5 alpha 1? Core and builtins ----------------- +- Patch #1382163: Expose Subversion revision number to Python. New C API + function Py_GetBuildNumber(). New attribute sys.build_number. Build number + is now displayed in interactive prompt banner. + - Implementation of PEP 341 - Unification of try/except and try/finally. "except" clauses can now be written together with a "finally" clause in one try statement instead of two nested ones. Patch #1355913. diff --git a/Modules/getbuildinfo.c b/Modules/getbuildinfo.c index b541bb6..8b1ca22 100644 --- a/Modules/getbuildinfo.c +++ b/Modules/getbuildinfo.c @@ -21,7 +21,7 @@ #endif #ifndef BUILD -#define BUILD 0 +#define BUILD "0" #endif const char * @@ -29,6 +29,12 @@ Py_GetBuildInfo(void) { static char buildinfo[50]; PyOS_snprintf(buildinfo, sizeof(buildinfo), - "#%d, %.20s, %.9s", BUILD, DATE, TIME); + "%s, %.20s, %.9s", BUILD, DATE, TIME); return buildinfo; } + +const char * +Py_GetBuildNumber(void) +{ + return BUILD; +} diff --git a/Python/sysmodule.c b/Python/sysmodule.c index d9f1337..f97a56d 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -1003,6 +1003,9 @@ _PySys_Init(void) PyDict_SetItemString(sysdict, "hexversion", v = PyInt_FromLong(PY_VERSION_HEX)); Py_XDECREF(v); + PyDict_SetItemString(sysdict, "build_number", + v = PyString_FromString(Py_GetBuildNumber())); + Py_XDECREF(v); /* * These release level checks are mutually exclusive and cover * the field, so don't get too fancy with the pre-processor! |