Project: PiTiVi
Code Location: git://git.gnome.org/pitivimaster
Browse
/
Download File
pre-commit.hook
#!/usr/bin/env python2
from __future__ import with_statement
import os
import shutil
import subprocess
import sys
import tempfile


def system(*args, **kwargs):
    kwargs.setdefault('stdout', subprocess.PIPE)
    proc = subprocess.Popen(args, **kwargs)
    out, err = proc.communicate()
    return out


def copy_files_to_tmp_dir(files):
    tempdir = tempfile.mkdtemp()
    for name in files:
        filename = os.path.join(tempdir, name)
        filepath = os.path.dirname(filename)
        if not os.path.exists(filepath):
            os.makedirs(filepath)
        with file(filename, 'w') as f:
            system('git', 'show', ':' + name, stdout=f)

    return tempdir


def main():
    modified_files = system('git', 'diff-index', '--cached',
        '--name-only', 'HEAD', '--diff-filter=ACMR').split("\n")[:-1]
    output_message = None

    tempdir = copy_files_to_tmp_dir(modified_files)
    try:
        pep8_errors = system('pep8', '--repeat', '--ignore', 'E501,E128', '.',
            cwd=tempdir)
        if pep8_errors != "":
            output_message = "Your code is not fully pep8 compliant and contains"\
                " the following coding style issues:\n\n" + pep8_errors +\
                "\n\nThanks for correcting them before commiting"
    except OSError:
        output_message = "You should install the pep8 style checker to be able"\
           " to commit in this repo.\nIt allows us to garantee that "\
           "anything that is commited respects the pep8 coding style "\
           "standard.\nYou can install it:\n"\
           "  * on ubuntu, debian: $sudo apt-get install pep8 \n"\
           "  * on fedora: #yum install python-pep8 \n"\
           "  * or add the official pep8 from http://www.python.org/dev/peps/pep-0008/"\
           " in your $PATH"

    shutil.rmtree(tempdir)
    if output_message:
        print output_message,
        sys.exit(1)


if __name__ == '__main__':
    main()