Reputation: 63
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
Reputation:
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