Hello community,

here is the log from the commit of package python3-setuptools for 
openSUSE:Factory checked in at 2016-08-10 19:55:11
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python3-setuptools (Old)
 and      /work/SRC/openSUSE:Factory/.python3-setuptools.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python3-setuptools"

Changes:
--------
--- /work/SRC/openSUSE:Factory/python3-setuptools/python3-setuptools.changes    
2016-08-03 11:39:59.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.python3-setuptools.new/python3-setuptools.changes   
    2016-08-10 19:55:14.000000000 +0200
@@ -1,0 +2,27 @@
+Sat Aug  6 02:42:11 UTC 2016 - [email protected]
+
+- update to version 25.1.6:
+  * #725
+
+- changes from version 25.1.5:
+  * #720
+  * #723
+
+- changes from version 25.1.4:
+  * #717
+  * #713
+  * #707 via #715
+
+- changes from version 25.1.3:
+  * #714 and #704: Revert fix as it breaks other components downstream
+    that can't handle unicode. See #709, #710, and #712.
+
+- changes from version 25.1.2:
+  * #704: Fix errors when installing a zip sdist that contained files
+    named with non-ascii characters on Windows would crash the
+    install when it attempted to clean up the build.
+  * #646: MSVC compatibility - catch errors properly in
+    RegistryInfo.lookup.
+  * #702: Prevent UnboundLocalError when initial working_set is empty.
+
+-------------------------------------------------------------------

Old:
----
  setuptools-25.1.1.tar.gz

New:
----
  setuptools-25.1.6.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python3-setuptools.spec ++++++
--- /var/tmp/diff_new_pack.kHSUfs/_old  2016-08-10 19:55:15.000000000 +0200
+++ /var/tmp/diff_new_pack.kHSUfs/_new  2016-08-10 19:55:15.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           python3-setuptools
-Version:        25.1.1
+Version:        25.1.6
 Release:        0
 Url:            http://pypi.python.org/pypi/setuptools
 Summary:        Easily download, build, install, upgrade, and uninstall Python 
packages

++++++ setuptools-25.1.1.tar.gz -> setuptools-25.1.6.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/CHANGES.rst 
new/setuptools-25.1.6/CHANGES.rst
--- old/setuptools-25.1.1/CHANGES.rst   2016-07-28 21:01:16.000000000 +0200
+++ new/setuptools-25.1.6/CHANGES.rst   2016-08-05 18:15:48.000000000 +0200
@@ -2,6 +2,42 @@
 CHANGES
 =======
 
+v25.1.6
+-------
+
+* #725
+
+v25.1.5
+-------
+
+* #720
+* #723
+
+v25.1.4
+-------
+
+* #717
+* #713
+* #707 via #715
+
+v25.1.3
+-------
+
+* #714 and #704: Revert fix as it breaks other components
+  downstream that can't handle unicode. See #709, #710,
+  and #712.
+
+v25.1.2
+-------
+
+* #704: Fix errors when installing a zip sdist that contained
+  files named with non-ascii characters on Windows would
+  crash the install when it attempted to clean up the build.
+* #646: MSVC compatibility - catch errors properly in
+  RegistryInfo.lookup.
+* #702: Prevent UnboundLocalError when initial working_set
+  is empty.
+
 v25.1.1
 -------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/PKG-INFO 
new/setuptools-25.1.6/PKG-INFO
--- old/setuptools-25.1.1/PKG-INFO      2016-07-28 21:01:42.000000000 +0200
+++ new/setuptools-25.1.6/PKG-INFO      2016-08-05 18:16:14.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: setuptools
-Version: 25.1.1
+Version: 25.1.6
 Summary: Easily download, build, install, upgrade, and uninstall Python 
packages
 Home-page: https://github.com/pypa/setuptools
 Author: Python Packaging Authority
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/pkg_resources/__init__.py 
new/setuptools-25.1.6/pkg_resources/__init__.py
--- old/setuptools-25.1.1/pkg_resources/__init__.py     2016-07-28 
21:01:16.000000000 +0200
+++ new/setuptools-25.1.6/pkg_resources/__init__.py     2016-08-05 
18:15:48.000000000 +0200
@@ -1468,16 +1468,11 @@
     def has_metadata(self, name):
         return self.egg_info and self._has(self._fn(self.egg_info, name))
 
-    if sys.version_info <= (3,):
-        def get_metadata(self, name):
-            if not self.egg_info:
-                return ""
-            return self._get(self._fn(self.egg_info, name))
-    else:
-        def get_metadata(self, name):
-            if not self.egg_info:
-                return ""
-            return self._get(self._fn(self.egg_info, name)).decode("utf-8")
+    def get_metadata(self, name):
+        if not self.egg_info:
+            return ""
+        value = self._get(self._fn(self.egg_info, name))
+        return value.decode('utf-8') if six.PY3 else value
 
     def get_metadata_lines(self, name):
         return yield_lines(self.get_metadata(name))
@@ -2981,6 +2976,7 @@
     # ensure that all distributions added to the working set in the future
     # (e.g. by calling ``require()``) will get activated as well,
     # with higher priority (replace=True).
+    dist = None # ensure dist is defined for del dist below
     for dist in working_set:
         dist.activate(replace=False)
     del dist
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/setup.cfg 
new/setuptools-25.1.6/setup.cfg
--- old/setuptools-25.1.1/setup.cfg     2016-07-28 21:01:42.000000000 +0200
+++ new/setuptools-25.1.6/setup.cfg     2016-08-05 18:16:14.000000000 +0200
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 25.1.1
+current_version = 25.1.6
 commit = True
 tag = True
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/setup.py 
new/setuptools-25.1.6/setup.py
--- old/setuptools-25.1.1/setup.py      2016-07-28 21:01:16.000000000 +0200
+++ new/setuptools-25.1.6/setup.py      2016-08-05 18:15:48.000000000 +0200
@@ -88,7 +88,7 @@
 
 setup_params = dict(
     name="setuptools",
-    version="25.1.1",
+    version="25.1.6",
     description="Easily download, build, install, upgrade, and uninstall "
         "Python packages",
     author="Python Packaging Authority",
@@ -167,11 +167,11 @@
         """).strip().splitlines(),
     extras_require={
         "ssl:sys_platform=='win32'": "wincertstore==0.2",
-        "certs": "certifi==2016.2.28",
+        "certs": "certifi==2016.8.2",
     },
     dependency_links=[
         pypi_link(
-            'certifi-2016.2.28.tar.gz#md5=5d672aa766e1f773c75cfeccd02d3650',
+            'certifi-2016.8.2.tar.gz#md5=004ae166985d3a684bcac5368e22ed63',
         ),
         pypi_link(
             'wincertstore-0.2.zip#md5=ae728f2f007185648d0c7a8679b361e2',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/setuptools/archive_util.py 
new/setuptools-25.1.6/setuptools/archive_util.py
--- old/setuptools-25.1.1/setuptools/archive_util.py    2016-07-28 
21:01:16.000000000 +0200
+++ new/setuptools-25.1.6/setuptools/archive_util.py    2016-08-05 
18:15:48.000000000 +0200
@@ -1,11 +1,5 @@
 """Utilities for extracting common archive formats"""
 
-
-__all__ = [
-    "unpack_archive", "unpack_zipfile", "unpack_tarfile", "default_filter",
-    "UnrecognizedFormat", "extraction_drivers", "unpack_directory",
-]
-
 import zipfile
 import tarfile
 import os
@@ -13,9 +7,16 @@
 import posixpath
 import contextlib
 from distutils.errors import DistutilsError
+
 from pkg_resources import ensure_directory, ContextualZipFile
 
 
+__all__ = [
+    "unpack_archive", "unpack_zipfile", "unpack_tarfile", "default_filter",
+    "UnrecognizedFormat", "extraction_drivers", "unpack_directory",
+]
+
+
 class UnrecognizedFormat(DistutilsError):
     """Couldn't recognize the archive type"""
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/setuptools/command/bdist_egg.py 
new/setuptools-25.1.6/setuptools/command/bdist_egg.py
--- old/setuptools-25.1.1/setuptools/command/bdist_egg.py       2016-07-28 
21:01:16.000000000 +0200
+++ new/setuptools-25.1.6/setuptools/command/bdist_egg.py       2016-08-05 
18:15:48.000000000 +0200
@@ -129,7 +129,7 @@
             self.distribution.data_files.append(item)
 
         try:
-            log.info("installing package data to %s" % self.bdist_dir)
+            log.info("installing package data to %s", self.bdist_dir)
             self.call_command('install_data', force=0, root=None)
         finally:
             self.distribution.data_files = old
@@ -152,7 +152,7 @@
         self.run_command("egg_info")
         # We run install_lib before install_data, because some data hacks
         # pull their data path from the install_lib command.
-        log.info("installing library code to %s" % self.bdist_dir)
+        log.info("installing library code to %s", self.bdist_dir)
         instcmd = self.get_finalized_command('install')
         old_root = instcmd.root
         instcmd.root = None
@@ -169,7 +169,7 @@
             pyfile = os.path.join(self.bdist_dir, strip_module(filename) +
                                   '.py')
             self.stubs.append(pyfile)
-            log.info("creating stub loader for %s" % ext_name)
+            log.info("creating stub loader for %s", ext_name)
             if not self.dry_run:
                 write_stub(os.path.basename(ext_name), pyfile)
             to_compile.append(pyfile)
@@ -186,14 +186,14 @@
         self.mkpath(egg_info)
         if self.distribution.scripts:
             script_dir = os.path.join(egg_info, 'scripts')
-            log.info("installing scripts to %s" % script_dir)
+            log.info("installing scripts to %s", script_dir)
             self.call_command('install_scripts', install_dir=script_dir,
                               no_ep=1)
 
         self.copy_metadata_to(egg_info)
         native_libs = os.path.join(egg_info, "native_libs.txt")
         if all_outputs:
-            log.info("writing %s" % native_libs)
+            log.info("writing %s", native_libs)
             if not self.dry_run:
                 ensure_directory(native_libs)
                 libs_file = open(native_libs, 'wt')
@@ -201,7 +201,7 @@
                 libs_file.write('\n')
                 libs_file.close()
         elif os.path.isfile(native_libs):
-            log.info("removing %s" % native_libs)
+            log.info("removing %s", native_libs)
             if not self.dry_run:
                 os.unlink(native_libs)
 
@@ -458,7 +458,7 @@
                 p = path[len(base_dir) + 1:]
                 if not dry_run:
                     z.write(path, p)
-                log.debug("adding '%s'" % p)
+                log.debug("adding '%s'", p)
 
     compression = zipfile.ZIP_DEFLATED if compress else zipfile.ZIP_STORED
     if not dry_run:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/setuptools/command/easy_install.py 
new/setuptools-25.1.6/setuptools/command/easy_install.py
--- old/setuptools-25.1.1/setuptools/command/easy_install.py    2016-07-28 
21:01:16.000000000 +0200
+++ new/setuptools-25.1.6/setuptools/command/easy_install.py    2016-08-05 
18:15:48.000000000 +0200
@@ -2230,39 +2230,7 @@
 
 
 def rmtree(path, ignore_errors=False, onerror=auto_chmod):
-    """Recursively delete a directory tree.
-
-    This code is taken from the Python 2.4 version of 'shutil', because
-    the 2.3 version doesn't really work right.
-    """
-    if ignore_errors:
-        def onerror(*args):
-            pass
-    elif onerror is None:
-        def onerror(*args):
-            raise
-    names = []
-    try:
-        names = os.listdir(path)
-    except os.error:
-        onerror(os.listdir, path, sys.exc_info())
-    for name in names:
-        fullname = os.path.join(path, name)
-        try:
-            mode = os.lstat(fullname).st_mode
-        except os.error:
-            mode = 0
-        if stat.S_ISDIR(mode):
-            rmtree(fullname, ignore_errors, onerror)
-        else:
-            try:
-                os.remove(fullname)
-            except os.error:
-                onerror(os.remove, fullname, sys.exc_info())
-    try:
-        os.rmdir(path)
-    except os.error:
-        onerror(os.rmdir, path, sys.exc_info())
+    return shutil.rmtree(path, ignore_errors, onerror)
 
 
 def current_umask():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/setuptools/extension.py 
new/setuptools-25.1.6/setuptools/extension.py
--- old/setuptools-25.1.1/setuptools/extension.py       2016-07-28 
21:01:16.000000000 +0200
+++ new/setuptools-25.1.6/setuptools/extension.py       2016-08-05 
18:15:48.000000000 +0200
@@ -19,7 +19,7 @@
     """
     Return True if Cython can be imported.
     """
-    cython_impl = 'Cython.Distutils.build_ext',
+    cython_impl = 'Cython.Distutils.build_ext'
     try:
         # from (cython_impl) import build_ext
         __import__(cython_impl, fromlist=['build_ext']).build_ext
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/setuptools/msvc.py 
new/setuptools-25.1.6/setuptools/msvc.py
--- old/setuptools-25.1.1/setuptools/msvc.py    2016-07-28 21:01:16.000000000 
+0200
+++ new/setuptools-25.1.6/setuptools/msvc.py    2016-08-05 18:15:48.000000000 
+0200
@@ -357,22 +357,11 @@
         self.pi = platform_info
 
     @property
-    def microsoft(self):
-        """
-        Microsoft software registry key.
-        """
-        return os.path.join(
-            'Software',
-            '' if self.pi.current_is_x86() else 'Wow6432Node',
-            'Microsoft',
-        )
-
-    @property
     def visualstudio(self):
         """
         Microsoft Visual Studio root registry key.
         """
-        return os.path.join(self.microsoft, 'VisualStudio')
+        return 'VisualStudio'
 
     @property
     def sxs(self):
@@ -400,15 +389,14 @@
         """
         Microsoft Visual C++ for Python registry key.
         """
-        path = r'DevDiv\VCForPython'
-        return os.path.join(self.microsoft, path)
+        return r'DevDiv\VCForPython'
 
     @property
     def microsoft_sdk(self):
         """
         Microsoft SDK registry key.
         """
-        return os.path.join(self.microsoft, 'Microsoft SDKs')
+        return 'Microsoft SDKs'
 
     @property
     def windows_sdk(self):
@@ -429,11 +417,29 @@
         """
         Microsoft Windows Kits Roots registry key.
         """
-        return os.path.join(self.microsoft, r'Windows Kits\Installed Roots')
+        return r'Windows Kits\Installed Roots'
+
+    def microsoft(self, key, x86=False):
+        """
+        Return key in Microsoft software registry.
+
+        Parameters
+        ----------
+        key: str
+            Registry key path where look.
+        x86: str
+            Force x86 software registry.
+
+        Return
+        ------
+        str: value
+        """
+        node64 = '' if self.pi.current_is_x86() or x86 else r'\Wow6432Node'
+        return os.path.join('Software', node64, 'Microsoft', key)
 
     def lookup(self, key, name):
         """
-        Look for values in registry.
+        Look for values in registry in Microsoft software registry.
 
         Parameters
         ----------
@@ -446,14 +452,23 @@
         ------
         str: value
         """
+        KEY_READ = winreg.KEY_READ
+        openkey = winreg.OpenKey
+        ms = self.microsoft
         for hkey in self.HKEYS:
             try:
-                bkey = winreg.OpenKey(hkey, key, 0, winreg.KEY_READ)
-            except IOError:
-                continue
+                bkey = openkey(hkey, ms(key), 0, KEY_READ)
+            except (OSError, IOError):
+                if not self.pi.current_is_x86():
+                    try:
+                        bkey = openkey(hkey, ms(key, True), 0, KEY_READ)
+                    except (OSError, IOError):
+                        continue
+                else:
+                    continue
             try:
                 return winreg.QueryValueEx(bkey, name)[0]
-            except IOError:
+            except (OSError, IOError):
                 pass
 
 
@@ -496,7 +511,7 @@
             for key in vckeys:
                 try:
                     bkey = winreg.OpenKey(hkey, key, 0, winreg.KEY_READ)
-                except IOError:
+                except (OSError, IOError):
                     continue
                 subkeys, values, _ = winreg.QueryInfoKey(bkey)
                 for i in range(values):
@@ -809,7 +824,7 @@
         Microsoft Visual C++ & Microsoft Foundation Class Includes
         """
         return [os.path.join(self.si.VCInstallDir, 'Include'),
-                os.path.join(self.si.VCInstallDir, 'ATLMFC\Include')]
+                os.path.join(self.si.VCInstallDir, r'ATLMFC\Include')]
 
     @property
     def VCLibraries(self):
@@ -1195,5 +1210,5 @@
             if name:
                 return '%s\\' % name[0]
             return ''
-        except IOError:
+        except (OSError, IOError):
             return ''
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/setuptools/package_index.py 
new/setuptools-25.1.6/setuptools/package_index.py
--- old/setuptools-25.1.1/setuptools/package_index.py   2016-07-28 
21:01:16.000000000 +0200
+++ new/setuptools-25.1.6/setuptools/package_index.py   2016-08-05 
18:15:48.000000000 +0200
@@ -290,7 +290,12 @@
         self.package_pages = {}
         self.allows = re.compile('|'.join(map(translate, hosts))).match
         self.to_scan = []
-        if verify_ssl and ssl_support.is_available and (ca_bundle or 
ssl_support.find_ca_bundle()):
+        use_ssl = (
+            verify_ssl
+            and ssl_support.is_available
+            and (ca_bundle or ssl_support.find_ca_bundle())
+        )
+        if use_ssl:
             self.opener = ssl_support.opener_for(ca_bundle)
         else:
             self.opener = urllib.request.urlopen
@@ -320,7 +325,8 @@
 
         self.info("Reading %s", url)
         self.fetched_urls[url] = True   # prevent multiple fetch attempts
-        f = self.open_url(url, "Download error on %s: %%s -- Some packages may 
not be found!" % url)
+        tmpl = "Download error on %s: %%s -- Some packages may not be found!"
+        f = self.open_url(url, tmpl % url)
         if f is None:
             return
         self.fetched_urls[f.url] = True
@@ -362,7 +368,8 @@
 
     def url_ok(self, url, fatal=False):
         s = URL_SCHEME(url)
-        if (s and s.group(1).lower() == 'file') or 
self.allows(urllib.parse.urlparse(url)[1]):
+        is_file = s and s.group(1).lower() == 'file'
+        if is_file or self.allows(urllib.parse.urlparse(url)[1]):
             return True
         msg = ("\nNote: Bypassing %s (disallowed host; see "
             "http://bit.ly/1dg9ijs for details).\n")
@@ -1039,7 +1046,7 @@
         if cred:
             auth = str(cred)
             info = cred.username, url
-            log.info('Authenticating as %s for %s (from .pypirc)' % info)
+            log.info('Authenticating as %s for %s (from .pypirc)', *info)
 
     if auth:
         auth = "Basic " + _encode_auth(auth)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/setuptools/tests/fixtures.py 
new/setuptools-25.1.6/setuptools/tests/fixtures.py
--- old/setuptools-25.1.1/setuptools/tests/fixtures.py  2016-07-28 
21:01:16.000000000 +0200
+++ new/setuptools-25.1.6/setuptools/tests/fixtures.py  2016-08-05 
18:15:48.000000000 +0200
@@ -1,24 +1,20 @@
-try:
-    from unittest import mock
-except ImportError:
-    import mock
 import pytest
 
 from . import contexts
 
 
 @pytest.yield_fixture
-def user_override():
+def user_override(monkeypatch):
     """
     Override site.USER_BASE and site.USER_SITE with temporary directories in
     a context.
     """
     with contexts.tempdir() as user_base:
-        with mock.patch('site.USER_BASE', user_base):
-            with contexts.tempdir() as user_site:
-                with mock.patch('site.USER_SITE', user_site):
-                    with contexts.save_user_site_setting():
-                        yield
+        monkeypatch.setattr('site.USER_BASE', user_base)
+        with contexts.tempdir() as user_site:
+            monkeypatch.setattr('site.USER_SITE', user_site)
+            with contexts.save_user_site_setting():
+                yield
 
 
 @pytest.yield_fixture
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/setuptools-25.1.1/setuptools/tests/test_archive_util.py 
new/setuptools-25.1.6/setuptools/tests/test_archive_util.py
--- old/setuptools-25.1.1/setuptools/tests/test_archive_util.py 1970-01-01 
01:00:00.000000000 +0100
+++ new/setuptools-25.1.6/setuptools/tests/test_archive_util.py 2016-08-05 
18:15:48.000000000 +0200
@@ -0,0 +1,56 @@
+# coding: utf-8
+
+from setuptools.extern import six
+
+import pytest
+
+from setuptools import archive_util
+
+
[email protected]
+def tarfile_with_unicode(tmpdir):
+    """
+    Create a tarfile containing only a file whose name is
+    a zero byte file called testimàˆge.png.
+
+    TODO: Is it possible to generate this file programmatically?
+    """
+    data = (
+        b'\x1f\x8b\x08\x00R\xfe\x9fW\x00\x03\xed\xd6AO\x13A\x14\x00'
+        b'\xe0\x11b\x8c\x8d\' z\xf02\x07=x\xd9\xce\xcc\xce\xec\xd4\xc3'
+        b'&\xa21\xb4X\\lI\xa3r0\xc3v\xc1\x8a\xec6\xcbbz3\x1cH\x80x\x93'
+        b'x\xeaQ\x12\x13\x0f$z\xd5\x13\x17\xa9U\x8e&\xfc\x06\x13\xff'
+        b'\x82\xb3\xa5\n\xb6J!\x16\x8c\xf0\xbed2\x9d\xd7\xe9v\xba\xb3'
+        b'\xafo\x8c\xe4\xa8\xaa\xa4=U\xf4\xc2\xa4\xf1 \xf2f\xa3\xd2\xcc'
+        b'\xfa\xcb)\xcf(\xfbS\xa8K\x08!\x16\xe78\xee\xa5%\x1a=a\xdb'
+        b'\xe3\x06FLL\x99\xe4R#\x9cbB%\xa5\x1c\xe1J\xb7\x16\xb0\x97'
+        b'\xb9\xd9H\x85z)\x8fT\xa8\xdc\xe0\xcf\xf3\xf4\xb4\xc9\xc9=\xae'
+        b'\xb3\xfdS\xf0\xcf\xfe?\xc1$.\xab\xe8\xa1m\xb4\xed~\x82\x11'
+        b'\xec\xea\xb1gS.\t%&e,\x8e\xa9\xdd1"S\tf\xe2\xfc\x8dt&{\xcf(zO'
+        b'lj\xe9]d\x8c\xec\n\x97\xfc\xc0\xe6\xdc\x12\x84\x9a2AS?\xc2\xfe'
+        b'\xe3\x92?m\xd3\xc4\xbf\xbe\x05\'Z\xfb\xbew\xff;:\xe5\xbf)dK\xfe'
+        b'\x0b*\x04\xc2\xa4\xfbKiw\xc2\xf3\x1f\x9d>\x7f\x06\xf5 4\xa2\\'
+        b'\xec\xe4\xf1]\xdc\x14\xc7\xd0Y\xdd\x98n\xefu\x8b\xc7\xdf\xf6w'
+        b'\xc9\xc1\xb1\xb1\\\xf3e\xfc\x89\xaan\xf9\x96)\xa7v\xe2\x17\xdc'
+        b'`\xc6(\x86Ay"\xa8\x18*\x8a\xc2\xd2\xc4\x9c~"\xf5\x9b\x95\xea'
+        b'\xeb\xc2\xf0\x95Z2][[t>\xd63\x9f\xb2K\x9b\x1b\xce\xed\xfa\x9d7'
+        b'\xb9W\x85\xdaH\xf6\xf3\x87z\xef\xd2\xe5\x17+\x03\xf3\x0b\xb9'
+        b'\xbe[}\xf3\xe7V\xab+h\xa8w\xbd\xecl\x86\xfd\xce\xf3\x9e/\xd7'
+        b'\x9e\xbe}\xb6|ih||uk\xeb>z\xb7v\xf1\xeb\xdf\xdf\xafcf\xa7\xfa'
+        b'\x1f\xde\xbf@\xc7\xfa\xcfEK\xfe[B\x10\xa8\xffGAW\xe9F\xfd\xefP'
+        b'\xfb\x894\x7f[\xfb\xcd\x14\xcef\xae\x0f\xe6tE/\xdc4\xdc\xd0'
+        b'\xd33\x02\xbf9\xcbJq}f\xe0t\xdf\'\x04~\x95\xeb0\x9c\x10\x8e'
+        b'\xd0a\xd7\xfeX\xa7\xfc\x8f\xf3\xe5\xd7\xfc\xe7\xc2\xe2P\xff'
+        b'\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
+        b'\x008\xa8\xef\xb1g\xe1Z\x00(\x00\x00'
+    )
+    target = tmpdir / 'unicode-pkg-1.0.tar.gz'
+    with open(str(target), mode='wb') as tf:
+        tf.write(data)
+    return str(target)
+
+
[email protected](reason="#710 and #712")
+def test_unicode_files(tarfile_with_unicode, tmpdir):
+    target = tmpdir / 'out'
+    archive_util.unpack_archive(tarfile_with_unicode, six.text_type(target))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/setuptools/tests/test_dist_info.py 
new/setuptools-25.1.6/setuptools/tests/test_dist_info.py
--- old/setuptools-25.1.1/setuptools/tests/test_dist_info.py    2016-07-28 
21:01:16.000000000 +0200
+++ new/setuptools-25.1.6/setuptools/tests/test_dist_info.py    2016-08-05 
18:15:48.000000000 +0200
@@ -1,8 +1,7 @@
 """Test .dist-info style distributions.
 """
-import os
-import shutil
-import tempfile
+
+from __future__ import unicode_literals
 
 from setuptools.extern.six.moves import map
 
@@ -14,10 +13,48 @@
 
 class TestDistInfo:
 
-    def test_distinfo(self):
+    metadata_base = DALS("""
+        Metadata-Version: 1.2
+        Requires-Dist: splort (==4)
+        Provides-Extra: baz
+        Requires-Dist: quux (>=1.1); extra == 'baz'
+        """)
+
+    @classmethod
+    def build_metadata(cls, **kwargs):
+        lines = (
+            '{key}: {value}\n'.format(**locals())
+            for key, value in kwargs.items()
+        )
+        return cls.metadata_base + ''.join(lines)
+
+    @pytest.fixture
+    def metadata(self, tmpdir):
+        dist_info_name = 'VersionedDistribution-2.718.dist-info'
+        versioned = tmpdir / dist_info_name
+        versioned.mkdir()
+        filename = versioned / 'METADATA'
+        content = self.build_metadata(
+            Name='VersionedDistribution',
+        )
+        filename.write_text(content, encoding='utf-8')
+
+        dist_info_name = 'UnversionedDistribution.dist-info'
+        unversioned = tmpdir / dist_info_name
+        unversioned.mkdir()
+        filename = unversioned / 'METADATA'
+        content = self.build_metadata(
+            Name='UnversionedDistribution',
+            Version='0.3',
+        )
+        filename.write_text(content, encoding='utf-8')
+
+        return str(tmpdir)
+
+    def test_distinfo(self, metadata):
         dists = dict(
             (d.project_name, d)
-            for d in pkg_resources.find_distributions(self.tmpdir)
+            for d in pkg_resources.find_distributions(metadata)
         )
 
         assert len(dists) == 2, dists
@@ -28,46 +65,14 @@
         assert versioned.version == '2.718'  # from filename
         assert unversioned.version == '0.3'  # from METADATA
 
-    def test_conditional_dependencies(self):
+    def test_conditional_dependencies(self, metadata):
         specs = 'splort==4', 'quux>=1.1'
         requires = list(map(pkg_resources.Requirement.parse, specs))
 
-        for d in pkg_resources.find_distributions(self.tmpdir):
+        for d in pkg_resources.find_distributions(metadata):
             assert d.requires() == requires[:1]
             assert d.requires(extras=('baz',)) == [
                 requires[0],
-                pkg_resources.Requirement.parse('quux>=1.1;extra=="baz"')]
+                pkg_resources.Requirement.parse('quux>=1.1;extra=="baz"'),
+            ]
             assert d.extras == ['baz']
-
-    metadata_template = DALS("""
-        Metadata-Version: 1.2
-        Name: {name}
-        {version}
-        Requires-Dist: splort (==4)
-        Provides-Extra: baz
-        Requires-Dist: quux (>=1.1); extra == 'baz'
-        """)
-
-    def setup_method(self, method):
-        self.tmpdir = tempfile.mkdtemp()
-        dist_info_name = 'VersionedDistribution-2.718.dist-info'
-        versioned = os.path.join(self.tmpdir, dist_info_name)
-        os.mkdir(versioned)
-        with open(os.path.join(versioned, 'METADATA'), 'w+') as metadata_file:
-            metadata = self.metadata_template.format(
-                name='VersionedDistribution',
-                version='',
-            ).replace('\n\n', '\n')
-            metadata_file.write(metadata)
-        dist_info_name = 'UnversionedDistribution.dist-info'
-        unversioned = os.path.join(self.tmpdir, dist_info_name)
-        os.mkdir(unversioned)
-        with open(os.path.join(unversioned, 'METADATA'), 'w+') as 
metadata_file:
-            metadata = self.metadata_template.format(
-                name='UnversionedDistribution',
-                version='Version: 0.3',
-            )
-            metadata_file.write(metadata)
-
-    def teardown_method(self, method):
-        shutil.rmtree(self.tmpdir)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/setuptools-25.1.1/setuptools/tests/test_easy_install.py 
new/setuptools-25.1.6/setuptools/tests/test_easy_install.py
--- old/setuptools-25.1.1/setuptools/tests/test_easy_install.py 2016-07-28 
21:01:16.000000000 +0200
+++ new/setuptools-25.1.6/setuptools/tests/test_easy_install.py 2016-08-05 
18:15:48.000000000 +0200
@@ -14,6 +14,7 @@
 import itertools
 import distutils.errors
 import io
+import zipfile
 
 import time
 from setuptools.extern.six.moves import urllib
@@ -135,6 +136,60 @@
         monkeypatch.delattr(site, 'getsitepackages', raising=False)
         assert ei.get_site_dirs()
 
+    @pytest.fixture
+    def sdist_unicode(self, tmpdir):
+        files = [
+            (
+                'setup.py',
+                DALS("""
+                    import setuptools
+                    setuptools.setup(
+                        name="setuptools-test-unicode",
+                        version="1.0",
+                        packages=["mypkg"],
+                        include_package_data=True,
+                    )
+                    """),
+            ),
+            (
+                'mypkg/__init__.py',
+                "",
+            ),
+            (
+                u'mypkg/\u2603.txt',
+                "",
+            ),
+        ]
+        sdist_name = 'setuptools-test-unicode-1.0.zip'
+        sdist = tmpdir / sdist_name
+        # can't use make_sdist, because the issue only occurs
+        #  with zip sdists.
+        sdist_zip = zipfile.ZipFile(str(sdist), 'w')
+        for filename, content in files:
+            sdist_zip.writestr(filename, content)
+        sdist_zip.close()
+        return str(sdist)
+
+    @pytest.mark.xfail(reason="#709 and #710")
+    # also
+    #@pytest.mark.xfail(setuptools.tests.is_ascii,
+    #    reason="https://github.com/pypa/setuptools/issues/706";)
+    def test_unicode_filename_in_sdist(self, sdist_unicode, tmpdir, 
monkeypatch):
+        """
+        The install command should execute correctly even if
+        the package has unicode filenames.
+        """
+        dist = Distribution({'script_args': ['easy_install']})
+        target = (tmpdir / 'target').ensure_dir()
+        cmd = ei.easy_install(
+            dist,
+            install_dir=str(target),
+            args=['x'],
+        )
+        monkeypatch.setitem(os.environ, 'PYTHONPATH', str(target))
+        cmd.ensure_finalized()
+        cmd.easy_install(sdist_unicode)
+
 
 class TestPTHFileWriter:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/setuptools/tests/test_msvc.py 
new/setuptools-25.1.6/setuptools/tests/test_msvc.py
--- old/setuptools-25.1.1/setuptools/tests/test_msvc.py 2016-07-28 
21:01:16.000000000 +0200
+++ new/setuptools-25.1.6/setuptools/tests/test_msvc.py 2016-08-05 
18:15:48.000000000 +0200
@@ -6,6 +6,8 @@
 import contextlib
 import distutils.errors
 
+from setuptools.extern import six
+
 import pytest
 try:
     from unittest import mock
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/setuptools.egg-info/PKG-INFO 
new/setuptools-25.1.6/setuptools.egg-info/PKG-INFO
--- old/setuptools-25.1.1/setuptools.egg-info/PKG-INFO  2016-07-28 
21:01:42.000000000 +0200
+++ new/setuptools-25.1.6/setuptools.egg-info/PKG-INFO  2016-08-05 
18:16:14.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: setuptools
-Version: 25.1.1
+Version: 25.1.6
 Summary: Easily download, build, install, upgrade, and uninstall Python 
packages
 Home-page: https://github.com/pypa/setuptools
 Author: Python Packaging Authority
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/setuptools.egg-info/SOURCES.txt 
new/setuptools-25.1.6/setuptools.egg-info/SOURCES.txt
--- old/setuptools-25.1.1/setuptools.egg-info/SOURCES.txt       2016-07-28 
21:01:42.000000000 +0200
+++ new/setuptools-25.1.6/setuptools.egg-info/SOURCES.txt       2016-08-05 
18:16:14.000000000 +0200
@@ -114,6 +114,7 @@
 setuptools/tests/py26compat.py
 setuptools/tests/script-with-bom.py
 setuptools/tests/server.py
+setuptools/tests/test_archive_util.py
 setuptools/tests/test_bdist_egg.py
 setuptools/tests/test_build_ext.py
 setuptools/tests/test_build_py.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/setuptools-25.1.1/setuptools.egg-info/dependency_links.txt 
new/setuptools-25.1.6/setuptools.egg-info/dependency_links.txt
--- old/setuptools-25.1.1/setuptools.egg-info/dependency_links.txt      
2016-07-28 21:01:42.000000000 +0200
+++ new/setuptools-25.1.6/setuptools.egg-info/dependency_links.txt      
2016-08-05 18:16:14.000000000 +0200
@@ -1,2 +1,2 @@
-https://pypi.python.org/packages/source/c/certifi/certifi-2016.2.28.tar.gz#md5=5d672aa766e1f773c75cfeccd02d3650
+https://pypi.python.org/packages/source/c/certifi/certifi-2016.8.2.tar.gz#md5=004ae166985d3a684bcac5368e22ed63
 
https://pypi.python.org/packages/source/w/wincertstore/wincertstore-0.2.zip#md5=ae728f2f007185648d0c7a8679b361e2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/setuptools-25.1.1/setuptools.egg-info/requires.txt 
new/setuptools-25.1.6/setuptools.egg-info/requires.txt
--- old/setuptools-25.1.1/setuptools.egg-info/requires.txt      2016-07-28 
21:01:42.000000000 +0200
+++ new/setuptools-25.1.6/setuptools.egg-info/requires.txt      2016-08-05 
18:16:14.000000000 +0200
@@ -1,6 +1,6 @@
 
 [certs]
-certifi==2016.2.28
+certifi==2016.8.2
 
 [ssl:sys_platform=='win32']
 wincertstore==0.2


Reply via email to