def detect_available_upgrades(self, options):
self._prerelease = options.get('--prerelease', False)
explicit_packages_lower = None
if options['-p'] and options['-p'] != ['all']:
explicit_packages_lower = [pack_name.lower() for pack_name in options['-p']]
for i, package in enumerate(self.packages):
try:
package_name, pinned_version = self._expand_package(package)
if not package_name or not pinned_version: # pragma: nocover
# todo: treat <= or >= instead of ==
continue
if explicit_packages_lower and package_name.lower() not in explicit_packages_lower:
# skip if explicit and not chosen
continue
current_version = version.parse(pinned_version)
if pinned_version and isinstance(current_version, version.Version): # version parsing is correct
package_status, reason = self._fetch_index_package_info(package_name, current_version)
if not package_status: # pragma: nocover
print(package, reason)
continue
print('{}/{}: {} ... '.format(i + 1, len(self.packages), package_name), end='')
sys.stdout.flush()
# compare versions
if current_version < package_status['latest_version']:
print('upgrade available: {} ==> {} (uploaded on {})'.format(current_version,
package_status['latest_version'],
package_status['upload_time']))
else:
print('up to date: {}'.format(current_version))
sys.stdout.flush()
self.packages_status_map[package_name] = package_status
except Exception as e: # noqa # pragma: nocover
print('Error while parsing package {} (skipping). \nException: '.format(package), e)
return self.packages_status_map
评论列表
文章目录