Hello community,

here is the log from the commit of package python-wheel for openSUSE:Factory 
checked in at 2015-04-07 09:29:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-wheel (Old)
 and      /work/SRC/openSUSE:Factory/.python-wheel.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-wheel"

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-wheel/python-wheel.changes        
2014-02-12 07:08:11.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.python-wheel.new/python-wheel.changes   
2015-04-07 09:29:25.000000000 +0200
@@ -1,0 +2,32 @@
+Wed Apr  1 21:04:26 UTC 2015 - [email protected]
+
+- update to version 0.24.0:
+  * The python tag used for pure-python packages is now .pyN (major
+    version only). This change actually occurred in 0.23.0 when the
+    --python-tag option was added, but was not explicitly mentioned
+    in the changelog then.
+  * wininst2wheel and egg2wheel removed. Use "wheel convert
+    [archive]" instead.
+  * Wheel now supports setuptools style conditional requirements via
+    the extras_require={} syntax. Separate 'extra' names from
+    conditions using the : character. Wheel's own setup.py does
+    this. (The empty-string extra is the same as install_requires.)
+    These conditional requirements should work the same whether the
+    package is installed by wheel or by setup.py.
+- additional changes from 0.23.0:
+  * Compatibiltiy tag flags added to the bdist_wheel command
+  * sdist should include files necessary for tests
+  * 'wheel convert' can now also convert unpacked eggs to wheel
+  * Rename pydist.json to metadata.json to avoid stepping on the PEP
+  * The --skip-scripts option has been removed, and not generating
+    scripts is now the default. The option was a temporary approach
+    until installers could generate scripts themselves. That is now
+    the case with pip 1.5 and later. Note that using pip 1.4 to
+    install a wheel without scripts will leave the installation
+    without entry-point wrappers. The "wheel install-scripts"
+    command can be used to generate the scripts in such cases.
+  * Thank you contributors
+- removed wininst2wheel and egg2wheel:
+  they are not in 0.24.0 anymore
+
+-------------------------------------------------------------------

Old:
----
  wheel-0.22.0.tar.gz

New:
----
  wheel-0.24.0.tar.gz

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

Other differences:
------------------
++++++ python-wheel.spec ++++++
--- /var/tmp/diff_new_pack.8ooODK/_old  2015-04-07 09:29:25.000000000 +0200
+++ /var/tmp/diff_new_pack.8ooODK/_new  2015-04-07 09:29:25.000000000 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-wheel
 #
-# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           python-wheel
-Version:        0.22.0
+Version:        0.24.0
 Release:        0
 Summary:        A built-package format for Python
 License:        MIT
@@ -77,7 +77,7 @@
 %install
 python setup.py install --prefix=%{_prefix} --root=%{buildroot}
 mkdir -p %{buildroot}%{_sysconfdir}/alternatives
-for b in egg2wheel wheel wininst2wheel ; do
+for b in wheel ; do
   mv %{buildroot}%{_bindir}/$b %{buildroot}%{_bindir}/$b-%{py_ver}
   touch %{buildroot}%{_sysconfdir}/alternatives/$b
   ln -sf %{_sysconfdir}/alternatives/$b %{buildroot}/%{_bindir}/$b
@@ -87,9 +87,7 @@
 python setup.py test
 
 %post
-update-alternatives --install %{_bindir}/wheel wheel 
%{_bindir}/wheel-%{py_ver} 20 \
-    --slave %{_bindir}/egg2wheel egg2wheel %{_bindir}/egg2wheel-%{py_ver} \
-    --slave %{_bindir}/wininst2wheel wininst2wheel 
%{_bindir}/wininst2wheel-%{py_ver}
+update-alternatives --install %{_bindir}/wheel wheel 
%{_bindir}/wheel-%{py_ver} 20
 
 %postun
 if [ $1 -eq 0 ] ; then
@@ -99,15 +97,9 @@
 %files
 %defattr(-,root,root,-)
 %doc CHANGES.txt README.txt LICENSE.txt
-%{_bindir}/egg2wheel
-%{_bindir}/egg2wheel-%{py_ver}
 %{_bindir}/wheel
 %{_bindir}/wheel-%{py_ver}
-%{_bindir}/wininst2wheel
-%{_bindir}/wininst2wheel-%{py_ver}
 %ghost %{_sysconfdir}/alternatives/wheel
-%ghost %{_sysconfdir}/alternatives/egg2wheel
-%ghost %{_sysconfdir}/alternatives/wininst2wheel
 %{python_sitelib}/wheel-%{version}-py%{py_ver}.egg-info
 %{python_sitelib}/wheel/
 

++++++ wheel-0.22.0.tar.gz -> wheel-0.24.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/CHANGES.txt new/wheel-0.24.0/CHANGES.txt
--- old/wheel-0.22.0/CHANGES.txt        2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/CHANGES.txt        2014-07-06 18:40:16.000000000 +0200
@@ -1,3 +1,31 @@
+0.24.0
+======
+- The python tag used for pure-python packages is now .pyN (major version
+  only). This change actually occurred in 0.23.0 when the --python-tag
+  option was added, but was not explicitly mentioned in the changelog then.
+- wininst2wheel and egg2wheel removed. Use "wheel convert [archive]"
+  instead.
+- Wheel now supports setuptools style conditional requirements via the
+  extras_require={} syntax. Separate 'extra' names from conditions using
+  the : character. Wheel's own setup.py does this. (The empty-string
+  extra is the same as install_requires.) These conditional requirements
+  should work the same whether the package is installed by wheel or
+  by setup.py.
+
+0.23.0
+======
+- Compatibiltiy tag flags added to the bdist_wheel command
+- sdist should include files necessary for tests
+- 'wheel convert' can now also convert unpacked eggs to wheel
+- Rename pydist.json to metadata.json to avoid stepping on the PEP
+- The --skip-scripts option has been removed, and not generating scripts is now
+  the default. The option was a temporary approach until installers could
+  generate scripts themselves. That is now the case with pip 1.5 and later.
+  Note that using pip 1.4 to install a wheel without scripts will leave the
+  installation without entry-point wrappers. The "wheel install-scripts"
+  command can be used to generate the scripts in such cases.
+- Thank you contributors
+
 0.22.0
 ======
 - Include entry_points.txt, scripts a.k.a. commands, in experimental
@@ -10,7 +38,7 @@
 - Pregenerated scripts are the default again.
 - "setup.py bdist_wheel --skip-scripts" turns them off.
 - setuptools is no longer a listed requirement for the 'wheel'
-  package. It is of course still required in order for bdist_wheel 
+  package. It is of course still required in order for bdist_wheel
   to work.
 - "python -m wheel" avoids importing pkg_resources until it's necessary.
 
@@ -117,8 +145,8 @@
 
 0.9.5
 =====
-- Wheel's own wheel file can be executed by Python, and can install itself: 
-  ``python wheel-0.9.5-py27-none-any/wheel install ...`` 
+- Wheel's own wheel file can be executed by Python, and can install itself:
+  ``python wheel-0.9.5-py27-none-any/wheel install ...``
 - Use argparse; basic ``wheel install`` command should run with only stdlib
   dependencies.
 - Allow requires_dist in setup.cfg's [metadata] section. In addition to
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/LICENSE.txt new/wheel-0.24.0/LICENSE.txt
--- old/wheel-0.22.0/LICENSE.txt        2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/LICENSE.txt        2014-07-06 18:40:16.000000000 +0200
@@ -1,4 +1,4 @@
-"wheel" copyright (c) 2012 Daniel Holth <[email protected]> and
+"wheel" copyright (c) 2012-2014 Daniel Holth <[email protected]> and
 contributors.
 
 The MIT License
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/MANIFEST.in new/wheel-0.24.0/MANIFEST.in
--- old/wheel-0.22.0/MANIFEST.in        2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/MANIFEST.in        2014-07-06 18:40:16.000000000 +0200
@@ -1,4 +1,7 @@
 include wheel/*.txt *.txt *.sh
 recursive-include wheel/test *.py
+include wheel/test/test-1.0-py2.py3-none-win32.whl
+include wheel/test/headers.dist/header.h
+include wheel/test/pydist-schema.json
 prune wheel/test/*/dist
 prune wheel/test/*/build
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/PKG-INFO new/wheel-0.24.0/PKG-INFO
--- old/wheel-0.22.0/PKG-INFO   2013-09-16 00:09:16.000000000 +0200
+++ new/wheel-0.24.0/PKG-INFO   2014-07-06 18:56:22.000000000 +0200
@@ -1,8 +1,8 @@
 Metadata-Version: 1.1
 Name: wheel
-Version: 0.22.0
+Version: 0.24.0
 Summary: A built-package format for Python.
-Home-page: http://bitbucket.org/dholth/wheel/
+Home-page: http://bitbucket.org/pypa/wheel/
 Author: Daniel Holth
 Author-email: [email protected]
 License: MIT
@@ -27,7 +27,7 @@
         The wheel documentation is at http://wheel.rtfd.org/. The file format
         is documented in PEP 427 (http://www.python.org/dev/peps/pep-0427/).
         
-        The reference implementation is at http://bitbucket.org/dholth/wheel/
+        The reference implementation is at https://bitbucket.org/pypa/wheel
         
         Why not egg?
         ------------
@@ -49,6 +49,34 @@
         
         
         
+        0.24.0
+        ======
+        - The python tag used for pure-python packages is now .pyN (major 
version
+          only). This change actually occurred in 0.23.0 when the --python-tag
+          option was added, but was not explicitly mentioned in the changelog 
then.
+        - wininst2wheel and egg2wheel removed. Use "wheel convert [archive]"
+          instead.
+        - Wheel now supports setuptools style conditional requirements via the
+          extras_require={} syntax. Separate 'extra' names from conditions 
using
+          the : character. Wheel's own setup.py does this. (The empty-string
+          extra is the same as install_requires.) These conditional 
requirements
+          should work the same whether the package is installed by wheel or
+          by setup.py.
+        
+        0.23.0
+        ======
+        - Compatibiltiy tag flags added to the bdist_wheel command
+        - sdist should include files necessary for tests
+        - 'wheel convert' can now also convert unpacked eggs to wheel
+        - Rename pydist.json to metadata.json to avoid stepping on the PEP
+        - The --skip-scripts option has been removed, and not generating 
scripts is now
+          the default. The option was a temporary approach until installers 
could
+          generate scripts themselves. That is now the case with pip 1.5 and 
later.
+          Note that using pip 1.4 to install a wheel without scripts will 
leave the
+          installation without entry-point wrappers. The "wheel 
install-scripts"
+          command can be used to generate the scripts in such cases.
+        - Thank you contributors
+        
         0.22.0
         ======
         - Include entry_points.txt, scripts a.k.a. commands, in experimental
@@ -61,7 +89,7 @@
         - Pregenerated scripts are the default again.
         - "setup.py bdist_wheel --skip-scripts" turns them off.
         - setuptools is no longer a listed requirement for the 'wheel'
-          package. It is of course still required in order for bdist_wheel 
+          package. It is of course still required in order for bdist_wheel
           to work.
         - "python -m wheel" avoids importing pkg_resources until it's 
necessary.
         
@@ -168,8 +196,8 @@
         
         0.9.5
         =====
-        - Wheel's own wheel file can be executed by Python, and can install 
itself: 
-          ``python wheel-0.9.5-py27-none-any/wheel install ...`` 
+        - Wheel's own wheel file can be executed by Python, and can install 
itself:
+          ``python wheel-0.9.5-py27-none-any/wheel install ...``
         - Use argparse; basic ``wheel install`` command should run with only 
stdlib
           dependencies.
         - Allow requires_dist in setup.cfg's [metadata] section. In addition to
@@ -263,3 +291,4 @@
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.2
 Classifier: Programming Language :: Python :: 3.3
+Classifier: Programming Language :: Python :: 3.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/README.txt new/wheel-0.24.0/README.txt
--- old/wheel-0.22.0/README.txt 2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/README.txt 2014-07-06 18:40:16.000000000 +0200
@@ -19,7 +19,7 @@
 The wheel documentation is at http://wheel.rtfd.org/. The file format
 is documented in PEP 427 (http://www.python.org/dev/peps/pep-0427/).
 
-The reference implementation is at http://bitbucket.org/dholth/wheel/
+The reference implementation is at https://bitbucket.org/pypa/wheel
 
 Why not egg?
 ------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/setup.cfg new/wheel-0.24.0/setup.cfg
--- old/wheel-0.22.0/setup.cfg  2013-09-16 00:09:16.000000000 +0200
+++ new/wheel-0.24.0/setup.cfg  2014-07-06 18:56:22.000000000 +0200
@@ -2,18 +2,9 @@
 addopts = --ignore=dist --ignore=build --cov=wheel
 
 [metadata]
-provides-extra = 
-       tool
-       signatures
-       faster-signatures
-requires-dist = 
-       argparse; python_version == '2.6'
-       keyring; extra == 'signatures'
-       dirspec; sys.platform != 'win32' and extra == 'signatures'
-       ed25519ll; extra == 'faster-signatures'
 license-file = LICENSE.txt
 
-[wheel]
+[bdist_wheel]
 universal = 1
 
 [egg_info]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/setup.py new/wheel-0.24.0/setup.py
--- old/wheel-0.22.0/setup.py   2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/setup.py   2014-07-06 18:48:58.000000000 +0200
@@ -1,4 +1,4 @@
-import os.path, sys, codecs, re
+import os.path, codecs, re
 
 from setuptools import setup
 
@@ -6,21 +6,10 @@
 README = codecs.open(os.path.join(here, 'README.txt'), encoding='utf8').read()
 CHANGES = codecs.open(os.path.join(here, 'CHANGES.txt'), 
encoding='utf8').read()
 
-with codecs.open(os.path.join(os.path.dirname(__file__), 'wheel', 
'__init__.py'), 
+with codecs.open(os.path.join(os.path.dirname(__file__), 'wheel', 
'__init__.py'),
                  encoding='utf8') as version_file:
     metadata = dict(re.findall(r"""__([a-z]+)__ = "([^"]+)""", 
version_file.read()))
 
-#
-# All these requirements are overridden by setup.cfg when wheel is built
-# as a wheel:
-#
-signature_reqs = ['keyring']
-if sys.platform != 'win32':
-    signature_reqs.append('dirspec')
-install_requires = []
-if sys.version_info[:2] < (2, 7):
-    install_requires.append('argparse')
-
 setup(name='wheel',
       version=metadata['version'],
       description='A built-package format for Python.',
@@ -35,22 +24,24 @@
         "Programming Language :: Python :: 3",
         "Programming Language :: Python :: 3.2",
         "Programming Language :: Python :: 3.3",
+        "Programming Language :: Python :: 3.4",
         ],
       author='Daniel Holth',
       author_email='[email protected]',
-      url='http://bitbucket.org/dholth/wheel/',
+      url='http://bitbucket.org/pypa/wheel/',
       keywords=['wheel', 'packaging'],
       license='MIT',
       packages=[
-          'wheel', 
-          'wheel.test', 
-          'wheel.tool', 
+          'wheel',
+          'wheel.test',
+          'wheel.tool',
           'wheel.signatures'
           ],
-      install_requires=install_requires,
       extras_require={
-          'signatures': signature_reqs,
-          'faster-signatures': ['ed25519ll'], 
+          ':python_version=="2.6"': ['argparse'],
+          'signatures': ['keyring'],
+          'signatures:sys_platform!="win32"': ['pyxdg'],
+          'faster-signatures': ['ed25519ll'],
           'tool': []
           },
       tests_require=['jsonschema', 'pytest', 'coverage', 'pytest-cov'],
@@ -58,8 +49,6 @@
       zip_safe=False,
       entry_points = """\
 [console_scripts]
-wininst2wheel = wheel.wininst2wheel:main
-egg2wheel = wheel.egg2wheel:main
 wheel = wheel.tool:main
 
 [distutils.commands]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/wheel/__init__.py 
new/wheel-0.24.0/wheel/__init__.py
--- old/wheel-0.22.0/wheel/__init__.py  2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/wheel/__init__.py  2014-07-06 18:40:16.000000000 +0200
@@ -1,2 +1,2 @@
 # __variables__ with double-quoted values will be available in setup.py:
-__version__ = "0.22.0"
+__version__ = "0.24.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/wheel/bdist_wheel.py 
new/wheel-0.24.0/wheel/bdist_wheel.py
--- old/wheel-0.22.0/wheel/bdist_wheel.py       2013-09-16 00:08:51.000000000 
+0200
+++ new/wheel-0.24.0/wheel/bdist_wheel.py       2014-07-06 18:40:16.000000000 
+0200
@@ -71,12 +71,15 @@
                     ('group=', 'g',
                      "Group name used when creating a tar file"
                      " [default: current group]"),
-                    ('skip-scripts', None,
-                     "skip building the setuptools console_scripts",
-                     "(default: false)"),
+                    ('universal', None,
+                     "make a universal wheel"
+                     " (default: false)"),
+                    ('python-tag=', None,
+                     "Python implementation compatibility tag"
+                     " (default: py%s)" % get_impl_ver()[0]),
                     ]
 
-    boolean_options = ['keep-temp', 'skip-build', 'relative']
+    boolean_options = ['keep-temp', 'skip-build', 'relative', 'universal']
 
     def initialize_options(self):
         self.bdist_dir = None
@@ -92,7 +95,8 @@
         self.relative = False
         self.owner = None
         self.group = None
-        self.skip_scripts = False
+        self.universal = False
+        self.python_tag = 'py' + get_impl_ver()[0]
 
     def finalize_options(self):
         if self.bdist_dir is None:
@@ -108,6 +112,14 @@
 
         self.root_is_purelib = self.distribution.is_pure()
 
+        # Support legacy [wheel] section for setting universal
+        wheel = self.distribution.get_option_dict('wheel')
+        if 'universal' in wheel:
+            # please don't define this in your global configs
+            val = wheel['universal'][1].strip()
+            if val.lower() in ('1', 'true', 'yes'):
+                self.universal = True
+
     @property
     def wheel_dist_name(self):
         """Return distribution full name with - replaced with _"""
@@ -117,31 +129,24 @@
     def get_tag(self):
         supported_tags = pep425tags.get_supported()
 
-        purity = self.distribution.is_pure()
-        impl_ver = get_impl_ver()
-        abi_tag = 'none'
-        plat_name = 'any'
-        impl_name = 'py'
-        if purity:
-            wheel = self.distribution.get_option_dict('wheel')
-            if 'universal' in wheel:
-                # please don't define this in your global configs
-                val = wheel['universal'][1].strip()
-                if val.lower() in ('1', 'true', 'yes'):
-                    impl_name = 'py2.py3'
-                    impl_ver = ''
-            tag = (impl_name + impl_ver, abi_tag, plat_name)
+        if self.distribution.is_pure():
+            if self.universal:
+                impl = 'py2.py3'
+            else:
+                impl = self.python_tag
+            tag = (impl, 'none', 'any')
         else:
             plat_name = self.plat_name
             if plat_name is None:
                 plat_name = get_platform()
             plat_name = plat_name.replace('-', '_').replace('.', '_')
             impl_name = get_abbr_impl()
+            impl_ver = get_impl_ver()
             # PEP 3149 -- no SOABI in Py 2
             # For PyPy?
             # "pp%s%s" % (sys.pypy_version_info.major,
             # sys.pypy_version_info.minor)
-            abi_tag = sysconfig.get_config_vars().get('SOABI', abi_tag)
+            abi_tag = sysconfig.get_config_vars().get('SOABI', 'none')
             if abi_tag.startswith('cpython-'):
                 abi_tag = 'cp' + abi_tag.rsplit('-', 1)[-1]
 
@@ -176,10 +181,11 @@
         install.skip_build = self.skip_build
         install.warn_dir = False
 
-        if self.skip_scripts:
-            # A wheel without setuptools scripts is more cross-platform. 
-            install_scripts = self.reinitialize_command('install_scripts')
-            install_scripts.no_ep = True
+        # A wheel without setuptools scripts is more cross-platform.
+        # Use the (undocumented) `no_ep` option to setuptools'
+        # install_scripts command to avoid creating entry point scripts.
+        install_scripts = self.reinitialize_command('install_scripts')
+        install_scripts.no_ep = True
 
         # Use a custom scheme for the archive, because we have to decide
         # at installation time which scheme to use.
@@ -281,19 +287,19 @@
         return metadata['license_file'][1]
 
     def setupcfg_requirements(self):
-        """Generate requirements from setup.cfg as 
+        """Generate requirements from setup.cfg as
         ('Requires-Dist', 'requirement; qualifier') tuples. From a metadata
         section in setup.cfg:
-        
+
         [metadata]
         provides-extra = extra1
             extra2
         requires-dist = requirement; qualifier
             another; qualifier2
             unqualified
-            
+
         Yields
-        
+
         ('Provides-Extra', 'extra1'),
         ('Provides-Extra', 'extra2'),
         ('Requires-Dist', 'requirement; qualifier'),
@@ -381,8 +387,8 @@
         metadata_path = os.path.join(distinfo_path, 'METADATA')
         self.add_requirements(metadata_path)
 
-        # XXX not a final specification
-        metadata_json_path = os.path.join(distinfo_path, 'pydist.json')
+        # XXX intentionally a different path than the PEP.
+        metadata_json_path = os.path.join(distinfo_path, 'metadata.json')
         pymeta = pkginfo_to_dict(metadata_path,
                                  distribution=self.distribution)
 
@@ -393,16 +399,14 @@
                                             description_filename)
             with open(description_path, "wb") as description_file:
                 description_file.write(description_text.encode('utf-8'))
-            pymeta['document_names'] = pymeta.get('document_names', {})
-            pymeta['document_names']['description'] = description_filename
+            
pymeta['extensions']['python.details']['document_names']['description'] = 
description_filename
 
         # XXX heuristically copy any LICENSE/LICENSE.txt?
         license = self.license_file()
         if license:
             license_filename = 'LICENSE.txt'
             shutil.copy(license, os.path.join(self.distinfo_dir, 
license_filename))
-            pymeta['document_names'] = pymeta.get('document_names', {})
-            pymeta['document_names']['license'] = license_filename
+            
pymeta['extensions']['python.details']['document_names']['license'] = 
license_filename
 
         with open(metadata_json_path, "w") as metadata_json:
             json.dump(pymeta, metadata_json)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/wheel/egg2wheel.py 
new/wheel-0.24.0/wheel/egg2wheel.py
--- old/wheel-0.22.0/wheel/egg2wheel.py 2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/wheel/egg2wheel.py 2014-07-06 18:40:16.000000000 +0200
@@ -5,9 +5,9 @@
 import tempfile
 import zipfile
 import wheel.bdist_wheel
+import shutil
 import distutils.dist
 from distutils.archive_util import make_archive
-from shutil import rmtree
 from argparse import ArgumentParser
 from glob import iglob
 
@@ -16,9 +16,20 @@
 
 def egg2wheel(egg_path, dest_dir):
     egg_info = egg_info_re.match(os.path.basename(egg_path)).groupdict()
-    egg = zipfile.ZipFile(egg_path)
     dir = tempfile.mkdtemp(suffix="_e2w")
-    egg.extractall(dir)
+    if os.path.isfile(egg_path):
+        # assume we have a bdist_egg otherwise
+        egg = zipfile.ZipFile(egg_path)
+        egg.extractall(dir)
+    else:
+        # support buildout-style installed eggs directories
+        for pth in os.listdir(egg_path):
+            src = os.path.join(egg_path, pth)
+            if os.path.isfile(src):
+                shutil.copy2(src, dir)
+            else:
+                shutil.copytree(src, os.path.join(dir, pth))
+
     dist_info = "%s-%s" % (egg_info['name'], egg_info['ver'])
     abi = 'none'
     pyver = egg_info['pyver'].replace('.', '')
@@ -41,7 +52,7 @@
     bw.write_record(dir, dist_info_dir)
     filename = make_archive(os.path.join(dest_dir, wheel_name), 'zip', 
root_dir=dir)
     os.rename(filename, filename[:-3] + 'whl')
-    rmtree(dir)
+    shutil.rmtree(dir)
 
 def main():
     parser = ArgumentParser()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/wheel/metadata.py 
new/wheel-0.24.0/wheel/metadata.py
--- old/wheel-0.22.0/wheel/metadata.py  2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/wheel/metadata.py  2014-07-06 18:40:16.000000000 +0200
@@ -49,7 +49,7 @@
 
 def handle_requires(metadata, pkg_info, key):
     """
-    Place the runtime requirements from pkg_info into metadata. 
+    Place the runtime requirements from pkg_info into metadata.
     """
     may_requires = defaultdict(list)
     for value in pkg_info.get_all(key):
@@ -85,15 +85,16 @@
 def pkginfo_to_dict(path, distribution=None):
     """
     Convert PKG-INFO to a prototype Metadata 2.0 (PEP 426) dict.
-    
-    The description is included under the key ['description'] rather than 
+
+    The description is included under the key ['description'] rather than
     being written to a separate file.
-    
+
     path: path to PKG-INFO file
     distribution: optional distutils Distribution()
     """
 
-    metadata = {"generator":"bdist_wheel (" + wheel.__version__ + ")"}
+    metadata = defaultdict(lambda: defaultdict(lambda: defaultdict(dict)))
+    metadata["generator"] = "bdist_wheel (" + wheel.__version__ + ")"
     try:
         unicode
         pkg_info = read_pkg_info(path)
@@ -141,7 +142,10 @@
             metadata['extras'].extend(pkg_info.get_all(key))
 
         elif low_key == 'home_page':
-            metadata['project_urls'] = {'Home':pkg_info[key]}
+            metadata['extensions']['python.details']['project_urls'] = 
{'Home':pkg_info[key]}
+
+        elif low_key == 'keywords':
+            metadata['keywords'] = KEYWORDS_RE.split(pkg_info[key])
 
         else:
             metadata[low_key] = pkg_info[key]
@@ -173,7 +177,7 @@
             contact['role'] = role
             contacts.append(contact)
     if contacts:
-        metadata['contacts'] = contacts
+        metadata['extensions']['python.details']['contacts'] = contacts
 
     # convert entry points to exports
     try:
@@ -186,17 +190,17 @@
                 name, export = str(item).split(' = ', 1)
                 exports[group][name] = export
         if exports:
-            metadata['exports'] = exports
+            metadata['extensions']['python.exports'] = exports
     except IOError:
         pass
 
     # copy console_scripts entry points to commands
-    if 'exports' in metadata:
+    if 'python.exports' in metadata['extensions']:
         for (ep_script, wrap_script) in (('console_scripts', 'wrap_console'),
                                          ('gui_scripts', 'wrap_gui')):
-            if ep_script in metadata['exports']:
-                metadata['commands'] = metadata.get('commands', {})
-                metadata['commands'][wrap_script] = 
metadata['exports'][ep_script]
+            if ep_script in metadata['extensions']['python.exports']:
+                metadata['extensions']['python.commands'][wrap_script] = \
+                    metadata['extensions']['python.exports'][ep_script]
 
     return metadata
 
@@ -231,9 +235,15 @@
         requires = open(requires_path).read()
         for extra, reqs in pkg_resources.split_sections(requires):
             condition = ''
+            if extra and ':' in extra: # setuptools extra:condition syntax
+                extra, condition = extra.split(':', 1)
             if extra:
                 pkg_info['Provides-Extra'] = extra
-                condition = '; extra == %s' % repr(extra)
+                if condition:
+                    condition += " and "
+                condition += 'extra == %s' % repr(extra)
+            if condition:
+                condition = '; ' + condition
             for new_req in convert_requirements(reqs):
                 pkg_info['Requires-Dist'] = new_req + condition
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/wheel/test/pydist-schema.json 
new/wheel-0.24.0/wheel/test/pydist-schema.json
--- old/wheel-0.22.0/wheel/test/pydist-schema.json      1970-01-01 
01:00:00.000000000 +0100
+++ new/wheel-0.24.0/wheel/test/pydist-schema.json      2014-07-06 
18:40:16.000000000 +0200
@@ -0,0 +1,362 @@
+{
+  "id": "http://www.python.org/dev/peps/pep-0426/";,
+  "$schema": "http://json-schema.org/draft-04/schema#";,
+  "title": "Metadata for Python Software Packages 2.0",
+  "type": "object",
+  "properties": {
+    "metadata_version": {
+      "description": "Version of the file format",
+      "type": "string",
+      "pattern": "^(\\d+(\\.\\d+)*)$"
+    },
+    "generator": {
+      "description": "Name and version of the program that produced this 
file.",
+      "type": "string",
+      "pattern": "^[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])( \\(.*\\))?$"
+    },
+    "name": {
+      "description": "The name of the distribution.",
+      "type": "string",
+      "$ref": "#/definitions/distribution_name"
+    },
+    "version": {
+      "description": "The distribution's public version identifier",
+      "type": "string",
+      "pattern": 
"^(\\d+(\\.\\d+)*)((a|b|c|rc)(\\d+))?(\\.(post)(\\d+))?(\\.(dev)(\\d+))?$"
+    },
+    "source_label": {
+      "description": "A constrained identifying text string",
+      "type": "string",
+      "pattern": "^[0-9a-z_.-+]+$"
+    },
+    "source_url": {
+      "description": "A string containing a full URL where the source for this 
specific version of the distribution can be downloaded.",
+      "type": "string",
+      "format": "uri"
+    },
+    "summary": {
+      "description": "A one-line summary of what the distribution does.",
+      "type": "string"
+    },
+    "extras": {
+      "description": "A list of optional sets of dependencies that may be used 
to define conditional dependencies in \"may_require\" and similar fields.",
+      "type": "array",
+      "items": {
+        "type": "string",
+        "$ref": "#/definitions/extra_name"
+      }
+    },
+    "meta_requires": {
+      "description": "A list of subdistributions made available through this 
metadistribution.",
+      "type": "array",
+      "$ref": "#/definitions/dependencies"
+    },
+    "run_requires": {
+      "description": "A list of other distributions needed to run this 
distribution.",
+      "type": "array",
+      "$ref": "#/definitions/dependencies"
+    },
+    "test_requires": {
+      "description": "A list of other distributions needed when this 
distribution is tested.",
+      "type": "array",
+      "$ref": "#/definitions/dependencies"
+    },
+    "build_requires": {
+      "description": "A list of other distributions needed when this 
distribution is built.",
+      "type": "array",
+      "$ref": "#/definitions/dependencies"
+    },
+    "dev_requires": {
+      "description": "A list of other distributions needed when this 
distribution is developed.",
+      "type": "array",
+      "$ref": "#/definitions/dependencies"
+    },
+    "provides": {
+      "description": "A list of strings naming additional dependency 
requirements that are satisfied by installing this distribution. These strings 
must be of the form Name or Name (Version)",
+      "type": "array",
+      "items": {
+        "type": "string",
+        "$ref": "#/definitions/provides_declaration"
+      }
+    },
+    "modules": {
+      "description": "A list of modules and/or packages available for import 
after installing this distribution.",
+      "type": "array",
+      "items": {
+        "type": "string",
+        "$ref": "#/definitions/qualified_name"
+      }
+    },
+    "namespaces": {
+      "description": "A list of namespace packages this distribution 
contributes to",
+      "type": "array",
+      "items": {
+        "type": "string",
+        "$ref": "#/definitions/qualified_name"
+      }
+    },
+    "obsoleted_by": {
+      "description": "A string that indicates that this project is no longer 
being developed. The named project provides a substitute or replacement.",
+      "type": "string",
+      "$ref": "#/definitions/requirement"
+    },
+    "supports_environments": {
+      "description": "A list of strings specifying the environments that the 
distribution explicitly supports.",
+      "type": "array",
+      "items": {
+        "type": "string",
+        "$ref": "#/definitions/environment_marker"
+      }
+    },
+    "install_hooks": {
+      "description": "The install_hooks field is used to define various 
operations that may be invoked on a distribution in a platform independent 
manner.",
+      "type": "object",
+      "properties": {
+        "postinstall": {
+          "type": "string",
+          "$ref": "#/definitions/export_specifier"
+        },
+        "preuninstall": {
+          "type": "string",
+          "$ref": "#/definitions/export_specifier"
+        }
+      }
+    },
+    "extensions": {
+      "description": "Extensions to the metadata may be present in a mapping 
under the 'extensions' key.",
+      "type": "object",
+      "$ref": "#/definitions/extensions"
+    }
+  },
+
+  "required": ["metadata_version", "name", "version", "summary"],
+  "additionalProperties": false,
+
+  "definitions": {
+    "contact": {
+      "type": "object",
+      "properties": {
+        "name": {
+          "type": "string"
+        },
+        "email": {
+          "type": "string"
+        },
+        "url": {
+          "type": "string"
+        },
+        "role": {
+          "type": "string"
+        }
+      },
+      "required": ["name"],
+      "additionalProperties": false
+    },
+    "dependencies": {
+      "type": "array",
+      "items": {
+        "type": "object",
+        "$ref": "#/definitions/dependency"
+      }
+    },
+    "dependency": {
+      "type": "object",
+      "properties": {
+        "extra": {
+          "type": "string",
+          "$ref": "#/definitions/extra_name"
+        },
+        "environment": {
+          "type": "string",
+          "$ref": "#/definitions/environment_marker"
+        },
+        "requires": {
+          "type": "array",
+          "items": {
+            "type": "string",
+            "$ref": "#/definitions/requirement"
+          }
+        }
+      },
+      "required": ["requires"],
+      "additionalProperties": false
+    },
+    "extensions": {
+      "type": "object",
+      "patternProperties": {
+        "^[A-Za-z][0-9A-Za-z_]*([.][0-9A-Za-z_]*)*$": {}
+      },
+      "properties": {
+        "python.details" : {
+          "description": "More information regarding the distribution.",
+          "type": "object",
+          "properties": {
+            "document_names": {
+              "description": "Names of supporting metadata documents",
+              "type": "object",
+              "properties": {
+                "description": {
+                  "type": "string",
+                  "$ref": "#/definitions/document_name"
+                },
+                "changelog": {
+                  "type": "string",
+                  "$ref": "#/definitions/document_name"
+                },
+                "license": {
+                  "type": "string",
+                  "$ref": "#/definitions/document_name"
+                }
+              },
+              "additionalProperties": false
+            },
+            "keywords": {
+              "description": "A list of additional keywords to be used to 
assist searching for the distribution in a larger catalog.",
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            },
+            "license": {
+              "description": "A string indicating the license covering the 
distribution.",
+              "type": "string"
+            },
+            "classifiers": {
+              "description": "A list of strings, with each giving a single 
classification value for the distribution.",
+              "type": "array",
+              "items": {
+                "type": "string"
+              }
+            }
+          }
+        },
+        "python.project" : {
+          "description": "More information regarding the creation and 
maintenance of the distribution.",
+          "$ref": "#/definitions/project_or_integrator"
+        },
+        "python.integrator" : {
+          "description": "More information regarding the downstream 
redistributor of the distribution.",
+          "$ref": "#/definitions/project_or_integrator"
+        },
+        "python.commands" : {
+          "description": "Command line interfaces provided by this 
distribution",
+          "type": "object",
+          "$ref": "#/definitions/commands"
+        },
+        "python.exports" : {
+          "description": "Other exported interfaces provided by this 
distribution",
+          "type": "object",
+          "$ref": "#/definitions/exports"
+        }
+      },
+      "additionalProperties": false
+    },
+    "commands": {
+      "type": "object",
+      "properties": {
+        "wrap_console": {
+          "type": "object",
+          "$ref": "#/definitions/command_map"
+        },
+        "wrap_gui": {
+          "type": "object",
+          "$ref": "#/definitions/command_map"
+        },
+        "prebuilt": {
+          "type": "array",
+          "items": {
+            "type": "string",
+            "$ref": "#/definitions/relative_path"
+          }
+        }
+      },
+      "additionalProperties": false
+    },
+    "exports": {
+      "type": "object",
+      "patternProperties": {
+        "^[A-Za-z][0-9A-Za-z_]*([.][0-9A-Za-z_]*)*$": {
+          "type": "object",
+          "patternProperties": {
+            ".": {
+              "type": "string",
+              "$ref": "#/definitions/export_specifier"
+            }
+          },
+          "additionalProperties": false
+        }
+      },
+      "additionalProperties": false
+    },
+    "command_map": {
+      "type": "object",
+      "patternProperties": {
+        "^[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])?$": {
+          "type": "string",
+          "$ref": "#/definitions/export_specifier"
+        }
+      },
+      "additionalProperties": false
+    },
+    "project_or_integrator" : {
+      "type": "object",
+      "properties" : {
+        "contacts": {
+          "description": "A list of contributor entries giving the recommended 
contact points for getting more information about the project.",
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/contact"
+          }
+        },
+        "contributors": {
+          "description": "A list of contributor entries for other contributors 
not already listed as current project points of contact.",
+          "type": "array",
+          "items": {
+            "type": "object",
+            "$ref": "#/definitions/contact"
+          }
+        },
+        "project_urls": {
+          "description": "A mapping of arbitrary text labels to additional 
URLs relevant to the project.",
+          "type": "object"
+        }
+      }
+    },
+    "distribution_name": {
+      "type": "string",
+      "pattern": "^[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])?$"
+    },
+    "requirement": {
+      "type": "string"
+    },
+    "provides_declaration": {
+      "type": "string"
+    },
+    "environment_marker": {
+      "type": "string"
+    },
+    "document_name": {
+      "type": "string"
+    },
+    "extra_name" : {
+      "type": "string",
+      "pattern": "^[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])?$"
+    },
+    "relative_path" : {
+      "type": "string"
+    },
+    "export_specifier": {
+      "type": "string",
+      "pattern": 
"^([A-Za-z_][A-Za-z_0-9]*([.][A-Za-z_][A-Za-z_0-9]*)*)(:[A-Za-z_][A-Za-z_0-9]*([.][A-Za-z_][A-Za-z_0-9]*)*)?(\\[[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])?\\])?$"
+    },
+    "qualified_name" : {
+      "type": "string",
+      "pattern": "^[A-Za-z_][A-Za-z_0-9]*([.][A-Za-z_][A-Za-z_0-9]*)*$"
+    },
+    "prefixed_name" : {
+      "type": "string",
+      "pattern": "^[A-Za-z_][A-Za-z_0-9]*([.][A-Za-z_0-9]*)*$"
+    }
+  }
+}
Files old/wheel-0.22.0/wheel/test/test-1.0-py2.py3-none-win32.whl and 
new/wheel-0.24.0/wheel/test/test-1.0-py2.py3-none-win32.whl differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/wheel/test/test_basic.py 
new/wheel-0.24.0/wheel/test/test_basic.py
--- old/wheel-0.22.0/wheel/test/test_basic.py   2013-09-16 00:08:51.000000000 
+0200
+++ new/wheel-0.24.0/wheel/test/test_basic.py   2014-07-06 18:40:16.000000000 
+0200
@@ -94,11 +94,22 @@
     This also verifies the integrity of our testing wheel files.
     """
     for dist in test_distributions:
-        distdir = pkg_resources.resource_filename('wheel.test', 
+        distdir = pkg_resources.resource_filename('wheel.test',
                                                   os.path.join(dist, 'dist'))
         for wheelfile in (w for w in os.listdir(distdir) if 
w.endswith('.whl')):
             wheel.tool.unpack(os.path.join(distdir, wheelfile), distdir)
 
+def test_no_scripts():
+    """Make sure entry point scripts are not generated."""
+    dist = "complex-dist"
+    basedir = pkg_resources.resource_filename('wheel.test', dist)
+    for (dirname, subdirs, filenames) in os.walk(basedir):
+        for filename in filenames:
+            if filename.endswith('.whl'):
+                whl = ZipFile(os.path.join(dirname, filename))
+                for entry in whl.infolist():
+                    assert not '.data/scripts/' in entry.filename
+
 def test_pydist():
     """Make sure pydist.json exists and validates against our schema."""
     # XXX this test may need manual cleanup of older wheels
@@ -118,11 +129,11 @@
                 if filename.endswith('.whl'):
                     whl = ZipFile(os.path.join(dirname, filename))
                     for entry in whl.infolist():
-                        if entry.filename.endswith('/pydist.json'):
+                        if entry.filename.endswith('/metadata.json'):
                             pymeta = 
json.loads(whl.read(entry).decode('utf-8'))
                             jsonschema.validate(pymeta, pymeta_schema)
                             valid += 1
-    assert valid > 0, "No pydist.json found"
+    assert valid > 0, "No metadata.json found"
 
 def test_util():
     """Test functions in util.py."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/wheel/test/test_tagopt.py 
new/wheel-0.24.0/wheel/test/test_tagopt.py
--- old/wheel-0.22.0/wheel/test/test_tagopt.py  1970-01-01 01:00:00.000000000 
+0100
+++ new/wheel-0.24.0/wheel/test/test_tagopt.py  2014-07-06 18:40:16.000000000 
+0200
@@ -0,0 +1,112 @@
+"""
+Tests for the bdist_wheel tag options (--python-tag and --universal)
+"""
+
+import sys
+import shutil
+import pytest
+import py.path
+import tempfile
+import subprocess
+
+SETUP_PY = """\
+from setuptools import setup
+
+setup(
+    name="Test",
+    version="1.0",
+    author_email="[email protected]",
+    py_modules=["test"],
+)
+"""
+
[email protected]
+def temp_pkg(request):
+    tempdir = tempfile.mkdtemp()
+    def fin():
+        shutil.rmtree(tempdir)
+    request.addfinalizer(fin)
+    temppath = py.path.local(tempdir)
+    temppath.join('test.py').write('print("Hello, world")')
+    temppath.join('setup.py').write(SETUP_PY)
+    return temppath
+
+def test_default_tag(temp_pkg):
+    subprocess.check_call([sys.executable, 'setup.py', 'bdist_wheel'],
+            cwd=str(temp_pkg))
+    dist_dir = temp_pkg.join('dist')
+    assert dist_dir.check(dir=1)
+    wheels = dist_dir.listdir()
+    assert len(wheels) == 1
+    assert wheels[0].basename.startswith('Test-1.0-py%s-' % (sys.version[0],))
+    assert wheels[0].ext == '.whl'
+
+def test_explicit_tag(temp_pkg):
+    subprocess.check_call(
+        [sys.executable, 'setup.py', 'bdist_wheel', '--python-tag=py32'],
+        cwd=str(temp_pkg))
+    dist_dir = temp_pkg.join('dist')
+    assert dist_dir.check(dir=1)
+    wheels = dist_dir.listdir()
+    assert len(wheels) == 1
+    assert wheels[0].basename.startswith('Test-1.0-py32-')
+    assert wheels[0].ext == '.whl'
+
+def test_universal_tag(temp_pkg):
+    subprocess.check_call(
+        [sys.executable, 'setup.py', 'bdist_wheel', '--universal'],
+        cwd=str(temp_pkg))
+    dist_dir = temp_pkg.join('dist')
+    assert dist_dir.check(dir=1)
+    wheels = dist_dir.listdir()
+    assert len(wheels) == 1
+    assert wheels[0].basename.startswith('Test-1.0-py2.py3-')
+    assert wheels[0].ext == '.whl'
+
+def test_universal_beats_explicit_tag(temp_pkg):
+    subprocess.check_call(
+        [sys.executable, 'setup.py', 'bdist_wheel', '--universal', 
'--python-tag=py32'],
+        cwd=str(temp_pkg))
+    dist_dir = temp_pkg.join('dist')
+    assert dist_dir.check(dir=1)
+    wheels = dist_dir.listdir()
+    assert len(wheels) == 1
+    assert wheels[0].basename.startswith('Test-1.0-py2.py3-')
+    assert wheels[0].ext == '.whl'
+
+def test_universal_in_setup_cfg(temp_pkg):
+    temp_pkg.join('setup.cfg').write('[bdist_wheel]\nuniversal=1')
+    subprocess.check_call(
+        [sys.executable, 'setup.py', 'bdist_wheel'],
+        cwd=str(temp_pkg))
+    dist_dir = temp_pkg.join('dist')
+    assert dist_dir.check(dir=1)
+    wheels = dist_dir.listdir()
+    assert len(wheels) == 1
+    assert wheels[0].basename.startswith('Test-1.0-py2.py3-')
+    assert wheels[0].ext == '.whl'
+
+def test_pythontag_in_setup_cfg(temp_pkg):
+    temp_pkg.join('setup.cfg').write('[bdist_wheel]\npython_tag=py32')
+    subprocess.check_call(
+        [sys.executable, 'setup.py', 'bdist_wheel'],
+        cwd=str(temp_pkg))
+    dist_dir = temp_pkg.join('dist')
+    assert dist_dir.check(dir=1)
+    wheels = dist_dir.listdir()
+    assert len(wheels) == 1
+    assert wheels[0].basename.startswith('Test-1.0-py32-')
+    assert wheels[0].ext == '.whl'
+
+def test_legacy_wheel_section_in_setup_cfg(temp_pkg):
+    temp_pkg.join('setup.cfg').write('[wheel]\nuniversal=1')
+    subprocess.check_call(
+        [sys.executable, 'setup.py', 'bdist_wheel'],
+        cwd=str(temp_pkg))
+    dist_dir = temp_pkg.join('dist')
+    assert dist_dir.check(dir=1)
+    wheels = dist_dir.listdir()
+    assert len(wheels) == 1
+    assert wheels[0].basename.startswith('Test-1.0-py2.py3-')
+    assert wheels[0].ext == '.whl'
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/wheel/test/test_tool.py 
new/wheel-0.24.0/wheel/test/test_tool.py
--- old/wheel-0.22.0/wheel/test/test_tool.py    2013-09-16 00:08:51.000000000 
+0200
+++ new/wheel-0.24.0/wheel/test/test_tool.py    2014-07-06 18:40:16.000000000 
+0200
@@ -10,6 +10,8 @@
         
         class keyringTest:
             backend = keyring.backend
+            class backends:
+                file = keyring.backends.file
             @classmethod
             def get_keyring(cls):
                 class keyringTest2:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/wheel/tool/__init__.py 
new/wheel-0.24.0/wheel/tool/__init__.py
--- old/wheel-0.22.0/wheel/tool/__init__.py     2013-09-16 00:08:51.000000000 
+0200
+++ new/wheel-0.24.0/wheel/tool/__init__.py     2014-07-06 18:47:02.000000000 
+0200
@@ -30,7 +30,7 @@
         from ..signatures import keys
         import keyring
     except ImportError:
-        raise WheelError("Install wheel[signatures] (requires keyring, 
dirspec) for signatures.")
+        raise WheelError("Install wheel[signatures] (requires keyring, pyxdg) 
for signatures.")
     return keys.WheelKeys, keyring
 
 def keygen(get_keyring=get_keyring):
@@ -47,7 +47,7 @@
     kr = keyring.get_keyring()
     kr.set_password("wheel", vk, sk)
     sys.stdout.write("Created Ed25519 keypair with vk={0}\n".format(vk))
-    if isinstance(kr, keyring.backend.BasicFileKeyring):
+    if isinstance(kr, keyring.backends.file.BaseKeyring):
         sys.stdout.write("in {0}\n".format(kr.file_path))
     else:
         sys.stdout.write("in %r\n" % kr.__class__)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/wheel/util.py 
new/wheel-0.24.0/wheel/util.py
--- old/wheel-0.22.0/wheel/util.py      2013-09-16 00:08:51.000000000 +0200
+++ new/wheel-0.24.0/wheel/util.py      2014-07-06 18:40:16.000000000 +0200
@@ -6,7 +6,7 @@
 import json
 import hashlib
 
-__all__ = ['urlsafe_b64encode', 'urlsafe_b64decode', 'utf8', 
+__all__ = ['urlsafe_b64encode', 'urlsafe_b64decode', 'utf8',
            'to_json', 'from_json', 'matches_requirement']
 
 def urlsafe_b64encode(data):
@@ -118,11 +118,11 @@
                 yield path
 else:
     def save_config_path(*resource):
-        import dirspec.basedir
-        return dirspec.basedir.save_config_path(*resource)
+        import xdg.BaseDirectory
+        return xdg.BaseDirectory.save_config_path(*resource)
     def load_config_paths(*resource):
-        import dirspec.basedir
-        return dirspec.basedir.load_config_paths(*resource)
+        import xdg.BaseDirectory
+        return xdg.BaseDirectory.load_config_paths(*resource)
 
 def matches_requirement(req, wheels):
     """List of wheels matching a requirement.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/wheel.egg-info/PKG-INFO 
new/wheel-0.24.0/wheel.egg-info/PKG-INFO
--- old/wheel-0.22.0/wheel.egg-info/PKG-INFO    2013-09-16 00:09:16.000000000 
+0200
+++ new/wheel-0.24.0/wheel.egg-info/PKG-INFO    2014-07-06 18:56:21.000000000 
+0200
@@ -1,8 +1,8 @@
 Metadata-Version: 1.1
 Name: wheel
-Version: 0.22.0
+Version: 0.24.0
 Summary: A built-package format for Python.
-Home-page: http://bitbucket.org/dholth/wheel/
+Home-page: http://bitbucket.org/pypa/wheel/
 Author: Daniel Holth
 Author-email: [email protected]
 License: MIT
@@ -27,7 +27,7 @@
         The wheel documentation is at http://wheel.rtfd.org/. The file format
         is documented in PEP 427 (http://www.python.org/dev/peps/pep-0427/).
         
-        The reference implementation is at http://bitbucket.org/dholth/wheel/
+        The reference implementation is at https://bitbucket.org/pypa/wheel
         
         Why not egg?
         ------------
@@ -49,6 +49,34 @@
         
         
         
+        0.24.0
+        ======
+        - The python tag used for pure-python packages is now .pyN (major 
version
+          only). This change actually occurred in 0.23.0 when the --python-tag
+          option was added, but was not explicitly mentioned in the changelog 
then.
+        - wininst2wheel and egg2wheel removed. Use "wheel convert [archive]"
+          instead.
+        - Wheel now supports setuptools style conditional requirements via the
+          extras_require={} syntax. Separate 'extra' names from conditions 
using
+          the : character. Wheel's own setup.py does this. (The empty-string
+          extra is the same as install_requires.) These conditional 
requirements
+          should work the same whether the package is installed by wheel or
+          by setup.py.
+        
+        0.23.0
+        ======
+        - Compatibiltiy tag flags added to the bdist_wheel command
+        - sdist should include files necessary for tests
+        - 'wheel convert' can now also convert unpacked eggs to wheel
+        - Rename pydist.json to metadata.json to avoid stepping on the PEP
+        - The --skip-scripts option has been removed, and not generating 
scripts is now
+          the default. The option was a temporary approach until installers 
could
+          generate scripts themselves. That is now the case with pip 1.5 and 
later.
+          Note that using pip 1.4 to install a wheel without scripts will 
leave the
+          installation without entry-point wrappers. The "wheel 
install-scripts"
+          command can be used to generate the scripts in such cases.
+        - Thank you contributors
+        
         0.22.0
         ======
         - Include entry_points.txt, scripts a.k.a. commands, in experimental
@@ -61,7 +89,7 @@
         - Pregenerated scripts are the default again.
         - "setup.py bdist_wheel --skip-scripts" turns them off.
         - setuptools is no longer a listed requirement for the 'wheel'
-          package. It is of course still required in order for bdist_wheel 
+          package. It is of course still required in order for bdist_wheel
           to work.
         - "python -m wheel" avoids importing pkg_resources until it's 
necessary.
         
@@ -168,8 +196,8 @@
         
         0.9.5
         =====
-        - Wheel's own wheel file can be executed by Python, and can install 
itself: 
-          ``python wheel-0.9.5-py27-none-any/wheel install ...`` 
+        - Wheel's own wheel file can be executed by Python, and can install 
itself:
+          ``python wheel-0.9.5-py27-none-any/wheel install ...``
         - Use argparse; basic ``wheel install`` command should run with only 
stdlib
           dependencies.
         - Allow requires_dist in setup.cfg's [metadata] section. In addition to
@@ -263,3 +291,4 @@
 Classifier: Programming Language :: Python :: 3
 Classifier: Programming Language :: Python :: 3.2
 Classifier: Programming Language :: Python :: 3.3
+Classifier: Programming Language :: Python :: 3.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/wheel.egg-info/SOURCES.txt 
new/wheel-0.24.0/wheel.egg-info/SOURCES.txt
--- old/wheel-0.22.0/wheel.egg-info/SOURCES.txt 2013-09-16 00:09:16.000000000 
+0200
+++ new/wheel-0.24.0/wheel.egg-info/SOURCES.txt 2014-07-06 18:56:22.000000000 
+0200
@@ -31,16 +31,20 @@
 wheel/signatures/ed25519py.py
 wheel/signatures/keys.py
 wheel/test/__init__.py
+wheel/test/pydist-schema.json
+wheel/test/test-1.0-py2.py3-none-win32.whl
 wheel/test/test_basic.py
 wheel/test/test_install.py
 wheel/test/test_keys.py
 wheel/test/test_paths.py
 wheel/test/test_ranking.py
 wheel/test/test_signatures.py
+wheel/test/test_tagopt.py
 wheel/test/test_tool.py
 wheel/test/test_wheelfile.py
 wheel/test/complex-dist/setup.py
 wheel/test/complex-dist/complexdist/__init__.py
+wheel/test/headers.dist/header.h
 wheel/test/headers.dist/headersdist.py
 wheel/test/headers.dist/setup.py
 wheel/test/simple.dist/setup.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/wheel.egg-info/entry_points.txt 
new/wheel-0.24.0/wheel.egg-info/entry_points.txt
--- old/wheel-0.22.0/wheel.egg-info/entry_points.txt    2013-09-16 
00:09:16.000000000 +0200
+++ new/wheel-0.24.0/wheel.egg-info/entry_points.txt    2014-07-06 
18:56:21.000000000 +0200
@@ -1,6 +1,4 @@
 [console_scripts]
-wininst2wheel = wheel.wininst2wheel:main
-egg2wheel = wheel.egg2wheel:main
 wheel = wheel.tool:main
 
 [distutils.commands]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/wheel-0.22.0/wheel.egg-info/requires.txt 
new/wheel-0.24.0/wheel.egg-info/requires.txt
--- old/wheel-0.22.0/wheel.egg-info/requires.txt        2013-09-16 
00:09:16.000000000 +0200
+++ new/wheel-0.24.0/wheel.egg-info/requires.txt        2014-07-06 
18:56:21.000000000 +0200
@@ -5,7 +5,12 @@
 
 [signatures]
 keyring
-dirspec
 
 [faster-signatures]
-ed25519ll
\ No newline at end of file
+ed25519ll
+
+[:python_version=="2.6"]
+argparse
+
+[signatures:sys_platform!="win32"]
+pyxdg
\ No newline at end of file


Reply via email to