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:
For more information on wp-dev-lib project and how to configure for your plugins and themes, see the readme.