SirMarcalot
SirMarcalot

Reputation: 63

How to run 'git diff --check' on certain file types only

I have been unable to figure out how to run 'git diff --check' on only Python files in my commit. I have a commit with 3 files in it:

$ git show --name-only
...
tools/gitHooks/preReceive.py
tools/gitHooks/unittests/testPreReceive.py
Makefile

The last 2 files have trailing whitespace in them.

$ git diff --check HEAD~1 HEAD
tools/gitHooks/unittests/testPreReceive.py:75: trailing whitespace.
+newmock = Mock()
Makefile:41: new blank line at EOF.

I would like to restrict the whitespace check to only Python files. Doing this gives me the correct files:

$ git diff --name-only HEAD~1 HEAD | grep ".py"
tools/gitHooks/preReceive.py
tools/gitHooks/unittests/testPreReceive.py

But when I pipe the filenames to 'git diff --check' (with or without xargs) I get the wrong output.

$ git diff --name-only HEAD~1 HEAD | grep ".py" | xargs git diff --check HEAD~1 HEAD --
$
$ git diff --name-only HEAD~1 HEAD | grep ".py" | git diff --check HEAD~1 HEAD --
tools/gitHooks/unittests/testPreReceive.py:75: trailing whitespace.
+newmock = Mock()
Makefile:41: new blank line at EOF.

I also tried this as well as a few variations on it with no luck:

$ git diff --check HEAD~1 HEAD -- "*.py"
$

Can anyone help? I feel like I'm close to the answer.

Upvotes: 5

Views: 4274

Answers (1)

user456814
user456814

Reputation:

From the original poster:

Turns out I was using the wrong grep.

$ git diff --name-only HEAD~1 HEAD | grep \.py$ | \
$ xargs git diff --check HEAD~1 HEAD --
tools/gitHooks/unittests/testPreReceive.py:75: trailing whitespace.
+newmock = Mock()

Upvotes: 2

Related Questions