2017-09-20 17:47 GMT+02:00 Arun Isaac : > > I have been working on a guile script to automatically check commit > messages -- something like `guix lint' but for commit messages instead > of package definitions. This could help us enforce our commit message > guidelines and avoid screw-ups like the one I did in commit > 1ee879e96705e6381c056358b7f426f2cf99c1df. I believe more automation is > essential and would help us scale better if/when we have more people > with commit access. > Hear, hear. > > I have taken the following approach with my script: I have devised a > grammar (shown below) to parse commit messages. Once the parser outputs > a parse tree for the commit message, we can apply any number of checks > on it. > > Do you think this is a good approach? If so, I shall proceed with the > work, and complete the script. If not, what other approach would be > good? > Nice. What parts of the commit message guidelines do you expect to be verifiable, and which parts do you think will be too hard/restrictive to automatically verify? > > Note that the grammar shown below is incomplete and buggy. Do ignore > that for now. > Alright. If you haven't done so already, adding test cases (from existing proper and improper commit messages) would ease understanding. > > (define-peg-string-patterns > "commit <-- module S module S summary NL NL (description NL NL)? > changelog signature? > module <-- (!C !S .)* C > summary <-- (!NL .)* > description <-- (!(NL NL) .)* > changelog <-- entry* > entry <-- bullet S file S section C S change > file <-- word > section <-- LR (!RR .)* RR > change <-- (!(bullet / (NL NL)) .)* > signature <-- signedoffby signatory S email > signedoffby < 'Signed-off-by: ' > signatory <-- (!' <' .)* > email <-- LA (!RA .)* RA > word <- (!S .)* > S < ' ' > C < ':' > NL < '\n' > bullet < '*' > LR < '(' > RR < ')' > LA < '<' > RA < '>'") If this works, I would love for it to be a commit hook. Thanks for looking into this! - Jelle