from __future__ import absolute_import
from __future__ import print_function
from __future__ import unicode_literals

import argparse
import re
import sys


GITHUB_NON_PERMALINK = re.compile(
    b'https://github.com/[^/]+/[^/]+/blob/master/[^# ]+#L\d+',
)


def _check_filename(filename):
    retv = 0
    with open(filename, 'rb') as f:
        for i, line in enumerate(f, 1):
            if GITHUB_NON_PERMALINK.search(line):
                sys.stdout.write('{}:{}:'.format(filename, i))
                getattr(sys.stdout, 'buffer', sys.stdout).write(line)
                retv = 1
    return retv


def main(argv=None):
    parser = argparse.ArgumentParser()
    parser.add_argument('filenames', nargs='*')
    args = parser.parse_args(argv)

    retv = 0
    for filename in args.filenames:
        retv |= _check_filename(filename)

    if retv:
        print()
        print('Non-permanent github link detected.')
        print('On any page on github press [y] to load a permalink.')
    return retv


if __name__ == '__main__':
    exit(main())
