Two hooks so far:
mergecheck_hook prevents merging the wrong branches into
each other. Useful if you want to make sure nobody accidentally merges
a feature branch directly into live.
pep8_hook prevents commits that introduce pep8 errors, or that don't
fix enough of them. In this, it is slightly more sophisticated than
hghooks : that module only checks whether a commit
contains files containing pep8 errors, which can be a bit more
intrusive if your codebase has legacy. OTOH,
hghook lets you
customize the behavior of the pep8 checker, which is also nice.
A Mercurial hook that prevents a merge if the (from, to) pair of branchnames matches a (from, to) pair of regexes in a blacklist.
Edit the BLACKLIST constant in mergecheck.py.
Add this to your repository's
[hooks] preupdate.mergecheck = python:path/to/mergecheck_hook.py:mergecheck
A hook that aborts your commit if it adds pep8 errors, or if it does not fix enough pep8 errors.
If the commit is aborted, the hook will print the list of pep8 errors and tell you how many you need to fix. If the commit is allowed, but the files still contain errors, it will print "committing x files with y pep8 errors" to keep you aware.
The hook does not check merge commits, because you don't want to fix pep8 errors in the middle of a merge. It only scans the files your commit touches.
Add the following to your relevant
[hooks] pretxncommit.pep8 = python:path/to/pep8_hook.py:pep8_hook
If you want to force people to fix at least 2 pep8 errors on every commit, add the following configuration:
[pep8] max_change = -2
Of course you could also set
max_change = 4 to allow people to add
up to 4 pep8 errors every commit, but why would you want to do that?
To perform a commit with the hook disabled, override it using the config flag.
hg --config hooks.pretxncommit.pep8= commit ...
Rewrite the main pep8 hook function so that it takes two arguments:
a count function that you can point at a temp dir, and that returns a count of errors
a rule function that takes arguments
(ui, branch, oldest_count, old_count, new_count, old_is_merge, new_is_merge)
True to abort,
False to allow. It can use
reading the config and for printing messages.
Once that rewrite is done, create one hook function for every workflow below, so that people may choose which one they want.
Get rid of the
Abort the commit if it introduces pep8 errors.
Abort the commit if it introduces more than n pep8 errors.
Abort the commit if it does not fix at least n pep8 errors.
Every second commit must fix at least n pep8 errors. This allows you to make your changes in one commit, then fulfil your pep8 quotum in the next commit.
Every second commit on default (merge or no) must fix at least n pep8 errors. This lets you keep your pep8 fixes separate from your feature branches.