Merged revisions 74075,74187,74197,74201,74216,74225 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r74075 | georg.brandl | 2009-07-18 05:06:31 -0400 (Sat, 18 Jul 2009) | 1 line #6505: fix typos. ........ r74187 | benjamin.peterson | 2009-07-23 10:19:08 -0400 (Thu, 23 Jul 2009) | 1 line use bools for autoraise ........ r74197 | benjamin.peterson | 2009-07-24 22:03:48 -0400 (Fri, 24 Jul 2009) | 1 line clarify ........ r74201 | amaury.forgeotdarc | 2009-07-25 12:22:06 -0400 (Sat, 25 Jul 2009) | 2 lines Better name a variable: 'buf' seems to imply a mutable buffer. ........ r74216 | michael.foord | 2009-07-26 17:12:14 -0400 (Sun, 26 Jul 2009) | 1 line Issue 6581. Michael Foord ........ r74225 | kurt.kaiser | 2009-07-27 12:09:28 -0400 (Mon, 27 Jul 2009) | 5 lines 1. Clean workspace more thoughly before build. 2. Add url of branch we are building to 'results' webpage. (url is now available in $repo_path, could be added to failure email.) 3. Adjust permissions to improve upload reliability. ........
This commit is contained in:
parent
e9ce1fb543
commit
e223eb8477
|
@ -152,9 +152,9 @@ Positional and keyword arguments can be arbitrarily combined::
|
|||
other='Georg'))
|
||||
The story of Bill, Manfred, and Georg.
|
||||
|
||||
An optional ``':'`` and format specifier can follow the field name. This also
|
||||
An optional ``':'`` and format specifier can follow the field name. This allows
|
||||
greater control over how the value is formatted. The following example
|
||||
truncates the Pi to three places after the decimal.
|
||||
truncates Pi to three places after the decimal.
|
||||
|
||||
>>> import math
|
||||
>>> print('The value of PI is approximately {0:.3f}.'.format(math.pi))
|
||||
|
@ -208,8 +208,8 @@ operation. For example::
|
|||
The value of PI is approximately 3.142.
|
||||
|
||||
Since :meth:`str.format` is quite new, a lot of Python code still uses the ``%``
|
||||
operator. However, because this old style of formatting will eventually removed
|
||||
from the language :meth:`str.format` should generally be used.
|
||||
operator. However, because this old style of formatting will eventually be
|
||||
removed from the language, :meth:`str.format` should generally be used.
|
||||
|
||||
More information can be found in the :ref:`old-string-formatting` section.
|
||||
|
||||
|
|
|
@ -994,7 +994,10 @@ def getinnerframes(tb, context=1):
|
|||
tb = tb.tb_next
|
||||
return framelist
|
||||
|
||||
if hasattr(sys, '_getframe'):
|
||||
currentframe = sys._getframe
|
||||
else:
|
||||
currentframe = lambda _=None: None
|
||||
|
||||
def stack(context=1):
|
||||
"""Return a list of records for the stack above the caller's frame."""
|
||||
|
|
|
@ -56,7 +56,7 @@ def get(using=None):
|
|||
# It is recommended one does "import webbrowser" and uses webbrowser.open(url)
|
||||
# instead of "from webbrowser import *".
|
||||
|
||||
def open(url, new=0, autoraise=1):
|
||||
def open(url, new=0, autoraise=True):
|
||||
for name in _tryorder:
|
||||
browser = get(name)
|
||||
if browser.open(url, new, autoraise):
|
||||
|
@ -145,7 +145,7 @@ class BaseBrowser(object):
|
|||
self.name = name
|
||||
self.basename = name
|
||||
|
||||
def open(self, url, new=0, autoraise=1):
|
||||
def open(self, url, new=0, autoraise=True):
|
||||
raise NotImplementedError
|
||||
|
||||
def open_new(self, url):
|
||||
|
@ -169,7 +169,7 @@ class GenericBrowser(BaseBrowser):
|
|||
self.args = name[1:]
|
||||
self.basename = os.path.basename(self.name)
|
||||
|
||||
def open(self, url, new=0, autoraise=1):
|
||||
def open(self, url, new=0, autoraise=True):
|
||||
cmdline = [self.name] + [arg.replace("%s", url)
|
||||
for arg in self.args]
|
||||
try:
|
||||
|
@ -186,7 +186,7 @@ class BackgroundBrowser(GenericBrowser):
|
|||
"""Class for all browsers which are to be started in the
|
||||
background."""
|
||||
|
||||
def open(self, url, new=0, autoraise=1):
|
||||
def open(self, url, new=0, autoraise=True):
|
||||
cmdline = [self.name] + [arg.replace("%s", url)
|
||||
for arg in self.args]
|
||||
try:
|
||||
|
@ -217,7 +217,7 @@ class UnixBrowser(BaseBrowser):
|
|||
raise_opt = []
|
||||
if remote and self.raise_opts:
|
||||
# use autoraise argument only for remote invocation
|
||||
autoraise = int(bool(autoraise))
|
||||
autoraise = int(autoraise)
|
||||
opt = self.raise_opts[autoraise]
|
||||
if opt: raise_opt = [opt]
|
||||
|
||||
|
@ -257,7 +257,7 @@ class UnixBrowser(BaseBrowser):
|
|||
else:
|
||||
return not p.wait()
|
||||
|
||||
def open(self, url, new=0, autoraise=1):
|
||||
def open(self, url, new=0, autoraise=True):
|
||||
if new == 0:
|
||||
action = self.remote_action
|
||||
elif new == 1:
|
||||
|
@ -341,7 +341,7 @@ class Konqueror(BaseBrowser):
|
|||
for more information on the Konqueror remote-control interface.
|
||||
"""
|
||||
|
||||
def open(self, url, new=0, autoraise=1):
|
||||
def open(self, url, new=0, autoraise=True):
|
||||
# XXX Currently I know no way to prevent KFM from opening a new win.
|
||||
if new == 2:
|
||||
action = "newTab"
|
||||
|
@ -429,7 +429,7 @@ class Grail(BaseBrowser):
|
|||
s.close()
|
||||
return 1
|
||||
|
||||
def open(self, url, new=0, autoraise=1):
|
||||
def open(self, url, new=0, autoraise=True):
|
||||
if new:
|
||||
ok = self._remote("LOADNEW " + url)
|
||||
else:
|
||||
|
@ -512,7 +512,7 @@ if os.environ.get("TERM"):
|
|||
|
||||
if sys.platform[:3] == "win":
|
||||
class WindowsDefault(BaseBrowser):
|
||||
def open(self, url, new=0, autoraise=1):
|
||||
def open(self, url, new=0, autoraise=True):
|
||||
try:
|
||||
os.startfile(url)
|
||||
except WindowsError:
|
||||
|
@ -546,7 +546,7 @@ except ImportError:
|
|||
pass
|
||||
else:
|
||||
class InternetConfig(BaseBrowser):
|
||||
def open(self, url, new=0, autoraise=1):
|
||||
def open(self, url, new=0, autoraise=True):
|
||||
ic.launchurl(url)
|
||||
return True # Any way to get status?
|
||||
|
||||
|
@ -567,7 +567,7 @@ if sys.platform == 'darwin':
|
|||
def __init__(self, name):
|
||||
self.name = name
|
||||
|
||||
def open(self, url, new=0, autoraise=1):
|
||||
def open(self, url, new=0, autoraise=True):
|
||||
assert "'" not in url
|
||||
# hack for local urls
|
||||
if not ':' in url:
|
||||
|
|
|
@ -4,9 +4,11 @@
|
|||
## does this:
|
||||
## svn up ; ./configure ; make ; make test ; make install ; cd Doc ; make
|
||||
##
|
||||
## Logs are kept and rsync'ed to the host. If there are test failure(s),
|
||||
## Logs are kept and rsync'ed to the webhost. If there are test failure(s),
|
||||
## information about the failure(s) is mailed.
|
||||
##
|
||||
## The user must be a member of the webmaster group locally and on webhost.
|
||||
##
|
||||
## This script is run on the PSF's machine as user neal via crontab.
|
||||
##
|
||||
## Yes, this script would probably be easier in python, but then
|
||||
|
@ -76,7 +78,8 @@ ALWAYS_SKIP="-x $_ALWAYS_SKIP"
|
|||
# Skip these tests altogether when looking for leaks. These tests
|
||||
# do not need to be stored above in LEAKY_TESTS too.
|
||||
# test_logging causes hangs, skip it.
|
||||
LEAKY_SKIPS="-x test_logging $_ALWAYS_SKIP"
|
||||
# KBK 21Apr09: test_httpservers causes hangs, skip for now.
|
||||
LEAKY_SKIPS="-x test_compiler test_logging test_httpservers"
|
||||
|
||||
# Change this flag to "yes" for old releases to only update/build the docs.
|
||||
BUILD_DISABLED="no"
|
||||
|
@ -133,9 +136,14 @@ mail_on_failure() {
|
|||
|
||||
## setup
|
||||
cd $DIR
|
||||
make clobber /dev/null 2>&1
|
||||
cp -p Modules/Setup.dist Modules/Setup
|
||||
# But maybe there was no Makefile - we are only building docs. Clear build:
|
||||
rm -rf build/
|
||||
mkdir -p build
|
||||
rm -f $RESULT_FILE build/*.out
|
||||
rm -rf $INSTALL_DIR
|
||||
## get the path we are building
|
||||
repo_path=$(grep "url=" .svn/entries | sed -e s/\\W*url=// -e s/\"//g)
|
||||
|
||||
## create results file
|
||||
TITLE="Automated Python Build Results"
|
||||
|
@ -153,6 +161,8 @@ echo " </tr><tr>" >> $RESULT_FILE
|
|||
echo " <td>Hostname:</td><td>`uname -n`</td>" >> $RESULT_FILE
|
||||
echo " </tr><tr>" >> $RESULT_FILE
|
||||
echo " <td>Platform:</td><td>`uname -srmpo`</td>" >> $RESULT_FILE
|
||||
echo " </tr><tr>" >> $RESULT_FILE
|
||||
echo " <td>URL:</td><td>$repo_path</td>" >> $RESULT_FILE
|
||||
echo " </tr>" >> $RESULT_FILE
|
||||
echo "</table>" >> $RESULT_FILE
|
||||
echo "<ul>" >> $RESULT_FILE
|
||||
|
@ -223,7 +233,7 @@ if [ $err = 0 -a "$BUILD_DISABLED" != "yes" ]; then
|
|||
start=`current_time`
|
||||
## ensure that the reflog exists so the grep doesn't fail
|
||||
touch $REFLOG
|
||||
$PYTHON $REGRTEST_ARGS -R 4:3:$REFLOG -u network,urlfetch $LEAKY_SKIPS >& build/$F
|
||||
$PYTHON $REGRTEST_ARGS -R 4:3:$REFLOG -u network $LEAKY_SKIPS >& build/$F
|
||||
LEAK_PAT="($LEAKY_TESTS|sum=0)"
|
||||
NUM_FAILURES=`egrep -vc "$LEAK_PAT" $REFLOG`
|
||||
place_summary_first build/$F
|
||||
|
@ -259,13 +269,13 @@ start=`current_time`
|
|||
# which will definitely fail with a conflict.
|
||||
#CONFLICTED_FILE=commontex/boilerplate.tex
|
||||
#conflict_count=`grep -c "<<<" $CONFLICTED_FILE`
|
||||
make clean
|
||||
conflict_count=0
|
||||
if [ $conflict_count != 0 ]; then
|
||||
echo "Conflict detected in $CONFLICTED_FILE. Doc build skipped." > ../build/$F
|
||||
err=1
|
||||
else
|
||||
make checkout update html >& ../build/$F
|
||||
make clean > ../build/$F 2>&1
|
||||
make checkout update html >> ../build/$F 2>&1
|
||||
err=$?
|
||||
fi
|
||||
update_status "Making doc" "$F" $start
|
||||
|
@ -279,6 +289,8 @@ echo "</body>" >> $RESULT_FILE
|
|||
echo "</html>" >> $RESULT_FILE
|
||||
|
||||
## copy results
|
||||
chgrp -R webmaster build/html
|
||||
chmod -R g+w build/html
|
||||
rsync $RSYNC_OPTS build/html/* $REMOTE_SYSTEM:$REMOTE_DIR
|
||||
cd ../build
|
||||
rsync $RSYNC_OPTS index.html *.out $REMOTE_SYSTEM:$REMOTE_DIR/results/
|
||||
|
|
|
@ -718,7 +718,7 @@ PyDict_GetItem(PyObject *op, PyObject *key)
|
|||
running "python -Wi" for an example related to string interning.
|
||||
Let's just hope that no exception occurs then... This must be
|
||||
_PyThreadState_Current and not PyThreadState_GET() because in debug
|
||||
mode, it complains if tstate is NULL. */
|
||||
mode, the latter complains if tstate is NULL. */
|
||||
tstate = _PyThreadState_Current;
|
||||
if (tstate != NULL && tstate->curexc_type != NULL) {
|
||||
/* preserve the existing exception */
|
||||
|
|
|
@ -1783,7 +1783,7 @@ static int init_builtin(char *); /* Forward */
|
|||
its module object WITH INCREMENTED REFERENCE COUNT */
|
||||
|
||||
static PyObject *
|
||||
load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader)
|
||||
load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader)
|
||||
{
|
||||
PyObject *modules;
|
||||
PyObject *m;
|
||||
|
@ -1804,27 +1804,27 @@ load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader)
|
|||
switch (type) {
|
||||
|
||||
case PY_SOURCE:
|
||||
m = load_source_module(name, buf, fp);
|
||||
m = load_source_module(name, pathname, fp);
|
||||
break;
|
||||
|
||||
case PY_COMPILED:
|
||||
m = load_compiled_module(name, buf, fp);
|
||||
m = load_compiled_module(name, pathname, fp);
|
||||
break;
|
||||
|
||||
#ifdef HAVE_DYNAMIC_LOADING
|
||||
case C_EXTENSION:
|
||||
m = _PyImport_LoadDynamicModule(name, buf, fp);
|
||||
m = _PyImport_LoadDynamicModule(name, pathname, fp);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case PKG_DIRECTORY:
|
||||
m = load_package(name, buf);
|
||||
m = load_package(name, pathname);
|
||||
break;
|
||||
|
||||
case C_BUILTIN:
|
||||
case PY_FROZEN:
|
||||
if (buf != NULL && buf[0] != '\0')
|
||||
name = buf;
|
||||
if (pathname != NULL && pathname[0] != '\0')
|
||||
name = pathname;
|
||||
if (type == C_BUILTIN)
|
||||
err = init_builtin(name);
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue