TO-DO list of niceties for the future of Git::Hooks.
The following list is in approximately my order of implementation intention. Any comments or other suggestion are welcome at gnustavo AT cpan.org.
Support the WIN32 Platform
Currently we abort the build on Makefile.PL
.
Improve documentation
We need:
A user-friendly README
A user tutorial
A plugin developer tutorial
Revise documentation and make it more uniform
Follow the advice in http://blog.smartbear.com/software-quality/bid/256072
I18N
Use Locale::TextDomain to internationalize it.
L10N pt_BR
As a first job after i18n I intend to nationalize it to Brazilian Portuguese.
Let the user control which config files to read
Let the user tell which configuration files Git::Hooks should consider. Currently it considers the three default ones (system, global, and local), without knowing which one sets what. Perhaps we could have a new option githooks.extra_config
that could be set with an array of filenames to invoke git config --file
with in succession. This option, if set in the default configuration files, could tell Git::Hooks to grok an extra set of configuration from specific files.
In CheckAcls implement DENY for ACL operations
Along the lines of NFSv4 ACLs (http://tools.ietf.org/html/rfc5661#section-6). I'm thinking about prefixing the what component with a '!'.
Implement equivalents for the SVN::Hooks plugins
In http://search.cpan.org/dist/SVN-Hooks/. Currently we're missing DenyFilenames and UpdateConfFile. Actually, I'm thinking that UpdateConfFile is too much specific. Perhaps something along the lines of this post-update hook would be more interesting: http://stackoverflow.com/questions/279169/deploy-a-project-using-git-push.
Implement the Scott Chacon example hooks
In https://github.com/schacon/githooks.
In CheckLog allow for stop words
CheckLog.spelling
should have a way to register stop words. I'd have to ask for a change in Text::SpellChecker.
CheckLog should check the footer of the commit log message
The Gerrit default commit-msg
implements some checks that could be used here. Some other things to check:
- Require Signed-off-by lines (https://github.com/icefox/git-hooks/blob/master/git_hooks/commit-msg/signed-off-by)
- Duplicate Signed-off-by lines (https://github.com/icefox/git-hooks/blob/master/contrib/commit-msg/duplicate-signedoffby)
Implement the Git::Hooks::CheckWhiteSpace plugin
Some people (e.g. Linus Torvalds) prefer spaces, others prefer tabs.
Some people prefer tab size at 8 characters, others prefer at 4.
This plugin should be able to check these preferences for selected types of files. Some configuration would be like this:
githooks.checkwhitespace.indentation [tab|space|any]
By default any kind of white-space should be allowed. But one could specify tab for tabs only or space for space only.
Note that this checks only the indentation space in each line.
githooks.checkwhitespace.files REGEXP
This multi-valued option defines the files that should be checked. By default, no file is checked.
githooks.checkwhitespace.trailing [allow|deny]
By default trailing white space is denied. But one should be able to allow it.
This way, the options are fixed for any file. Would it be desirable to have different options for different kind of files?
Implement the Git::Hooks::CheckFile plugin
Implement a hook to make it easy to perform some checks on added/modified files. For instance, Perl files should be syntax checked. This could be configured somewhat like this:
CheckFile.rule "\.p[lm]$ perl -c"
The first 'word' in the value would be a regexp used to match the files we're interested in. All that follows would be a command to which the filename would be passed.
This would allow for all kinds of checks specific for some kinds of files. Some interesting ideas here: http://tech.yipit.com/2011/11/16/183772396/.