This is an automated email from the ASF dual-hosted git repository. bbannier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mesos.git
commit 454661dd0dcbb7a7bc87ac58ad74fd6dd04c5c15 Author: Benjamin Bannier <bbann...@apache.org> AuthorDate: Wed Sep 18 11:37:14 2019 +0200 Switched commit hooks to pre-commit. This patch switches commit hooks to be orchestrated by the pre-commit tool mirroring the previous linters invoked through git commit hooks (orchestrated by `support/mesos-style.py` or standalone hooks). Using pre-commit removes the burden of maintaining `support/mesos-style.py`, making sure that hooks have the expected environment (e.g., Python version, Node installed). Additionally, upstream provides a number of additional linters which are not hard to add to Mesos' hooks. Review: https://reviews.apache.org/r/71205/ --- docs/advanced-contribution.md | 3 +- support/gitignore | 1 + support/pre-commit-config.yaml | 48 ++++++++++++++++++++++++++++ support/setup-dev.bat | 18 +++++------ support/setup-dev.sh | 72 ++++++++++-------------------------------- 5 files changed, 77 insertions(+), 65 deletions(-) diff --git a/docs/advanced-contribution.md b/docs/advanced-contribution.md index 6582849..5fbfcb9 100644 --- a/docs/advanced-contribution.md +++ b/docs/advanced-contribution.md @@ -15,6 +15,7 @@ If you'd like to make significant contributions to Mesos, then you'll want to be <br/><br/> * Required installations + RBtools (0.7.10 is known to work, 1.0.1 appears to have an issue) + + [pre-commit](https://pre-commit.com/#install) ## Issue Tracking, Code Review, and Mailing Lists @@ -64,7 +65,7 @@ Here is the standard procedure for proposing and making changes to Mesos: 1. Create one or more test cases to exercise the bug or the feature (the Mesos team uses [test-driven development](http://en.wikipedia.org/wiki/Test-driven_development)). Before you start coding, make sure these test cases all fail. 1. The [testing patterns](testing-patterns.md) page has some suggestions for writing test cases. 2. Make your changes to the code (using whatever IDE/editor you choose) to actually fix the bug or implement the feature. - 1. Before beginning, please read the [Mesos C++ Style Guide](c++-style-guide.md). It is recommended to use the git pre-commit hook (`support/hooks/pre-commit`) to automatically check for style errors. See the hook script for instructions to enable it. + 1. Before beginning, please read the [Mesos C++ Style Guide](c++-style-guide.md). It is recommended to use the git pre-commit hook to automatically check for style errors. The hooks are set up by invoking `./support/setup_dev.sh`. 2. Most of your changes will probably be to files inside of `BASE_MESOS_DIR` 3. From inside of the root Mesos directory: `./bootstrap` and `./support/setup-dev.sh`. 4. To build, we recommend that you don't build inside of the src directory. We recommend you do the following: diff --git a/support/gitignore b/support/gitignore index 703b14b..08280cd 100644 --- a/support/gitignore +++ b/support/gitignore @@ -23,6 +23,7 @@ missing # Files created by ./support/setup-dev.sh .clang-format .clang-tidy +.pre-commit-config.yaml .reviewboardrc .gitlint CPPLINT.cfg diff --git a/support/pre-commit-config.yaml b/support/pre-commit-config.yaml new file mode 100644 index 0000000..547a4fb --- /dev/null +++ b/support/pre-commit-config.yaml @@ -0,0 +1,48 @@ +default_stages: [commit] +repos: +- repo: local + hooks: + - id: split + name: Check that commits are split by project + entry: python ./support/mesos-split.py + language: python + language_version: 'python3' + stages: [commit] + require_serial: true + - id: license + name: Check required license headers + description: license + language: python + language_version: 'python3' + entry: python ./support/check-license.py + types: [text] + files: '.*\.(cpp|hpp|py)$' # TODO(bbannier): also check shell scripts. + - id: cpplint + name: cpplint + entry: python ./support/cpplint.py + language: python + language_version: 'python2' + types: [c++] + args: ['--extensions=hpp,cpp'] +- repo: https://github.com/jorisroovers/gitlint + rev: v0.12.0 + hooks: + - id: gitlint + stages: [commit-msg] +- repo: https://github.com/pre-commit/mirrors-pylint + rev: v2.3.1 + hooks: + - id: pylint + args: ['--score=n', '--rcfile=support/pylint.config'] + files: '(support).*' +- repo: https://github.com/pre-commit/mirrors-eslint + rev: v6.3.0 + hooks: + - id: eslint + args: ['-c', 'support/.eslintrc.js'] + exclude: '^(site/source/assets/js/|src/webui/assets/libs/)' +- repo: https://github.com/jumanjihouse/pre-commit-hooks + rev: 1.11.0 + hooks: + - id: require-ascii + exclude: '^(docs/(committers.md|contributors.yaml))|(site|src/webui)/' diff --git a/support/setup-dev.bat b/support/setup-dev.bat index 3f4154a..df3382b 100644 --- a/support/setup-dev.bat +++ b/support/setup-dev.bat @@ -35,15 +35,6 @@ fsutil reparsepoint query "support" | find "Symbolic Link" >nul && ( goto not_in_root ) -:: Install mesos default hooks and gitignore template. -if not exist .git\hooks\pre-commit ( - mklink .git\hooks\pre-commit ..\..\support\hooks\pre-commit -) - -if not exist .git\hooks\post-rewrite ( - mklink .git\hooks\post-rewrite ..\..\support\hooks\post-rewrite -) - if not exist .gitignore ( mklink .gitignore support\gitignore ) @@ -64,6 +55,15 @@ if not exist .gitlint ( mklink .gitlint support\gitlint ) +if not exist .pre-commit-config.yaml ( + mklink .pre-commit-config.yaml support\pre-commit-config.yaml +) + +:: Install mesos default hooks and gitignore template. +pre-commit install-hooks +pre-commit install --hook-type pre-commit +pre-commit install --hook-type commit-msg + goto:eof diff --git a/support/setup-dev.sh b/support/setup-dev.sh index 183effa..d171234 100755 --- a/support/setup-dev.sh +++ b/support/setup-dev.sh @@ -26,61 +26,6 @@ __EOF__ exit 1 fi -# Helper functions to get the absolute path of a directory as well as compute -# the relative path between two directories. -# Unfortunately these functions are not as readable as, say, python's -# os.path.relpath method, but they allow us to avoid a hard dependence on -# python or other tools during bootstrap. -abspath() { - cd "`dirname "${1}"`" - echo "${PWD}"/"`basename "${1}"`" - cd "${OLDPWD}" -} -relpath() { - local from to up - from="`abspath "${1%/}"`" to="`abspath "${2%/}"/`" - while test "${to}" = "${to#"${from}"/}" \ - -a "${to}" != "${from}"; do - from="${from%/*}" up="../${up}" - done - to="${up%/}${to#${from}}" - echo "${to:-.}" -} - -# Grab a reference to the repo's git directory. Usually this is simply .git in -# the repo's top level directory. However, when submodules are used, it may -# appear elsewhere. The most up-to-date way of finding this directory is to use -# `git rev-parse --git-common-dir`. This is necessary to support things like -# git worktree in addition to git submodules. However, as of January 2016, -# support for the '--git-common-dir' flag is fairly new, forcing us to fall -# back to the older '--git-dir' flag if '--git-common-dir' is not supported. We -# do this by checking the output of `git rev-parse --git-common-dir` and seeing -# if it gives us a valid directory back. If not, we set the git directory using -# the '--git-dir' flag instead. -_gitdir=`git rev-parse --git-common-dir` -if test ! -d "${_gitdir}"; then - _gitdir=`git rev-parse --git-dir` -fi - -# Grab a reference to the git hooks directory as well as the relative path from -# the git hooks directory to the current directory. -_hooksdir=${_gitdir}/hooks -_relpath=`relpath "${_hooksdir}" "${PWD}"` - -# Install mesos default hooks and gitignore template. -if test ! -e "${_hooksdir}/pre-commit"; then - ln -s "${_relpath}/support/hooks/pre-commit" "${_hooksdir}/pre-commit" -fi - -if test ! -e "${_hooksdir}/post-rewrite"; then - ln -s "${_relpath}/support/hooks/post-rewrite" "${_hooksdir}/post-rewrite" -fi - -if test ! -e "${_hooksdir}/commit-msg"; then - ln -s "${_relpath}/support/hooks/commit-msg" "${_hooksdir}/commit-msg" -fi - - if test ! -e .gitignore; then ln -s support/gitignore .gitignore fi @@ -104,3 +49,20 @@ fi if test ! -e .gitlint; then ln -s support/gitlint .gitlint fi + +if test ! -e .pre-commit-config.yaml; then + ln -s support/pre-commit-config.yaml .pre-commit-config.yaml +fi + +# Install Mesos default hooks and gitignore template. +if ! command pre-commit; then + cat >&2 <<__EOF__ + +Please install pre-commit to excercise Mesos linters, https://pre-commit.com/#install. +__EOF__ + exit 1 +fi + +pre-commit install-hooks +pre-commit install --hook-type pre-commit +pre-commit install --hook-type commit-msg