[Python-checkins] distutils2: Remove usage of stdlib shutil.

eric.araujo python-checkins at python.org
Mon Nov 21 14:21:37 CET 2011


http://hg.python.org/distutils2/rev/c1b1b537196d
changeset:   1257:c1b1b537196d
user:        Éric Araujo <merwok at netwok.org>
date:        Sun Nov 20 18:51:32 2011 +0100
summary:
  Remove usage of stdlib shutil.

This should help avoiding issues like #13170.

Because of implicit relative imports, _backport.tarfile already imported
shutil from the backports instead of the stdlib; I have inlined the only
function it needed to remove the circular dependency between these
modules.

files:
  distutils2/_backport/shutil.py               |  7 +------
  distutils2/_backport/tarfile.py              |  7 +++++--
  distutils2/_backport/tests/test_sysconfig.py |  2 +-
  distutils2/command/bdist_dumb.py             |  2 +-
  distutils2/command/bdist_msi.py              |  3 +--
  distutils2/command/bdist_wininst.py          |  3 +--
  distutils2/command/clean.py                  |  5 +++--
  distutils2/command/install_distinfo.py       |  2 +-
  distutils2/compiler/ccompiler.py             |  2 +-
  distutils2/create.py                         |  3 +--
  distutils2/tests/support.py                  |  3 +--
  distutils2/tests/test_command_test.py        |  2 +-
  distutils2/tests/test_command_upload_docs.py |  2 +-
  distutils2/tests/test_database.py            |  2 +-
  distutils2/tests/test_pypi_dist.py           |  5 +++--
  distutils2/util.py                           |  3 +--
  16 files changed, 24 insertions(+), 29 deletions(-)


diff --git a/distutils2/_backport/shutil.py b/distutils2/_backport/shutil.py
--- a/distutils2/_backport/shutil.py
+++ b/distutils2/_backport/shutil.py
@@ -10,6 +10,7 @@
 from os.path import abspath
 import fnmatch
 import errno
+from distutils2._backport import tarfile
 
 try:
     import bz2
@@ -407,10 +408,6 @@
             os.makedirs(archive_dir)
 
     # creating the tarball
-    # XXX late import because of circular dependency between shutil and
-    # tarfile :(
-    from distutils2._backport import tarfile
-
     if logger is not None:
         logger.info('Creating tar archive')
 
@@ -700,8 +697,6 @@
 def _unpack_tarfile(filename, extract_dir):
     """Unpack tar/tar.gz/tar.bz2 `filename` to `extract_dir`
     """
-    # late import because of circular dependency
-    from distutils2._backport import tarfile
     try:
         tarobj = tarfile.open(filename)
     except tarfile.TarError:
diff --git a/distutils2/_backport/tarfile.py b/distutils2/_backport/tarfile.py
--- a/distutils2/_backport/tarfile.py
+++ b/distutils2/_backport/tarfile.py
@@ -43,7 +43,6 @@
 #---------
 import sys
 import os
-import shutil
 import stat
 import errno
 import time
@@ -256,7 +255,11 @@
     if length == 0:
         return
     if length is None:
-        shutil.copyfileobj(src, dst)
+        while 1:
+            buf = src.read(16*1024)
+            if not buf:
+                break
+            dst.write(buf)
         return
 
     BUFSIZE = 16 * 1024
diff --git a/distutils2/_backport/tests/test_sysconfig.py b/distutils2/_backport/tests/test_sysconfig.py
--- a/distutils2/_backport/tests/test_sysconfig.py
+++ b/distutils2/_backport/tests/test_sysconfig.py
@@ -1,10 +1,10 @@
 import os
 import sys
 import subprocess
-import shutil
 from copy import copy
 from StringIO import StringIO
 
+from distutils2._backport import shutil
 from distutils2._backport import sysconfig
 from distutils2._backport.sysconfig import (
     get_paths, get_platform, get_config_vars, get_path, get_path_names,
diff --git a/distutils2/command/bdist_dumb.py b/distutils2/command/bdist_dumb.py
--- a/distutils2/command/bdist_dumb.py
+++ b/distutils2/command/bdist_dumb.py
@@ -5,12 +5,12 @@
 """
 
 import os
-from shutil import rmtree
 
 from distutils2.util import get_platform
 from distutils2.command.cmd import Command
 from distutils2.errors import PackagingPlatformError
 from distutils2 import logger
+from distutils2._backport.shutil import rmtree
 from distutils2._backport.sysconfig import get_python_version
 
 
diff --git a/distutils2/command/bdist_msi.py b/distutils2/command/bdist_msi.py
--- a/distutils2/command/bdist_msi.py
+++ b/distutils2/command/bdist_msi.py
@@ -7,9 +7,8 @@
 import os
 import msilib
 
-
+from distutils2._backport.shutil import rmtree
 from distutils2._backport.sysconfig import get_python_version
-from shutil import rmtree
 from distutils2.command.cmd import Command
 from distutils2.version import NormalizedVersion
 from distutils2.errors import PackagingOptionError
diff --git a/distutils2/command/bdist_wininst.py b/distutils2/command/bdist_wininst.py
--- a/distutils2/command/bdist_wininst.py
+++ b/distutils2/command/bdist_wininst.py
@@ -4,12 +4,11 @@
 import os
 import codecs
 
-from shutil import rmtree
-
 from distutils2.command.cmd import Command
 from distutils2.errors import PackagingOptionError, PackagingPlatformError
 from distutils2 import logger
 from distutils2.util import get_platform
+from distutils2._backport.shutil import rmtree
 from distutils2._backport.sysconfig import get_python_version
 
 
diff --git a/distutils2/command/clean.py b/distutils2/command/clean.py
--- a/distutils2/command/clean.py
+++ b/distutils2/command/clean.py
@@ -3,9 +3,10 @@
 # Contributed by Bastian Kleineidam <calvin at cs.uni-sb.de>
 
 import os
-from shutil import rmtree
+from distutils2 import logger
 from distutils2.command.cmd import Command
-from distutils2 import logger
+from distutils2._backport.shutil import rmtree
+
 
 class clean(Command):
 
diff --git a/distutils2/command/install_distinfo.py b/distutils2/command/install_distinfo.py
--- a/distutils2/command/install_distinfo.py
+++ b/distutils2/command/install_distinfo.py
@@ -5,7 +5,6 @@
 import os
 import csv
 import codecs
-from shutil import rmtree
 try:
     import hashlib
 except ImportError:
@@ -13,6 +12,7 @@
 
 from distutils2 import logger
 from distutils2.command.cmd import Command
+from distutils2._backport.shutil import rmtree
 
 
 class install_distinfo(Command):
diff --git a/distutils2/compiler/ccompiler.py b/distutils2/compiler/ccompiler.py
--- a/distutils2/compiler/ccompiler.py
+++ b/distutils2/compiler/ccompiler.py
@@ -5,11 +5,11 @@
 """
 
 import os
-from shutil import move
 from distutils2 import logger
 from distutils2.util import split_quoted, execute, newer_group, spawn
 from distutils2.errors import CompileError, LinkError, UnknownFileError
 from distutils2.compiler import gen_preprocess_options
+from distutils2._backport.shutil import move
 
 
 class CCompiler(object):
diff --git a/distutils2/create.py b/distutils2/create.py
--- a/distutils2/create.py
+++ b/distutils2/create.py
@@ -24,7 +24,6 @@
 import sys
 import glob
 import codecs
-import shutil
 from textwrap import dedent
 from ConfigParser import RawConfigParser
 
@@ -34,7 +33,7 @@
 from distutils2._trove import all_classifiers as _CLASSIFIERS_LIST
 from distutils2.compat import detect_encoding
 from distutils2.version import is_valid_version
-from distutils2._backport import sysconfig
+from distutils2._backport import shutil, sysconfig
 try:
     any
 except NameError:
diff --git a/distutils2/tests/support.py b/distutils2/tests/support.py
--- a/distutils2/tests/support.py
+++ b/distutils2/tests/support.py
@@ -37,7 +37,6 @@
 import sys
 import errno
 import codecs
-import shutil
 import logging
 import logging.handlers
 import subprocess
@@ -53,7 +52,7 @@
 from distutils2.command import set_command, _COMMANDS
 
 from distutils2.tests import unittest
-from distutils2._backport import sysconfig
+from distutils2._backport import shutil, sysconfig
 
 # define __all__ to make pydoc more useful
 __all__ = [
diff --git a/distutils2/tests/test_command_test.py b/distutils2/tests/test_command_test.py
--- a/distutils2/tests/test_command_test.py
+++ b/distutils2/tests/test_command_test.py
@@ -1,7 +1,6 @@
 import os
 import re
 import sys
-import shutil
 import unittest as ut1
 import distutils2.database
 
@@ -14,6 +13,7 @@
 from distutils2.command.test import test
 from distutils2.command import set_command
 from distutils2.dist import Distribution
+from distutils2._backport import shutil
 
 
 EXPECTED_OUTPUT_RE = r'''FAIL: test_blah \(myowntestmodule.SomeTest\)
diff --git a/distutils2/tests/test_command_upload_docs.py b/distutils2/tests/test_command_upload_docs.py
--- a/distutils2/tests/test_command_upload_docs.py
+++ b/distutils2/tests/test_command_upload_docs.py
@@ -1,6 +1,5 @@
 """Tests for distutils2.command.upload_docs."""
 import os
-import shutil
 import logging
 import zipfile
 try:
@@ -12,6 +11,7 @@
 from distutils2.command.upload_docs import upload_docs, zip_dir
 from distutils2.dist import Distribution
 from distutils2.errors import PackagingFileError, PackagingOptionError
+from distutils2._backport import shutil
 
 from distutils2.tests import unittest, support
 try:
diff --git a/distutils2/tests/test_database.py b/distutils2/tests/test_database.py
--- a/distutils2/tests/test_database.py
+++ b/distutils2/tests/test_database.py
@@ -1,7 +1,6 @@
 import os
 import csv
 import sys
-import shutil
 import tempfile
 try:
     from hashlib import md5
@@ -22,6 +21,7 @@
     provides_distribution, obsoletes_distribution, get_file_users,
     enable_cache, disable_cache, distinfo_dirname, _yield_distributions,
     get_file, get_file_path)
+from distutils2._backport import shutil
 
 # TODO Add a test for getting a distribution provided by another distribution
 # TODO Add a test for absolute pathed RECORD items (e.g. /etc/myapp/config.ini)
diff --git a/distutils2/tests/test_pypi_dist.py b/distutils2/tests/test_pypi_dist.py
--- a/distutils2/tests/test_pypi_dist.py
+++ b/distutils2/tests/test_pypi_dist.py
@@ -1,11 +1,11 @@
 """Tests for the distutils2.pypi.dist module."""
 
 import os
-import shutil
 from distutils2.version import VersionPredicate
 from distutils2.pypi.dist import (ReleaseInfo, ReleasesList, DistInfo,
-                                 split_archive_name, get_infos_from_url)
+                                  split_archive_name, get_infos_from_url)
 from distutils2.pypi.errors import HashDoesNotMatch, UnsupportedHashName
+from distutils2._backport import shutil
 
 from distutils2.tests import unittest
 from distutils2.tests.support import TempdirManager, requires_zlib, fake_dec
@@ -38,6 +38,7 @@
         # should not fail
         release['sdist']
 
+    @unittest.skip('needs to be written')
     def test_get_unknown_distribution(self):
         # should raise a KeyError
         pass
diff --git a/distutils2/util.py b/distutils2/util.py
--- a/distutils2/util.py
+++ b/distutils2/util.py
@@ -6,7 +6,6 @@
 import sys
 import errno
 import codecs
-import shutil
 import string
 import posixpath
 import subprocess
@@ -26,7 +25,7 @@
 from distutils2.errors import (PackagingPlatformError, PackagingFileError,
                                PackagingExecError, InstallationException,
                                PackagingInternalError)
-from distutils2._backport import sysconfig
+from distutils2._backport import shutil, sysconfig
 
 __all__ = [
     # file dependencies

-- 
Repository URL: http://hg.python.org/distutils2


More information about the Python-checkins mailing list