From efa1909b2fa955e5170eecda8d1d42598c817f07 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Fri, 25 Sep 2015 01:02:27 -0400 Subject: 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. --- pre-commit | 23 +++++++++++++++++++++++ t/001-setup.t | 9 +++++++++ t/100-python.t | 29 +++++++++++++++++++++++++++++ t/test.py | 5 +++++ t/uncommitted.py | 1 + 5 files changed, 67 insertions(+) create mode 100644 pre-commit create mode 100644 t/100-python.t create mode 100644 t/test.py create mode 100644 t/uncommitted.py 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 -- cgit v1.2.3