#!/usr/bin/env python3

import shlex
import subprocess
import sys


linters = {
    'js': ('/usr/bin/eslint', '--stdin'),
    'py': ('/usr/bin/flake8', '--ignore=E121,E123,E126,E266,E501,E704,E731', '-'),
    'scss': ('/usr/bin/scss-lint', '-'),
}


class NoLinterFound(Exception):
    pass


def get_linter(filename):
    try:
        _, extension = filename.rsplit('.', 1)
        linter_args = linters[extension]
    except (KeyError, ValueError):
        raise NoLinterFound

    return linter_args


def lint(filename, require_linter=False):
    try:
        linter_args = get_linter(filename)
    except NoLinterFound:
        print('Not linter found for', filename, file=sys.stderr)
        return not require_linter

    print(filename)
    git_args = ('/usr/bin/git', 'show', shlex.quote(':%s' % filename))
    with subprocess.Popen(git_args, stdout=subprocess.PIPE) as pipe:
        ret = subprocess.call(linter_args, stdin=pipe.stdout)

    return ret == 0


def main(*args):
    ret = True
    while True:
        line = sys.stdin.readline()
        if not line:
            break

        filename = line.strip()
        ret &= lint(filename)

    return 1 ^ ret

if __name__ == '__main__':
    sys.exit(main(*sys.argv[1:]))
