Add nocommit hook

This commit is contained in:
Manu Raghavan 2020-06-10 15:27:06 +05:30
parent d3cb871783
commit 56eb16f2f9
4 changed files with 50 additions and 19 deletions

View file

@ -1,6 +1,6 @@
repos: repos:
- repo: https://github.com/pre-commit/pre-commit-hooks - repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.1.0 rev: v3.2.0
hooks: hooks:
- id: trailing-whitespace - id: trailing-whitespace
- id: end-of-file-fixer - id: end-of-file-fixer

View file

@ -164,9 +164,9 @@
- id: no-commit-keywords - id: no-commit-keywords
name: "Don't commit when nocommit keyword is present" name: "Don't commit when nocommit keyword is present"
entry: no-commit-keywords entry: no-commit-keywords
language: script language: python
always_run: true
types: [text] types: [text]
stages: [commit, push, manual]
- id: no-commit-to-branch - id: no-commit-to-branch
name: "Don't commit to branch" name: "Don't commit to branch"
entry: no-commit-to-branch entry: no-commit-to-branch

View file

@ -0,0 +1,47 @@
import argparse
import os
from typing import Optional
from typing import Sequence
import re
def check_for_no_commit_tokens(
filename: str,
tokens: Optional[Sequence[str]],
) -> str:
with open(filename, mode='r', encoding='utf-8') as file_processed:
lines = file_processed.read()
for token in tokens:
match = re.search(token, lines)
if match:
# no-commit token is present
return match.string
return None
def main(argv: Optional[Sequence[str]] = None) -> int:
parser = argparse.ArgumentParser()
parser.add_argument(
'--tokens',
help=(
'The set of tokens, separated by space, used to block commits '
'if present. For example, "nocommit NOCOMMIT"'
),
)
parser.add_argument('filenames', nargs='*', help='Filenames to fix')
args = parser.parse_args(argv)
return_code = 0
tokens = args.tokens or ["nocommit"]
for filename in args.filenames:
_, extension = os.path.splitext(filename.lower())
match_string = check_for_no_commit_tokens(filename, tokens)
if match_string:
print(f'Found no-commit token in {filename}: {match_string}')
return_code = 1
return return_code
if __name__ == '__main__':
exit(main())

View file

@ -1,16 +0,0 @@
#!/bin/bash
set -e
NOCOMMIT_PRESENT=$(git grep --ignore-case nocommit)
if [ -n $NOCOMMIT_PRESENT ]
then
echo "#nocommit tagged - commit prevented"
echo $NOCOMMIT_PRESENT
exit 1
else
exit 0
fi