From ff94908505fa5466b2547d3d7af3d34cb232bfec Mon Sep 17 00:00:00 2001
From: Kenneth Reitz <me@kennethreitz.org>
Date: Fri, 2 Jun 2017 15:23:05 -0400
Subject: [PATCH] Fix pyyaml (#402)

* Revert "use pkg_resources to check for distributions (#395)"

This reverts commit 9b185f99d505b701dc09b173e834a67d9c306a82.

* use sp-grep for django detection

* sp-grep

* fix setuptools script
---
 bin/steps/collectstatic |  2 +-
 bin/steps/cryptography  |  2 +-
 bin/steps/gdal          |  2 +-
 bin/steps/pylibmc       |  2 +-
 vendor/pip-pop/pip-grep | 57 +++++++++++++++++++++++++++++++++--------
 vendor/pip-pop/sp-grep  | 38 +++++++++++++++++++++++++++
 6 files changed, 88 insertions(+), 15 deletions(-)
 create mode 100755 vendor/pip-pop/sp-grep

diff --git a/bin/steps/collectstatic b/bin/steps/collectstatic
index 20bbb85f..1e029ff2 100755
--- a/bin/steps/collectstatic
+++ b/bin/steps/collectstatic
@@ -20,7 +20,7 @@ MANAGE_FILE=${MANAGE_FILE:-fakepath}
 [ -f .heroku/collectstatic_disabled ] && DISABLE_COLLECTSTATIC=1
 
 # Ensure that Django is explicitly specified in requirements.txt
-pip-grep -s Django && DJANGO_INSTALLED=1
+sp-grep django && DJANGO_INSTALLED=1
 
 
 if [ ! "$DISABLE_COLLECTSTATIC" ] && [ -f "$MANAGE_FILE" ] && [ "$DJANGO_INSTALLED" ]; then
diff --git a/bin/steps/cryptography b/bin/steps/cryptography
index dd4ea32f..8a507999 100755
--- a/bin/steps/cryptography
+++ b/bin/steps/cryptography
@@ -18,7 +18,7 @@ PKG_CONFIG_PATH="/app/.heroku/vendor/lib/pkgconfig:$PKG_CONFIG_PATH"
 source $BIN_DIR/utils
 
 # If a package using cffi exists within requirements, use vendored libffi.
-if (pip-grep -s argon2-cffi bcrypt cffi cryptography PyNaCl pyOpenSSL PyOpenSSL misaka &> /dev/null) then
+if (pip-grep -s requirements.txt argon2-cffi bcrypt cffi cryptography django[argon2] Django[argon2] django[bcrypt] Django[bcrypt] PyNaCl pyOpenSSL PyOpenSSL requests[security] misaka &> /dev/null) then
 
   if [ ! -d ".heroku/vendor/lib/libffi-3.1" ]; then
     echo "-----> Noticed cffi. Bootstrapping libffi."
diff --git a/bin/steps/gdal b/bin/steps/gdal
index 82892b00..50a09ac3 100755
--- a/bin/steps/gdal
+++ b/bin/steps/gdal
@@ -18,7 +18,7 @@ PKG_CONFIG_PATH="/app/.heroku/vendor/lib/pkgconfig:$PKG_CONFIG_PATH"
 source $BIN_DIR/utils
 
 # If GDAL exists within requirements, use vendored gdal.
-if (pip-grep -s GDAL pygdal &> /dev/null) then
+if (pip-grep -s requirements.txt GDAL gdal pygdal &> /dev/null) then
 
   if [ ! -f ".heroku/vendor/bin/gdalserver" ]; then
     echo "-----> Noticed GDAL. Bootstrapping gdal."
diff --git a/bin/steps/pylibmc b/bin/steps/pylibmc
index d5cc7857..f574e535 100755
--- a/bin/steps/pylibmc
+++ b/bin/steps/pylibmc
@@ -17,7 +17,7 @@ source $BIN_DIR/utils
 
 
 # If pylibmc exists within requirements, use vendored libmemcached.
-if (pip-grep -s pylibmc &> /dev/null) then
+if (pip-grep -s requirements.txt pylibmc &> /dev/null) then
 
   if [ ! -d ".heroku/vendor/lib/sasl2" ]; then
     echo "-----> Noticed pylibmc. Bootstrapping libmemcached."
diff --git a/vendor/pip-pop/pip-grep b/vendor/pip-pop/pip-grep
index 8b90a493..9e3371d0 100755
--- a/vendor/pip-pop/pip-grep
+++ b/vendor/pip-pop/pip-grep
@@ -2,26 +2,58 @@
 # -*- coding: utf-8 -*-
 
 """Usage:
-  pip-grep [-s] <package>...
+  pip-grep [-s] <reqfile> <package>...
 
 Options:
   -h --help     Show this screen.
 """
+import os
 from docopt import docopt
-from pkg_resources import DistributionNotFound, get_distribution
+from pip.req import parse_requirements
+from pip.index import PackageFinder
+from pip._vendor.requests import session
 
+requests = session()
 
-def has_any_distribution(names, silent=False):
-    for name in names:
-        try:
-            get_distribution(name)
-        except DistributionNotFound:
-            continue
 
+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 '<Requirements \'{}\'>'.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
+                self.requirements.append(requirement.req)
+
+
+def grep(reqfile, packages, silent=False):
+    try:
+        r = Requirements(reqfile)
+    except ValueError:
         if not silent:
-            print('Package {name} found!'.format(name=name))
+            print('There was a problem loading the given requirement file.')
+        exit(os.EX_NOINPUT)
 
-        exit(0)
+    for req in r.requirements:
+        if req.name in packages:
+            if not silent:
+                print('Package {} found!'.format(req.name))
+            exit(0)
 
     if not silent:
         print('Not found.')
@@ -31,7 +63,10 @@ def has_any_distribution(names, silent=False):
 
 def main():
     args = docopt(__doc__, version='pip-grep')
-    has_any_distribution(names=args['<package>'], silent=args['-s'])
+
+    kwargs = {'reqfile': args['<reqfile>'], 'packages': args['<package>'], 'silent': args['-s']}
+
+    grep(**kwargs)
 
 
 if __name__ == '__main__':
diff --git a/vendor/pip-pop/sp-grep b/vendor/pip-pop/sp-grep
new file mode 100755
index 00000000..de5399d4
--- /dev/null
+++ b/vendor/pip-pop/sp-grep
@@ -0,0 +1,38 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+"""Usage:
+  sp-grep [-s] <package>...
+
+Options:
+  -h --help     Show this screen.
+"""
+from docopt import docopt
+from pkg_resources import DistributionNotFound, get_distribution
+
+
+def has_any_distribution(names, silent=False):
+    for name in names:
+        try:
+            get_distribution(name)
+        except DistributionNotFound:
+            continue
+
+        if not silent:
+            print('Package {name} found!'.format(name=name))
+
+        exit(0)
+
+    if not silent:
+        print('Not found.')
+
+    exit(1)
+
+
+def main():
+    args = docopt(__doc__, version='sp-grep')
+    has_any_distribution(names=args['<package>'], silent=args['-s'])
+
+
+if __name__ == '__main__':
+    main()
\ No newline at end of file
-- 
GitLab