
import argparse
import sys
from plumbum import local

from pre_commit_hooks.util import entry


@entry
def fix_trailing_whitespace(argv):
    parser = argparse.ArgumentParser()
    parser.add_argument('filenames', nargs='*', help='Filenames to fix')
    args = parser.parse_args(argv)

    bad_whitespace_files = filter(bool, local['grep'][
        ('-l', '[[:space:]]$') + tuple(args.filenames)
    ](retcode=None).splitlines())

    if bad_whitespace_files:
        for bad_whitespace_file in bad_whitespace_files:
            print 'Fixing {0}'.format(bad_whitespace_file)
            local['sed']['-i', '-e', 's/[[:space:]]*$//', bad_whitespace_file]()
        return 1
    else:
        return 0


if __name__ == '__main__':
    sys.exit(fix_trailing_whitespace())
