Looking for pre-commit hook to check whitespace errors but not for all files

2 messages, 2 authors, 2016-06-15 · open the first message on its own page

Looking for pre-commit hook to check whitespace errors but not for all files

From: Paul Menzel <hidden>
Date: 2016-06-15 22:59:27

Dear git folks,


in coreboot we try to check for whitespace errors before committing. Of
course a pre-commit hook is the way to go, but unfortunately it is not
so simple (at least for me) as the following requirements exist.

1. Only the files actually committed should be checked. That means
running `git commit -a`, abort that and then running `git commit
some/file` should only check `some/file` for whitespace errors.

2. There are certain files that are allowed to have whitespace errors.
In our case these are `*.patch` and `*.diff` files which by design seem
to contain whitespace error.

Currently the whole tree is checked, which takes a lot of time [1].

I tried to come up with a patch [2], but failed so far. Best would be to
have

    $ git diff --check --only-committed-files --exclude "*patch$"

where I could not find a way for the last to switches.

Currently, I would use

    $ git diff-index --cached --name-only $against -- | grep -v patch$

and pass that list to some whitespace check program. Unfortunately that
still does not fulfill the first requirement.

What am I missing to solve this elegantly?


Thanks,

Paul


[1] http://review.coreboot.org/gitweb?p=coreboot.git;a=blob;f=util/lint/lint-stable-003-whitespace;h=1e824a1e76e37ce641b91c75f2f78e0e2abfd37f;hb=HEAD
[2] http://review.coreboot.org/#/c/3340/

Re: Looking for pre-commit hook to check whitespace errors but not for all files

From: John Keeping <hidden>
Date: 2016-06-15 22:59:27

On Sat, Dec 14, 2013 at 04:28:14PM +0100, Paul Menzel wrote:
in coreboot we try to check for whitespace errors before committing. Of
course a pre-commit hook is the way to go, but unfortunately it is not
so simple (at least for me) as the following requirements exist.

1. Only the files actually committed should be checked. That means
running `git commit -a`, abort that and then running `git commit
some/file` should only check `some/file` for whitespace errors.

2. There are certain files that are allowed to have whitespace errors.
In our case these are `*.patch` and `*.diff` files which by design seem
to contain whitespace error.

Currently the whole tree is checked, which takes a lot of time [1].

I tried to come up with a patch [2], but failed so far. Best would be to
have

    $ git diff --check --only-committed-files --exclude "*patch$"

where I could not find a way for the last to switches.

Currently, I would use

    $ git diff-index --cached --name-only $against -- | grep -v patch$

and pass that list to some whitespace check program. Unfortunately that
still does not fulfill the first requirement.

What am I missing to solve this elegantly?
I think you want to combine .gitattributes with something like the
diff-index above:

	$ cat >.gitattributes <<-EOF
	*.patch whitespace=false
	*.diff whitespace=false
	EOF

	$ git diff-index --check --cached $against --
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help