Merge fixes for #13614, #13512 and #7719 from 3.3

This commit is contained in:
Éric Araujo 2012-12-08 22:57:08 -05:00
commit bb7da03f6e
12 changed files with 74 additions and 34 deletions

View File

@ -992,6 +992,12 @@ directories.
destination of the symlink will be copied. *update* and *verbose* are the same
as for :func:`copy_file`.
Files in *src* that begin with :file:`.nfs` are skipped (more information on
these files is available in answer D2 of the `NFS FAQ page
<http://nfs.sourceforge.net/#section_d>`_.
.. versionchanged:: 3.3.1
NFS files are ignored.
.. function:: remove_tree(directory[, verbose=0, dry_run=0])

View File

@ -129,7 +129,7 @@ This module provides the following class:
The :mod:`abc` module also provides the following decorators:
.. decorator:: abstractmethod(function)
.. decorator:: abstractmethod
A decorator indicating abstract methods.
@ -203,7 +203,7 @@ The :mod:`abc` module also provides the following decorators:
multiple-inheritance.
.. decorator:: abstractclassmethod(function)
.. decorator:: abstractclassmethod
A subclass of the built-in :func:`classmethod`, indicating an abstract
classmethod. Otherwise it is similar to :func:`abstractmethod`.
@ -224,7 +224,7 @@ The :mod:`abc` module also provides the following decorators:
:func:`abstractmethod`, making this decorator redundant.
.. decorator:: abstractstaticmethod(function)
.. decorator:: abstractstaticmethod
A subclass of the built-in :func:`staticmethod`, indicating an abstract
staticmethod. Otherwise it is similar to :func:`abstractmethod`.

View File

@ -232,7 +232,7 @@ I/O Base Classes
Note that calling any method (even inquiries) on a closed stream is
undefined. Implementations may raise :exc:`ValueError` in this case.
:class:`IOBase` (and its subclasses) support the iterator protocol, meaning
:class:`IOBase` (and its subclasses) supports the iterator protocol, meaning
that an :class:`IOBase` object can be iterated over yielding the lines in a
stream. Lines are defined slightly differently depending on whether the
stream is a binary stream (yielding bytes), or a text stream (yielding

View File

@ -833,7 +833,7 @@ always available.
For other systems, the values are:
================ ===========================
System :data:`platform` value
System ``platform`` value
================ ===========================
Linux ``'linux'``
Windows ``'win32'``

View File

@ -23,6 +23,9 @@ def __init__(self, source, report_level, halt_level, stream=None,
def system_message(self, level, message, *children, **kwargs):
self.messages.append((level, message, children, kwargs))
return nodes.system_message(message, level=level,
type=self.levels[level],
*children, **kwargs)
HAS_DOCUTILS = True
except Exception:

View File

@ -4,7 +4,6 @@
that uses .pypirc in the distutils.command package.
"""
import os
import sys
from configparser import ConfigParser
from distutils.cmd import Command
@ -43,16 +42,8 @@ def _get_rc_file(self):
def _store_pypirc(self, username, password):
"""Creates a default .pypirc file."""
rc = self._get_rc_file()
f = open(rc, 'w')
try:
with os.fdopen(os.open(rc, os.O_CREAT | os.O_WRONLY, 0o600), 'w') as f:
f.write(DEFAULT_PYPIRC % (username, password))
finally:
f.close()
try:
os.chmod(rc, 0o600)
except OSError:
# should do something better here
pass
def _read_pypirc(self):
"""Reads the .pypirc file."""

View File

@ -141,6 +141,10 @@ def copy_tree(src, dst, preserve_mode=1, preserve_times=1,
src_name = os.path.join(src, n)
dst_name = os.path.join(dst, n)
if n.startswith('.nfs'):
# skip NFS rename files
continue
if preserve_symlinks and os.path.islink(src_name):
link_dest = os.readlink(src_name)
if verbose >= 1:

View File

@ -76,7 +76,6 @@ def test_create_tree_verbosity(self):
remove_tree(self.root_target, verbose=0)
def test_copy_tree_verbosity(self):
mkpath(self.target, verbose=0)
@ -88,11 +87,8 @@ def test_copy_tree_verbosity(self):
mkpath(self.target, verbose=0)
a_file = os.path.join(self.target, 'ok.txt')
f = open(a_file, 'w')
try:
with open(a_file, 'w') as f:
f.write('some content')
finally:
f.close()
wanted = ['copying %s -> %s' % (a_file, self.target2)]
copy_tree(self.target, self.target2, verbose=1)
@ -101,6 +97,21 @@ def test_copy_tree_verbosity(self):
remove_tree(self.root_target, verbose=0)
remove_tree(self.target2, verbose=0)
def test_copy_tree_skips_nfs_temp_files(self):
mkpath(self.target, verbose=0)
a_file = os.path.join(self.target, 'ok.txt')
nfs_file = os.path.join(self.target, '.nfs123abc')
for f in a_file, nfs_file:
with open(f, 'w') as fh:
fh.write('some content')
copy_tree(self.target, self.target2)
self.assertEqual(os.listdir(self.target2), ['ok.txt'])
remove_tree(self.root_target, verbose=0)
remove_tree(self.target2, verbose=0)
def test_ensure_relative(self):
if os.sep == '/':
self.assertEqual(ensure_relative('/home/foo'), 'home/foo')

View File

@ -1,5 +1,4 @@
"""Tests for distutils.command.register."""
import sys
import os
import unittest
import getpass
@ -10,11 +9,14 @@
from distutils.command import register as register_module
from distutils.command.register import register
from distutils.core import Distribution
from distutils.errors import DistutilsSetupError
from distutils.tests import support
from distutils.tests.test_config import PYPIRC, PyPIRCCommandTestCase
from distutils.tests.test_config import PyPIRCCommandTestCase
try:
import docutils
except ImportError:
docutils = None
PYPIRC_NOPASSWORD = """\
[distutils]
@ -193,6 +195,7 @@ def test_password_reset(self):
self.assertEqual(headers['Content-length'], '290')
self.assertTrue((b'tarek') in req.data)
@unittest.skipUnless(docutils is not None, 'needs docutils')
def test_strict(self):
# testing the script option
# when on, the register command stops if
@ -205,13 +208,6 @@ def test_strict(self):
cmd.strict = 1
self.assertRaises(DistutilsSetupError, cmd.run)
# we don't test the reSt feature if docutils
# is not installed
try:
import docutils
except ImportError:
return
# metadata are OK but long_description is broken
metadata = {'url': 'xxx', 'author': 'xxx',
'author_email': 'éxéxé',
@ -265,6 +261,22 @@ def test_strict(self):
finally:
del register_module.input
@unittest.skipUnless(docutils is not None, 'needs docutils')
def test_register_invalid_long_description(self):
description = ':funkie:`str`' # mimic Sphinx-specific markup
metadata = {'url': 'xxx', 'author': 'xxx',
'author_email': 'xxx',
'name': 'xxx', 'version': 'xxx',
'long_description': description}
cmd = self._get_cmd(metadata)
cmd.ensure_finalized()
cmd.strict = True
inputs = Inputs('2', 'tarek', 'tarek@ziade.org')
register_module.input = inputs
self.addCleanup(delattr, register_module, 'input')
self.assertRaises(DistutilsSetupError, cmd.run)
def test_check_metadata_deprecated(self):
# makes sure make_metadata is deprecated
cmd = self._get_cmd()

View File

@ -83,9 +83,8 @@ def get_cmd(self, metadata=None):
@unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run')
def test_prune_file_list(self):
# this test creates a package with some vcs dirs in it
# and launch sdist to make sure they get pruned
# on all systems
# this test creates a project with some VCS dirs and an NFS rename
# file, then launches sdist to check they get pruned on all systems
# creating VCS directories with some files in them
os.mkdir(join(self.tmp_dir, 'somecode', '.svn'))
@ -99,6 +98,8 @@ def test_prune_file_list(self):
self.write_file((self.tmp_dir, 'somecode', '.git',
'ok'), 'xxx')
self.write_file((self.tmp_dir, 'somecode', '.nfs0001'), 'xxx')
# now building a sdist
dist, cmd = self.get_cmd()

View File

@ -243,6 +243,7 @@ David Costanzo
Scott Cotton
Greg Couch
David Cournapeau
Julien Courteau
Steve Cousins
Alex Coventry
Matthew Dixon Cowles
@ -566,6 +567,7 @@ Julien Jehannet
Drew Jenkins
Flemming Kjær Jensen
Philip H. Jensen
Philip Jenvey
MunSic Jeong
Chris Jerdonek
Jim Jewett
@ -688,6 +690,7 @@ John J. Lee
Thomas Lee
Tennessee Leeuwenburg
Luc Lefebvre
Pierre Paul Lefebvre
Glyph Lefkowitz
Vincent Legoll
Kip Lehman

View File

@ -165,6 +165,15 @@ Library
- Issue #16628: Fix a memory leak in ctypes.resize().
- Issue #13614: Fix setup.py register failure with invalid rst in description.
Patch by Julien Courteau and Pierre Paul Lefebvre.
- Issue #13512: Create ~/.pypirc securely (CVE-2011-4944). Initial patch by
Philip Jenvey, tested by Mageia and Debian.
- Issue #7719: Make distutils ignore ``.nfs*`` files instead of choking later
on. Initial patch by SilentGhost and Jeff Ramnani.
- Issue #13120: Allow to call pdb.set_trace() from thread.
Patch by Ilya Sandler.