diff --git a/bin/compile b/bin/compile index 013a71e4df9aba7750a13ecea4d73fa302d74178..f3c08fb6b91439df5d88ee39f9046fdc5aa38cd4 100755 --- a/bin/compile +++ b/bin/compile @@ -173,7 +173,7 @@ set -e source $BIN_DIR/steps/pylibmc # Install Mercurial if it appears to be required. -if (grep -Fiq "hg+" requirements.txt) then +if (in-req "hg+" requirements.txt) then pip install --use-mirrors mercurial | cleanup | indent fi diff --git a/bin/steps/pylibmc b/bin/steps/pylibmc index 8bed8b85063ae6bb7d0267fa964e37ec5ae96c19..949142a144e82e14d11073d6f9726259e0e8d627 100755 --- a/bin/steps/pylibmc +++ b/bin/steps/pylibmc @@ -1,10 +1,10 @@ #!/usr/bin/env bash # This script serves as the Pylibmc build step of the -# [**Python Buildpack**](https://github.com/heroku/heroku-buildpack-python) -# compiler. -# -# A [buildpack](http://devcenter.heroku.com/articles/buildpacks) is an +# [**Python Buildpack**](https://github.com/heroku/heroku-buildpack-python) +# compiler. +# +# A [buildpack](http://devcenter.heroku.com/articles/buildpacks) is an # adapter between a Python application and Heroku's runtime. # # This script is invoked by [`bin/compile`](/). @@ -12,8 +12,11 @@ # The location of the pre-compiled libmemcached binary. VENDORED_MEMCACHED="http://cl.ly/0a191R3K160t1w1P0N25/vendor-libmemcached.tar.gz" +# Syntax sugar. +source $BIN_DIR/utils + # If pylibmc exists within requirements, use vendored libmemcached. -if (grep -Fiq "pylibmc" requirements.txt) then +if (in-req "pylibmc" requirements.txt) then echo "-----> Noticed pylibmc. Bootstrapping libmemcached." cd .heroku diff --git a/bin/utils b/bin/utils index 3004141ecaa0d1abbe220ac7961efb373292c851..f39446ba6c6a61a3e8eb86d8ddc557934dee371a 100755 --- a/bin/utils +++ b/bin/utils @@ -49,4 +49,26 @@ function deep-mv (){ rm -fr $1/!(tmp) find -H $1 -maxdepth 1 -name '.*' -a \( -type d -o -type f -o -type l \) -exec rm -fr '{}' \; -} \ No newline at end of file +} + +# Recursively finds requirements.txt files +function list-req (){ + echo $@ + for req in $(grep -Fie "-r " $@ | sed 's/-r //g') + do + path="$(dirname $@)/$req" + list-req $path + done +} + +# Find pattern in requirements files recursively +# Usage: $ in-req pattern file +function in-req (){ + for file in $(list-req $2) + do + if (grep -Fiqe "$1" "$file") then + return 0 + fi + done + return 1 +}