Eliminado venv y www del repositorio, agrege un requirements igual
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
#
|
||||
import logging
|
||||
|
||||
__version__ = '0.2.9.post0'
|
||||
__version__ = '0.3.1'
|
||||
|
||||
class DistlibException(Exception):
|
||||
pass
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -14,7 +14,10 @@ import sys
|
||||
import stat
|
||||
from os.path import abspath
|
||||
import fnmatch
|
||||
import collections
|
||||
try:
|
||||
from collections.abc import Callable
|
||||
except ImportError:
|
||||
from collections import Callable
|
||||
import errno
|
||||
from . import tarfile
|
||||
|
||||
@@ -528,7 +531,7 @@ def register_archive_format(name, function, extra_args=None, description=''):
|
||||
"""
|
||||
if extra_args is None:
|
||||
extra_args = []
|
||||
if not isinstance(function, collections.Callable):
|
||||
if not isinstance(function, Callable):
|
||||
raise TypeError('The %s object is not callable' % function)
|
||||
if not isinstance(extra_args, (tuple, list)):
|
||||
raise TypeError('extra_args needs to be a sequence')
|
||||
@@ -621,7 +624,7 @@ def _check_unpack_options(extensions, function, extra_args):
|
||||
raise RegistryError(msg % (extension,
|
||||
existing_extensions[extension]))
|
||||
|
||||
if not isinstance(function, collections.Callable):
|
||||
if not isinstance(function, Callable):
|
||||
raise TypeError('The registered function must be a callable')
|
||||
|
||||
|
||||
|
||||
@@ -119,11 +119,9 @@ def _expand_globals(config):
|
||||
|
||||
#_expand_globals(_SCHEMES)
|
||||
|
||||
# FIXME don't rely on sys.version here, its format is an implementation detail
|
||||
# of CPython, use sys.version_info or sys.hexversion
|
||||
_PY_VERSION = sys.version.split()[0]
|
||||
_PY_VERSION_SHORT = sys.version[:3]
|
||||
_PY_VERSION_SHORT_NO_DOT = _PY_VERSION[0] + _PY_VERSION[2]
|
||||
_PY_VERSION = '%s.%s.%s' % sys.version_info[:3]
|
||||
_PY_VERSION_SHORT = '%s.%s' % sys.version_info[:2]
|
||||
_PY_VERSION_SHORT_NO_DOT = '%s%s' % sys.version_info[:2]
|
||||
_PREFIX = os.path.normpath(sys.prefix)
|
||||
_EXEC_PREFIX = os.path.normpath(sys.exec_prefix)
|
||||
_CONFIG_VARS = None
|
||||
|
||||
@@ -319,7 +319,7 @@ except ImportError: # pragma: no cover
|
||||
try:
|
||||
callable = callable
|
||||
except NameError: # pragma: no cover
|
||||
from collections import Callable
|
||||
from collections.abc import Callable
|
||||
|
||||
def callable(obj):
|
||||
return isinstance(obj, Callable)
|
||||
|
||||
@@ -550,7 +550,7 @@ class InstalledDistribution(BaseInstalledDistribution):
|
||||
r = finder.find(WHEEL_METADATA_FILENAME)
|
||||
# Temporary - for legacy support
|
||||
if r is None:
|
||||
r = finder.find('METADATA')
|
||||
r = finder.find(LEGACY_METADATA_FILENAME)
|
||||
if r is None:
|
||||
raise ValueError('no %s found in %s' % (METADATA_FILENAME,
|
||||
path))
|
||||
@@ -567,7 +567,7 @@ class InstalledDistribution(BaseInstalledDistribution):
|
||||
p = os.path.join(path, 'top_level.txt')
|
||||
if os.path.exists(p):
|
||||
with open(p, 'rb') as f:
|
||||
data = f.read()
|
||||
data = f.read().decode('utf-8')
|
||||
self.modules = data.splitlines()
|
||||
|
||||
def __repr__(self):
|
||||
|
||||
@@ -304,18 +304,25 @@ class Locator(object):
|
||||
|
||||
def _get_digest(self, info):
|
||||
"""
|
||||
Get a digest from a dictionary by looking at keys of the form
|
||||
'algo_digest'.
|
||||
Get a digest from a dictionary by looking at a "digests" dictionary
|
||||
or keys of the form 'algo_digest'.
|
||||
|
||||
Returns a 2-tuple (algo, digest) if found, else None. Currently
|
||||
looks only for SHA256, then MD5.
|
||||
"""
|
||||
result = None
|
||||
for algo in ('sha256', 'md5'):
|
||||
key = '%s_digest' % algo
|
||||
if key in info:
|
||||
result = (algo, info[key])
|
||||
break
|
||||
if 'digests' in info:
|
||||
digests = info['digests']
|
||||
for algo in ('sha256', 'md5'):
|
||||
if algo in digests:
|
||||
result = (algo, digests[algo])
|
||||
break
|
||||
if not result:
|
||||
for algo in ('sha256', 'md5'):
|
||||
key = '%s_digest' % algo
|
||||
if key in info:
|
||||
result = (algo, info[key])
|
||||
break
|
||||
return result
|
||||
|
||||
def _update_version_data(self, result, info):
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#
|
||||
"""Implementation of the Metadata for Python packages PEPs.
|
||||
|
||||
Supports all metadata formats (1.0, 1.1, 1.2, and 2.0 experimental).
|
||||
Supports all metadata formats (1.0, 1.1, 1.2, 1.3/2.1 and withdrawn 2.0).
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
@@ -194,38 +194,12 @@ def _best_version(fields):
|
||||
|
||||
return '2.0'
|
||||
|
||||
# This follows the rules about transforming keys as described in
|
||||
# https://www.python.org/dev/peps/pep-0566/#id17
|
||||
_ATTR2FIELD = {
|
||||
'metadata_version': 'Metadata-Version',
|
||||
'name': 'Name',
|
||||
'version': 'Version',
|
||||
'platform': 'Platform',
|
||||
'supported_platform': 'Supported-Platform',
|
||||
'summary': 'Summary',
|
||||
'description': 'Description',
|
||||
'keywords': 'Keywords',
|
||||
'home_page': 'Home-page',
|
||||
'author': 'Author',
|
||||
'author_email': 'Author-email',
|
||||
'maintainer': 'Maintainer',
|
||||
'maintainer_email': 'Maintainer-email',
|
||||
'license': 'License',
|
||||
'classifier': 'Classifier',
|
||||
'download_url': 'Download-URL',
|
||||
'obsoletes_dist': 'Obsoletes-Dist',
|
||||
'provides_dist': 'Provides-Dist',
|
||||
'requires_dist': 'Requires-Dist',
|
||||
'setup_requires_dist': 'Setup-Requires-Dist',
|
||||
'requires_python': 'Requires-Python',
|
||||
'requires_external': 'Requires-External',
|
||||
'requires': 'Requires',
|
||||
'provides': 'Provides',
|
||||
'obsoletes': 'Obsoletes',
|
||||
'project_url': 'Project-URL',
|
||||
'private_version': 'Private-Version',
|
||||
'obsoleted_by': 'Obsoleted-By',
|
||||
'extension': 'Extension',
|
||||
'provides_extra': 'Provides-Extra',
|
||||
name.lower().replace("-", "_"): name for name in _ALL_FIELDS
|
||||
}
|
||||
_FIELD2ATTR = {field: attr for attr, field in _ATTR2FIELD.items()}
|
||||
|
||||
_PREDICATE_FIELDS = ('Requires-Dist', 'Obsoletes-Dist', 'Provides-Dist')
|
||||
_VERSIONS_FIELDS = ('Requires-Python',)
|
||||
@@ -262,7 +236,7 @@ def _get_name_and_version(name, version, for_filename=False):
|
||||
class LegacyMetadata(object):
|
||||
"""The legacy metadata of a release.
|
||||
|
||||
Supports versions 1.0, 1.1 and 1.2 (auto-detected). You can
|
||||
Supports versions 1.0, 1.1, 1.2, 2.0 and 1.3/2.1 (auto-detected). You can
|
||||
instantiate the class with one of these arguments (or none):
|
||||
- *path*, the path to a metadata file
|
||||
- *fileobj* give a file-like object with metadata as content
|
||||
@@ -381,6 +355,11 @@ class LegacyMetadata(object):
|
||||
value = msg[field]
|
||||
if value is not None and value != 'UNKNOWN':
|
||||
self.set(field, value)
|
||||
|
||||
# PEP 566 specifies that the body be used for the description, if
|
||||
# available
|
||||
body = msg.get_payload()
|
||||
self["Description"] = body if body else self["Description"]
|
||||
# logger.debug('Attempting to set metadata for %s', self)
|
||||
# self.set_metadata_version()
|
||||
|
||||
@@ -567,57 +546,21 @@ class LegacyMetadata(object):
|
||||
|
||||
Field names will be converted to use the underscore-lowercase style
|
||||
instead of hyphen-mixed case (i.e. home_page instead of Home-page).
|
||||
This is as per https://www.python.org/dev/peps/pep-0566/#id17.
|
||||
"""
|
||||
self.set_metadata_version()
|
||||
|
||||
mapping_1_0 = (
|
||||
('metadata_version', 'Metadata-Version'),
|
||||
('name', 'Name'),
|
||||
('version', 'Version'),
|
||||
('summary', 'Summary'),
|
||||
('home_page', 'Home-page'),
|
||||
('author', 'Author'),
|
||||
('author_email', 'Author-email'),
|
||||
('license', 'License'),
|
||||
('description', 'Description'),
|
||||
('keywords', 'Keywords'),
|
||||
('platform', 'Platform'),
|
||||
('classifiers', 'Classifier'),
|
||||
('download_url', 'Download-URL'),
|
||||
)
|
||||
fields = _version2fieldlist(self['Metadata-Version'])
|
||||
|
||||
data = {}
|
||||
for key, field_name in mapping_1_0:
|
||||
|
||||
for field_name in fields:
|
||||
if not skip_missing or field_name in self._fields:
|
||||
data[key] = self[field_name]
|
||||
|
||||
if self['Metadata-Version'] == '1.2':
|
||||
mapping_1_2 = (
|
||||
('requires_dist', 'Requires-Dist'),
|
||||
('requires_python', 'Requires-Python'),
|
||||
('requires_external', 'Requires-External'),
|
||||
('provides_dist', 'Provides-Dist'),
|
||||
('obsoletes_dist', 'Obsoletes-Dist'),
|
||||
('project_url', 'Project-URL'),
|
||||
('maintainer', 'Maintainer'),
|
||||
('maintainer_email', 'Maintainer-email'),
|
||||
)
|
||||
for key, field_name in mapping_1_2:
|
||||
if not skip_missing or field_name in self._fields:
|
||||
if key != 'project_url':
|
||||
data[key] = self[field_name]
|
||||
else:
|
||||
data[key] = [','.join(u) for u in self[field_name]]
|
||||
|
||||
elif self['Metadata-Version'] == '1.1':
|
||||
mapping_1_1 = (
|
||||
('provides', 'Provides'),
|
||||
('requires', 'Requires'),
|
||||
('obsoletes', 'Obsoletes'),
|
||||
)
|
||||
for key, field_name in mapping_1_1:
|
||||
if not skip_missing or field_name in self._fields:
|
||||
key = _FIELD2ATTR[field_name]
|
||||
if key != 'project_url':
|
||||
data[key] = self[field_name]
|
||||
else:
|
||||
data[key] = [','.join(u) for u in self[field_name]]
|
||||
|
||||
return data
|
||||
|
||||
@@ -1003,10 +946,14 @@ class Metadata(object):
|
||||
LEGACY_MAPPING = {
|
||||
'name': 'Name',
|
||||
'version': 'Version',
|
||||
'license': 'License',
|
||||
('extensions', 'python.details', 'license'): 'License',
|
||||
'summary': 'Summary',
|
||||
'description': 'Description',
|
||||
'classifiers': 'Classifier',
|
||||
('extensions', 'python.project', 'project_urls', 'Home'): 'Home-page',
|
||||
('extensions', 'python.project', 'contacts', 0, 'name'): 'Author',
|
||||
('extensions', 'python.project', 'contacts', 0, 'email'): 'Author-email',
|
||||
'source_url': 'Download-URL',
|
||||
('extensions', 'python.details', 'classifiers'): 'Classifier',
|
||||
}
|
||||
|
||||
def _to_legacy(self):
|
||||
@@ -1034,16 +981,29 @@ class Metadata(object):
|
||||
assert self._data and not self._legacy
|
||||
result = LegacyMetadata()
|
||||
nmd = self._data
|
||||
# import pdb; pdb.set_trace()
|
||||
for nk, ok in self.LEGACY_MAPPING.items():
|
||||
if nk in nmd:
|
||||
result[ok] = nmd[nk]
|
||||
if not isinstance(nk, tuple):
|
||||
if nk in nmd:
|
||||
result[ok] = nmd[nk]
|
||||
else:
|
||||
d = nmd
|
||||
found = True
|
||||
for k in nk:
|
||||
try:
|
||||
d = d[k]
|
||||
except (KeyError, IndexError):
|
||||
found = False
|
||||
break
|
||||
if found:
|
||||
result[ok] = d
|
||||
r1 = process_entries(self.run_requires + self.meta_requires)
|
||||
r2 = process_entries(self.build_requires + self.dev_requires)
|
||||
if self.extras:
|
||||
result['Provides-Extra'] = sorted(self.extras)
|
||||
result['Requires-Dist'] = sorted(r1)
|
||||
result['Setup-Requires-Dist'] = sorted(r2)
|
||||
# TODO: other fields such as contacts
|
||||
# TODO: any other fields wanted
|
||||
return result
|
||||
|
||||
def write(self, path=None, fileobj=None, legacy=False, skip_unknown=True):
|
||||
|
||||
@@ -48,7 +48,7 @@ if __name__ == '__main__':
|
||||
'''
|
||||
|
||||
|
||||
def _enquote_executable(executable):
|
||||
def enquote_executable(executable):
|
||||
if ' ' in executable:
|
||||
# make sure we quote only the executable in case of env
|
||||
# for example /usr/bin/env "/dir with spaces/bin/jython"
|
||||
@@ -63,6 +63,8 @@ def _enquote_executable(executable):
|
||||
executable = '"%s"' % executable
|
||||
return executable
|
||||
|
||||
# Keep the old name around (for now), as there is at least one project using it!
|
||||
_enquote_executable = enquote_executable
|
||||
|
||||
class ScriptMaker(object):
|
||||
"""
|
||||
@@ -88,6 +90,7 @@ class ScriptMaker(object):
|
||||
|
||||
self._is_nt = os.name == 'nt' or (
|
||||
os.name == 'java' and os._name == 'nt')
|
||||
self.version_info = sys.version_info
|
||||
|
||||
def _get_alternate_executable(self, executable, options):
|
||||
if options.get('gui', False) and self._is_nt: # pragma: no cover
|
||||
@@ -172,12 +175,20 @@ class ScriptMaker(object):
|
||||
|
||||
if sys.platform.startswith('java'): # pragma: no cover
|
||||
executable = self._fix_jython_executable(executable)
|
||||
# Normalise case for Windows
|
||||
executable = os.path.normcase(executable)
|
||||
|
||||
# Normalise case for Windows - COMMENTED OUT
|
||||
# executable = os.path.normcase(executable)
|
||||
# N.B. The normalising operation above has been commented out: See
|
||||
# issue #124. Although paths in Windows are generally case-insensitive,
|
||||
# they aren't always. For example, a path containing a ẞ (which is a
|
||||
# LATIN CAPITAL LETTER SHARP S - U+1E9E) is normcased to ß (which is a
|
||||
# LATIN SMALL LETTER SHARP S' - U+00DF). The two are not considered by
|
||||
# Windows as equivalent in path names.
|
||||
|
||||
# If the user didn't specify an executable, it may be necessary to
|
||||
# cater for executable paths with spaces (not uncommon on Windows)
|
||||
if enquote:
|
||||
executable = _enquote_executable(executable)
|
||||
executable = enquote_executable(executable)
|
||||
# Issue #51: don't use fsencode, since we later try to
|
||||
# check that the shebang is decodable using utf-8.
|
||||
executable = executable.encode('utf-8')
|
||||
@@ -285,9 +296,10 @@ class ScriptMaker(object):
|
||||
if '' in self.variants:
|
||||
scriptnames.add(name)
|
||||
if 'X' in self.variants:
|
||||
scriptnames.add('%s%s' % (name, sys.version[0]))
|
||||
scriptnames.add('%s%s' % (name, self.version_info[0]))
|
||||
if 'X.Y' in self.variants:
|
||||
scriptnames.add('%s-%s' % (name, sys.version[:3]))
|
||||
scriptnames.add('%s-%s.%s' % (name, self.version_info[0],
|
||||
self.version_info[1]))
|
||||
if options and options.get('gui', False):
|
||||
ext = 'pyw'
|
||||
else:
|
||||
@@ -367,8 +379,12 @@ class ScriptMaker(object):
|
||||
# Issue 31: don't hardcode an absolute package name, but
|
||||
# determine it relative to the current package
|
||||
distlib_package = __name__.rsplit('.', 1)[0]
|
||||
result = finder(distlib_package).find(name).bytes
|
||||
return result
|
||||
resource = finder(distlib_package).find(name)
|
||||
if not resource:
|
||||
msg = ('Unable to find resource %s in package %s' % (name,
|
||||
distlib_package))
|
||||
raise ValueError(msg)
|
||||
return resource.bytes
|
||||
|
||||
# Public API follows
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -703,7 +703,7 @@ class ExportEntry(object):
|
||||
|
||||
ENTRY_RE = re.compile(r'''(?P<name>(\w|[-.+])+)
|
||||
\s*=\s*(?P<callable>(\w+)([:\.]\w+)*)
|
||||
\s*(\[\s*(?P<flags>\w+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])?
|
||||
\s*(\[\s*(?P<flags>[\w-]+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])?
|
||||
''', re.VERBOSE)
|
||||
|
||||
def get_export_entry(specification):
|
||||
@@ -1438,7 +1438,8 @@ if ssl:
|
||||
ca_certs=self.ca_certs)
|
||||
else: # pragma: no cover
|
||||
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
|
||||
context.options |= ssl.OP_NO_SSLv2
|
||||
if hasattr(ssl, 'OP_NO_SSLv2'):
|
||||
context.options |= ssl.OP_NO_SSLv2
|
||||
if self.cert_file:
|
||||
context.load_cert_chain(self.cert_file, self.key_file)
|
||||
kwargs = {}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -26,7 +26,8 @@ import zipfile
|
||||
from . import __version__, DistlibException
|
||||
from .compat import sysconfig, ZipFile, fsdecode, text_type, filter
|
||||
from .database import InstalledDistribution
|
||||
from .metadata import Metadata, METADATA_FILENAME, WHEEL_METADATA_FILENAME
|
||||
from .metadata import (Metadata, METADATA_FILENAME, WHEEL_METADATA_FILENAME,
|
||||
LEGACY_METADATA_FILENAME)
|
||||
from .util import (FileOperator, convert_path, CSVReader, CSVWriter, Cache,
|
||||
cached_property, get_cache_base, read_exports, tempdir)
|
||||
from .version import NormalizedVersion, UnsupportedVersionError
|
||||
@@ -221,10 +222,12 @@ class Wheel(object):
|
||||
wheel_metadata = self.get_wheel_metadata(zf)
|
||||
wv = wheel_metadata['Wheel-Version'].split('.', 1)
|
||||
file_version = tuple([int(i) for i in wv])
|
||||
if file_version < (1, 1):
|
||||
fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME, 'METADATA']
|
||||
else:
|
||||
fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME]
|
||||
# if file_version < (1, 1):
|
||||
# fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME,
|
||||
# LEGACY_METADATA_FILENAME]
|
||||
# else:
|
||||
# fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME]
|
||||
fns = [WHEEL_METADATA_FILENAME, LEGACY_METADATA_FILENAME]
|
||||
result = None
|
||||
for fn in fns:
|
||||
try:
|
||||
@@ -299,10 +302,9 @@ class Wheel(object):
|
||||
return hash_kind, result
|
||||
|
||||
def write_record(self, records, record_path, base):
|
||||
records = list(records) # make a copy for sorting
|
||||
records = list(records) # make a copy, as mutated
|
||||
p = to_posix(os.path.relpath(record_path, base))
|
||||
records.append((p, '', ''))
|
||||
records.sort()
|
||||
with CSVWriter(record_path) as writer:
|
||||
for row in records:
|
||||
writer.writerow(row)
|
||||
@@ -425,6 +427,18 @@ class Wheel(object):
|
||||
ap = to_posix(os.path.join(info_dir, 'WHEEL'))
|
||||
archive_paths.append((ap, p))
|
||||
|
||||
# sort the entries by archive path. Not needed by any spec, but it
|
||||
# keeps the archive listing and RECORD tidier than they would otherwise
|
||||
# be. Use the number of path segments to keep directory entries together,
|
||||
# and keep the dist-info stuff at the end.
|
||||
def sorter(t):
|
||||
ap = t[0]
|
||||
n = ap.count('/')
|
||||
if '.dist-info' in ap:
|
||||
n += 10000
|
||||
return (n, ap)
|
||||
archive_paths = sorted(archive_paths, key=sorter)
|
||||
|
||||
# Now, at last, RECORD.
|
||||
# Paths in here are archive paths - nothing else makes sense.
|
||||
self.write_records((distinfo, info_dir), libdir, archive_paths)
|
||||
@@ -476,7 +490,7 @@ class Wheel(object):
|
||||
data_dir = '%s.data' % name_ver
|
||||
info_dir = '%s.dist-info' % name_ver
|
||||
|
||||
metadata_name = posixpath.join(info_dir, METADATA_FILENAME)
|
||||
metadata_name = posixpath.join(info_dir, LEGACY_METADATA_FILENAME)
|
||||
wheel_metadata_name = posixpath.join(info_dir, 'WHEEL')
|
||||
record_name = posixpath.join(info_dir, 'RECORD')
|
||||
|
||||
@@ -619,7 +633,7 @@ class Wheel(object):
|
||||
for v in epdata[k].values():
|
||||
s = '%s:%s' % (v.prefix, v.suffix)
|
||||
if v.flags:
|
||||
s += ' %s' % v.flags
|
||||
s += ' [%s]' % ','.join(v.flags)
|
||||
d[v.name] = s
|
||||
except Exception:
|
||||
logger.warning('Unable to read legacy script '
|
||||
@@ -684,7 +698,7 @@ class Wheel(object):
|
||||
if cache is None:
|
||||
# Use native string to avoid issues on 2.x: see Python #20140.
|
||||
base = os.path.join(get_cache_base(), str('dylib-cache'),
|
||||
sys.version[:3])
|
||||
'%s.%s' % sys.version_info[:2])
|
||||
cache = Cache(base)
|
||||
return cache
|
||||
|
||||
@@ -773,7 +787,7 @@ class Wheel(object):
|
||||
data_dir = '%s.data' % name_ver
|
||||
info_dir = '%s.dist-info' % name_ver
|
||||
|
||||
metadata_name = posixpath.join(info_dir, METADATA_FILENAME)
|
||||
metadata_name = posixpath.join(info_dir, LEGACY_METADATA_FILENAME)
|
||||
wheel_metadata_name = posixpath.join(info_dir, 'WHEEL')
|
||||
record_name = posixpath.join(info_dir, 'RECORD')
|
||||
|
||||
@@ -842,7 +856,7 @@ class Wheel(object):
|
||||
|
||||
def get_version(path_map, info_dir):
|
||||
version = path = None
|
||||
key = '%s/%s' % (info_dir, METADATA_FILENAME)
|
||||
key = '%s/%s' % (info_dir, LEGACY_METADATA_FILENAME)
|
||||
if key not in path_map:
|
||||
key = '%s/PKG-INFO' % info_dir
|
||||
if key in path_map:
|
||||
@@ -868,7 +882,7 @@ class Wheel(object):
|
||||
if updated:
|
||||
md = Metadata(path=path)
|
||||
md.version = updated
|
||||
legacy = not path.endswith(METADATA_FILENAME)
|
||||
legacy = path.endswith(LEGACY_METADATA_FILENAME)
|
||||
md.write(path=path, legacy=legacy)
|
||||
logger.debug('Version updated from %r to %r', version,
|
||||
updated)
|
||||
|
||||
Reference in New Issue
Block a user