From 690241a8a926ae646fdc45ed59ce72f29e6d0bad Mon Sep 17 00:00:00 2001 From: Colin Sullivan Date: Wed, 5 Oct 2016 13:38:34 -0400 Subject: [PATCH] Added self-documenting comments and default Rule to list commands with descriptions --- {{ cookiecutter.repo_name }}/Makefile | 69 +++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/{{ cookiecutter.repo_name }}/Makefile b/{{ cookiecutter.repo_name }}/Makefile index df94b11..b99ac61 100644 --- a/{{ cookiecutter.repo_name }}/Makefile +++ b/{{ cookiecutter.repo_name }}/Makefile @@ -10,24 +10,93 @@ BUCKET = {{ cookiecutter.s3_bucket }} # COMMANDS # ################################################################################# +## Install Python Dependencies requirements: pip install -q -r requirements.txt +## Make Dataset data: requirements python src/data/make_dataset.py +## Delete all compiled Python files clean: find . -name "*.pyc" -exec rm {} \; +## Lint using flake8 lint: flake8 --exclude=lib/,bin/,docs/conf.py . +## Upload Data to S3 sync_data_to_s3: aws s3 sync data/ s3://$(BUCKET)/data/ +## Download Data from S3 sync_data_from_s3: aws s3 sync s3://$(BUCKET)/data/ data/ ################################################################################# # PROJECT RULES # ################################################################################# + + + +################################################################################# +# Self Documenting Commands # +################################################################################# + +.DEFAULT_GOAL := show-help + +# Inspired by +# sed script explained: +# /^##/: +# * save line in hold space +# * purge line +# * Loop: +# * append newline + line to hold space +# * go to next line +# * if line starts with doc comment, strip comment character off and loop +# * remove target prerequisites +# * append hold space (+ newline) to line +# * replace newline plus comments by `---` +# * print line +# Separate expressions are necessary because labels cannot be delimited by +# semicolon; see +.PHONY: show-help +show-help: + @echo "$$(tput bold)Available rules:$$(tput sgr0)" + @echo + @sed -n -e "/^## / { \ + h; \ + s/.*//; \ + :doc" \ + -e "H; \ + n; \ + s/^## //; \ + t doc" \ + -e "s/:.*//; \ + G; \ + s/\\n## /---/; \ + s/\\n/ /g; \ + p; \ + }" ${MAKEFILE_LIST} \ + | LC_ALL='C' sort --ignore-case \ + | awk -F '---' \ + -v ncol=$$(tput cols) \ + -v indent=19 \ + -v col_on="$$(tput setaf 6)" \ + -v col_off="$$(tput sgr0)" \ + '{ \ + printf "%s%*s%s ", col_on, -indent, $$1, col_off; \ + n = split($$2, words, " "); \ + line_length = ncol - indent; \ + for (i = 1; i <= n; i++) { \ + line_length -= length(words[i]) + 1; \ + if (line_length <= 0) { \ + line_length = ncol - indent - length(words[i]) - 1; \ + printf "\n%*s ", -indent, " "; \ + } \ + printf "%s ", words[i]; \ + } \ + printf "\n"; \ + }' \ + | more $(shell test $(shell uname) == Darwin && echo '--no-init --raw-control-chars') \ No newline at end of file