As seen previously on this blog, in Contributing to WordPress Core via GitHub and Streamlining Contributions to WordPress Core via GitHub, there are instructions for how to get a Git repo set up for committing patches for WordPress Core. These posts also include instructions for how to set up Travis CI to restrict reporting linting errors to just the scope of the changed lines in the patch. Today our wp-dev-lib project has been improved so that the included Git pre-commit
hook also only will report issues on the patch being committed. To be clear, the pre-commit
hook will only look at changes that have been staged. If you have selectively staged files via git add -p
to skip committing any debug statements, these unstaged changes will be ignored by the linters like PHP_CodeSniffer, JSHint, and JSCS. This pre-commit
hook can greatly improve the quality (and reduce quantity) of commits since the checks will be performed before Travis CI sees them. The improved pre-commit
hook is even more critical on projects for which Travis CI is not available, such as for repos hosted on BitBucket.
You can install the wp-dev-lib Git pre-commit
hook into your clone for develop.git.wordpress.org
. Inside the root of your repo, run the following Bash commands:
git clone https://github.com/xwp/wp-dev-lib dev-lib cd .git/hooks && ln -s ../../dev-lib/pre-commit . && cd - wget https://raw.githubusercontent.com/xwp/wp-dev-lib/master/.jscsrc cat << XML > phpcs.ruleset.xml <?xml version="1.0"?> <ruleset name="WordPress Develop"> <rule ref="WordPress-Core" /> <rule ref="WordPress-Docs" /> </ruleset> XML
You can now make commits on a feature branch for your WordPress develop repo clone and have the pre-commit
hook ensure that your staged patch conforms to the WordPress coding standards.
Given that Git commits should be small and frequent, and given that PHPUnit tests can take a very long time to run, you can selectively disable PHPUnit for commits via:
DEV_LIB_SKIP=phpunit git commit
You can create a Git command alias for this for convenience (including tab completion) via:
git config --global alias.commit-without-phpunit \ '!DEV_LIB_SKIP=phpunit git commit'
Then you can just run:
git commit-without-phpunit
For more information on wp-dev-lib project and how to configure for your plugins and themes, see the readme.