, (*1)
, (*2)
, (*3)
hooker
An extendable php commit hook, (*4)
Installation
- Download binary https://github.com/bigtallbill/hooker/releases/tag/0.1.0
- Copy the binary release to a directory that is loaded by your PATH
- Make the file executable
chmod a+x hooker
- Check installation
which hooker
Usage
- open a terminal and cd to the target repository
- run
hooker install
This will install a hooker.json config file and also update the commit hook files for this repo to execute hooker, (*5)
Now when you try to commit something for example. hooker will execute., (*6)
hooker.json Config
The hooker.json config file contains settings for each type of hook., (*7)
{
"preCommit": {},
"commitMsg": {
"firstWordImperative": true,
"maxSummaryLength": 50,
"maxContentLength": 72,
"summaryIgnoreUrls": true,
"contentIgnoreUrls": true,
"lineAfterSummaryMustBeBlank": true,
"scripts": {
"after": [
{
"cmd": "runtests.sh",
"passGitArgs": false,
""
}
]
}
}
}
"scripts"
Every hook type can have the element scripts. This allows you to execute arbitrary code that is not a native hooker
check., (*8)
"scripts": {
"after": [
{
"cmd": "runtests.sh"
}
]
}
The "after" key defines when to run the script (currently after is the only one). After means run after hooker's own internal code for that hook., (*9)
Then we have an array of scripts to run., (*10)
Here is a sample script object:, (*11)
{
"cmd": "runtests.sh",
"passGitArgs": false,
"relativeToRepo": false
}
"cmd" is the command to execute, (*12)
"passGitArgs" When set to true will append the git arguments onto the scripts existing arguments, (*13)
"relativeToRepo" Execute this script relative to the repo. Currently this is pretty dumb, it will just prepend the repository path to the cmd., (*14)
"commitMsg"
-
firstWordImperative = Ensure that the first word in a commit message is imperative present-tense
-
maxSummaryLength = The maximum length of the summary line
-
maxContentLength = The maximum length of the message body
-
summaryIgnoreUrls = Ignore length of lines with urls in (useful if you cant help the length of urls)
-
contentIgnoreUrls = Ignore length of lines with urls in (useful if you cant help the length of urls)
-
lineAfterSummaryMustBeBlank = Ensure that the line after the summary is blank