diff options
-rw-r--r-- | Doc/distutils/apiref.rst | 6 | ||||
-rw-r--r-- | Doc/library/abc.rst | 6 | ||||
-rw-r--r-- | Doc/library/io.rst | 2 | ||||
-rw-r--r-- | Doc/library/sys.rst | 2 | ||||
-rw-r--r-- | Lib/distutils/command/check.py | 3 | ||||
-rw-r--r-- | Lib/distutils/config.py | 11 | ||||
-rw-r--r-- | Lib/distutils/dir_util.py | 4 | ||||
-rw-r--r-- | Lib/distutils/tests/test_dir_util.py | 21 | ||||
-rw-r--r-- | Lib/distutils/tests/test_register.py | 34 | ||||
-rw-r--r-- | Lib/distutils/tests/test_sdist.py | 7 | ||||
-rw-r--r-- | Misc/ACKS | 3 | ||||
-rw-r--r-- | Misc/NEWS | 9 |
12 files changed, 74 insertions, 34 deletions
diff --git a/Doc/distutils/apiref.rst b/Doc/distutils/apiref.rst index 71702e5..106cc52 100644 --- a/Doc/distutils/apiref.rst +++ b/Doc/distutils/apiref.rst @@ -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]) diff --git a/Doc/library/abc.rst b/Doc/library/abc.rst index db3adbd..6f23596 100644 --- a/Doc/library/abc.rst +++ b/Doc/library/abc.rst @@ -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`. diff --git a/Doc/library/io.rst b/Doc/library/io.rst index 810e56f..98e0358 100644 --- a/Doc/library/io.rst +++ b/Doc/library/io.rst @@ -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 diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index 73914e3..93273c4 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -833,7 +833,7 @@ always available. For other systems, the values are: ================ =========================== - System :data:`platform` value + System ``platform`` value ================ =========================== Linux ``'linux'`` Windows ``'win32'`` diff --git a/Lib/distutils/command/check.py b/Lib/distutils/command/check.py index b67c795..22b9349 100644 --- a/Lib/distutils/command/check.py +++ b/Lib/distutils/command/check.py @@ -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: diff --git a/Lib/distutils/config.py b/Lib/distutils/config.py index 5b625f3..1fd5334 100644 --- a/Lib/distutils/config.py +++ b/Lib/distutils/config.py @@ -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.""" diff --git a/Lib/distutils/dir_util.py b/Lib/distutils/dir_util.py index 30daf49..2826ff8 100644 --- a/Lib/distutils/dir_util.py +++ b/Lib/distutils/dir_util.py @@ -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: diff --git a/Lib/distutils/tests/test_dir_util.py b/Lib/distutils/tests/test_dir_util.py index ce74589..1589f12 100644 --- a/Lib/distutils/tests/test_dir_util.py +++ b/Lib/distutils/tests/test_dir_util.py @@ -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') diff --git a/Lib/distutils/tests/test_register.py b/Lib/distutils/tests/test_register.py index 5863ae1..a86b860 100644 --- a/Lib/distutils/tests/test_register.py +++ b/Lib/distutils/tests/test_register.py @@ -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() diff --git a/Lib/distutils/tests/test_sdist.py b/Lib/distutils/tests/test_sdist.py index 1ba2a1a..e6359d6 100644 --- a/Lib/distutils/tests/test_sdist.py +++ b/Lib/distutils/tests/test_sdist.py @@ -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() @@ -242,6 +242,7 @@ David Costanzo Scott Cotton Greg Couch David Cournapeau +Julien Courteau Steve Cousins Alex Coventry Matthew Dixon Cowles @@ -564,6 +565,7 @@ Julien Jehannet Drew Jenkins Flemming Kjær Jensen Philip H. Jensen +Philip Jenvey MunSic Jeong Chris Jerdonek Jim Jewett @@ -685,6 +687,7 @@ John J. Lee Thomas Lee Tennessee Leeuwenburg Luc Lefebvre +Pierre Paul Lefebvre Glyph Lefkowitz Vincent Legoll Kip Lehman @@ -110,6 +110,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. |