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 @@ try:
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 @@ Provides the PyPIRCCommand class, the base class for the command classes
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 @@ class PyPIRCCommand(Command):
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 @@ class DirUtilTestCase(support.TempdirManager, unittest.TestCase):
remove_tree(self.root_target, verbose=0)
def test_copy_tree_verbosity(self):
mkpath(self.target, verbose=0)
@ -88,11 +87,8 @@ class DirUtilTestCase(support.TempdirManager, unittest.TestCase):
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 @@ class DirUtilTestCase(support.TempdirManager, unittest.TestCase):
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 test.support import check_warnings, run_unittest
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 @@ class RegisterTestCase(PyPIRCCommandTestCase):
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 @@ class RegisterTestCase(PyPIRCCommandTestCase):
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 @@ class RegisterTestCase(PyPIRCCommandTestCase):
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 @@ class SDistTestCase(PyPIRCCommandTestCase):
@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 @@ class SDistTestCase(PyPIRCCommandTestCase):
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.