diff --git a/CHANGELOG.md b/CHANGELOG.md index f3c2894..d82fed3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Unreleased +- Remove vendored `pip-diff` script (#1118). - Remove vendored `pip-grep` script (#1116). ## v185 (2020-11-12) diff --git a/vendor/pip-pop/pip-diff b/vendor/pip-pop/pip-diff deleted file mode 100755 index 8fc7d6f..0000000 --- a/vendor/pip-pop/pip-diff +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -"""Usage: - pip-diff (--fresh | --stale) [--exclude ...] - pip-diff (-h | --help) - -Options: - -h --help Show this screen. - --fresh List newly added packages. - --stale List removed packages. -""" -import os -from docopt import docopt - -try: # pip >= 10 - from pip._internal.req import parse_requirements - from pip._internal.download import PipSession as session - - def PackageFinder(find_links, index_urls, session=None): - from pip._internal.index import PackageFinder - from pip._internal.models.search_scope import SearchScope - from pip._internal.models.selection_prefs import SelectionPreferences - - search_scope = SearchScope.create(find_links, index_urls) - selection_prefs = SelectionPreferences(allow_yanked=False) - return PackageFinder.create(search_scope, selection_prefs, session=session) - -except ImportError: # pip <= 9.0.3 - from pip.req import parse_requirements - from pip.index import PackageFinder - from pip._vendor.requests import session - -requests = session() - - -class Requirements(object): - def __init__(self, reqfile=None): - super(Requirements, self).__init__() - self.path = reqfile - self.requirements = [] - - if reqfile: - self.load(reqfile) - - def __repr__(self): - return ''.format(self.path) - - def load(self, reqfile): - if not os.path.exists(reqfile): - raise ValueError('The given requirements file does not exist.') - - finder = PackageFinder([], [], session=requests) - for requirement in parse_requirements(reqfile, finder=finder, session=requests): - if requirement.req: - if not getattr(requirement.req, 'name', None): - # Prior to pip 8.1.2 the attribute `name` did not exist. - requirement.req.name = requirement.req.project_name - requirement.req.name = requirement.req.name.lower() - self.requirements.append(requirement.req) - - - def diff(self, requirements, ignore_versions=False, excludes=None): - r1 = self - r2 = requirements - results = {'fresh': [], 'stale': []} - - # Generate fresh packages. - other_reqs = ( - [r.name for r in r1.requirements] - if ignore_versions else r1.requirements - ) - - for req in r2.requirements: - r = req.name if ignore_versions else req - - if r not in other_reqs and r not in excludes: - results['fresh'].append(req) - - # Generate stale packages. - other_reqs = ( - [r.name for r in r2.requirements] - if ignore_versions else r2.requirements - ) - - for req in r1.requirements: - r = req.name if ignore_versions else req - - if r not in other_reqs and r not in excludes: - results['stale'].append(req) - - return results - - -def diff(r1, r2, include_fresh=False, include_stale=False, excludes=None): - include_versions = True if include_stale else False - excludes = excludes if len(excludes) else [] - - try: - r1 = Requirements(r1) - r2 = Requirements(r2) - except ValueError: - print('There was a problem loading the given requirements files.') - exit(os.EX_NOINPUT) - - results = r1.diff(r2, ignore_versions=True, excludes=excludes) - - if include_fresh: - for line in results['fresh']: - print(line.name if include_versions else line) - - if include_stale: - for line in results['stale']: - print(line.name if include_versions else line) - - -def main(): - args = docopt(__doc__, version='pip-diff') - - kwargs = { - 'r1': args[''], - 'r2': args[''], - 'include_fresh': args['--fresh'], - 'include_stale': args['--stale'], - 'excludes': args[''] - } - - diff(**kwargs) - - -if __name__ == '__main__': - main()