Have folks been able to set this up successfully on macOS? Is my python virtual env screwed up?
./support/setup-dev.sh [INFO] Installing environment for local. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... An unexpected error has occurred: CalledProcessError: command: ('/usr/local/Cellar/pre-commit/1.21.0_1/libexec/bin/python3.8', '-mvirtualenv', '/Users/bmahler/.cache/pre-commit/repoxm_szyol/py_env-python2', '-p', 'python2') return code: 3 expected return code: 0 stdout: The path python2 (from --python=python2) does not exist stderr: (none) Check the log at /Users/bmahler/.cache/pre-commit/pre-commit.log On Wed, Sep 18, 2019 at 7:04 AM Benjamin Bannier <bbann...@apache.org> wrote: > Hello again, > > I have landed the patches for MESOS-9630 on the `master` branch, so we now > use pre-commit as linting framework. > > pre-commit primer > ================= > > 0. Install pre-commit, https://pre-commit.com/#install. > > 1. Run `./support/setup-dev.sh` to install hooks. We have broken > developer-related setup out of `./bootstrap` which by now only bootstraps > the autotools project while `support/setup-dev.sh` sets up developer > configuration files and git hooks. > > 2. As git hooks are global to a checkout and not tied to branches, you > might run into issues with the linter setup on older branches since > configuration files or scripts might not be present. You either should > setup that branch's linters with e.g., `./bootstrap`, or could silence > warnings from the missing linter setup with e.g., > > $ PRE_COMMIT_ALLOW_NO_CONFIG=1 git commit > > 3. You can use the `SKIP` environment variable to disable certain linters, > e.g., > > # git-revert(1) often produces titles longer than 72 characters. > $ SKIP=gitlint git revert HEAD > > `SKIP` takes a linter `id` which you can look up in > `.pre-commit-config.yaml`. > > 4. We still use git hooks, but To explicitly lint your staged changes > before a commit execute > > # Run all applicable linters, > $ pre-commit > > # or a certain linter, e.g., `cpplint`. > $ pre-commit run cpplint > > pre-commit runs only on staged changes. > > 5. To run a full linting of the whole codebase execute > > $ SKIP=split pre-commit run -a > > We need to skip the `split` linter as it would complain about a mix of > files from stout, libprocess, and Mesos proper (it could be rewritten to > lift this preexisting condition). > > 6. pre-commit caches linter environments in `$XDG_CACHE_HOME/.pre-commit` > where `XDG_CACHE_HOME` is most often `$HOME/.cache`. While pre-commit > automatically sets up linter environments, cleanup is manual > > # gc unused linter environments, e.g., after linter updates. > $ pre-commit gc > > # Remove all cached environments. > $ pre-commit clean > > 7. To make changes to your local linting setup replace the symlink > `.pre-commit-config.yaml` with a copy of `support/pre-commit-config.yaml` > and adjust as needed. pre-commit maintains a listing of hooks of varying > quality, https://pre-commit.com/hooks.html and other linters can be added > pretty easily (see e.g., the `local` linters `split`, `license`, and > `cpplint` in our setup). Consider upstreaming whatever you found useful. > > > > Happy linting, > > Benjamin > > On Sat, Aug 17, 2019 at 2:12 PM Benjamin Bannier <bbann...@apache.org> > wrote: > > > Hi, > > > > I opened MESOS-9360[^1] to improve the way we do linting in Mesos some > time > > ago. I have put some polish on my private setup and now published it, and > > am > > asking for feedback as linting is an important part of working with Mesos > > for > > most of you. I have moved my workflow to pre-commit more than 6 months > ago > > and > > prefer it so much that I will not go back to `support/mesos-style.py`. > > > > * * * > > > > We use `support/mesos-style.py` to perform linting, most often triggered > > automatically when committing. This setup is powerful, but also hard to > > maintain and extend. pre-commit[^2] is a framework for managing Git > commit > > hooks which has an exciting set of features, one can often enough > > configure it > > only with YAML and comes with a long list of existing linters[^3]. Should > > we > > go with this approach we could e.g., trivially enable linters for > Markdown > > or > > HTML (after fixing the current, sometimes wild state of the sources). > > > > I would encourage you to play with the [chain] ending in r/71300[^4] on > > some > > fresh clone (as this modifies your Git hooks). You need to install > > pre-commit[^5] _before applying the chain_, and then run > > `support/setup_dev.sh`. This setup mirrors the existing functionality of > > `support/mesos-style.py`, but also has new linters activated. This should > > present a pretty streamlined workflow. I have also adjusted the Windows > > setup, > > but not tested it. > > > > I have also spent some time to make transitioning from our current > linting > > setup easier. If you are feeling adventurous you can apply the chain up > to > > r/71209/ on your existing setup and run `support/setup_dev.sh`. > > > > One noticeable change is that with pre-commit we will store (some) > linters > > in > > `$XDG_CACHE_HOME` (default: `$HOME/.cache`). The existing setup stores > some > > linter files in the build directory, so a "clean build" might require > > downloading linter files again. With pre-commit OTOH one needs to perform > > garbage-collection out of band (e.g., by executing `pre-commit gc`, or > > deleting > > the cache directory). > > > > * * * > > > > Please let me know whether we should move forward with this change, you > > think > > it needs important adjustments, or you see fundamental reasons that this > > is a > > bad idea. If you like what you see here I would be happy to know about > > that as > > well. > > > > > > Cheers, > > > > Benjamin > > > > > > [^1]: https://issues.apache.org/jira/browse/MESOS-9630 > > [^2]: https://pre-commit.com/ > > [^3]: https://pre-commit.com/hooks.html > > [^4]: https://reviews.apache.org/r/71300/ > > [^5]: https://pre-commit.com/#install > > [^6]: https://reviews.apache.org/r/71209 > > >