aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2015-09-25 01:02:27 -0400
committerTeddy Wing2015-09-25 01:02:27 -0400
commitefa1909b2fa955e5170eecda8d1d42598c817f07 (patch)
treefaaecc30b46a4afde486294497a3bd708711e633
parentf6bb0d359c7c46eb41a3d760a85f2cc2aad3a79d (diff)
downloadgit-hook-pre-commit-python-javascript-syntax-linter-efa1909b2fa955e5170eecda8d1d42598c817f07.tar.bz2
Create 'pre-commit', add Python tests
* Create our 'pre-commit' hook script that runs flake8 on Python files in the staging area. * Update test setup to create a git repository for testing. * Add a test for the Python linter to confirm that it produces the correct output when trying to commit and that it only checks files in the staging index.
-rw-r--r--pre-commit23
-rw-r--r--t/001-setup.t9
-rw-r--r--t/100-python.t29
-rw-r--r--t/test.py5
-rw-r--r--t/uncommitted.py1
5 files changed, 67 insertions, 0 deletions
diff --git a/pre-commit b/pre-commit
new file mode 100644
index 0000000..aefd1b7
--- /dev/null
+++ b/pre-commit
@@ -0,0 +1,23 @@
+#!/bin/sh
+#
+# Check syntax of Python and JavaScript files.
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+ against=HEAD
+else
+ # Initial commit: diff against an empty tree object
+ against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# Redirect output to stderr.
+# exec 1>&2
+
+# test $(git diff --cached --name-only --diff-filter=A -z $against |
+# LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+files=$(git diff --cached --name-only --diff-filter=AMR -z $against)
+python_files=$(echo $files | grep .*\.py)
+
+if [ -n "$python_files" ]; then
+ flake8 $python_files
+fi
diff --git a/t/001-setup.t b/t/001-setup.t
index 0789bd7..0c6578c 100644
--- a/t/001-setup.t
+++ b/t/001-setup.t
@@ -10,4 +10,13 @@ ok !$?;
chdir 't/git-repo' or die $!;
+system('git init');
+ok !$?;
+
+system('cp ../../pre-commit .git/hooks');
+ok !$?;
+
+system('chmod +x .git/hooks/pre-commit');
+ok !$?;
+
done_testing;
diff --git a/t/100-python.t b/t/100-python.t
new file mode 100644
index 0000000..8e9b403
--- /dev/null
+++ b/t/100-python.t
@@ -0,0 +1,29 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+use Test::More;
+
+chdir 't/git-repo/' or die $!;
+
+system('cp ../*.py .');
+ok !$?;
+
+my $output = `ls -1`;
+
+ok $output eq 'test.py
+uncommitted.py
+', 'Both test Python files are present';
+
+system('git add test.py');
+ok !$?;
+
+$output = `git commit 2>&1`;
+
+ok $output eq "test.py:1:1: F401 'datetime' imported but unused
+test.py:3:80: E501 line too long (97 > 79 characters)
+test.py:5:31: E225 missing whitespace around operator
+", 'flake8 ran on committed Python file';
+
+done_testing;
diff --git a/t/test.py b/t/test.py
new file mode 100644
index 0000000..2878abd
--- /dev/null
+++ b/t/test.py
@@ -0,0 +1,5 @@
+import datetime
+
+'this is a long that is longer than 79 characters, or it will be whenever this sentence finishes'
+
+missing_spaces_around_operator=0
diff --git a/t/uncommitted.py b/t/uncommitted.py
new file mode 100644
index 0000000..0f43f2a
--- /dev/null
+++ b/t/uncommitted.py
@@ -0,0 +1 @@
+import math