#!/usr/bin/env python

from __future__ import print_function

import sys


from subprocess import call


def usage():
    print("""\
usage: go COMMAND

Where COMMAND is one of:
  build     build an installable package
  check     runs lint, build, cover
  clean     remove any derived objects
  cover     run test coverage
  develop   install a 'developable' package
  install   install a complete package
  lint      run lint over the osurce
  pull      pull latest sources from repo
  push      push latest sources from repo
  test      run tests""")


def main(argv):
    if len(argv) != 1 or argv[0] in ('-h', '--help', 'help'):
        usage()
        return 2

    return run(argv[0])


def run(cmd):
    if cmd == 'build':
        return call([sys.executable, 'setup.py', 'build', '--quiet'])
    if cmd == 'check':
        ret = run('lint')
        if not ret:
            ret = run('build')
        if not ret:
            ret = run('cover')
        return ret
    if cmd == 'clean':
        return call(['git', 'clean', '-fxd'])
    if cmd == 'cover':
        ret = call(['coverage', 'erase'])
        if not ret:
            ret = call(['coverage', 'run', '-m', 'typ', '-j', '1'])
        if not ret:
            ret = call(['coverage', 'report', '--omit', '*/site-packages/*'])
        return ret
    if cmd == 'develop':
        ret = call([sys.executable, 'setup.py', 'develop'])
    if cmd == 'install':
        ret = call([sys.executable, 'setup.py', 'install'])
    if cmd == 'lint':
        return call('pylint --rcfile=pylintrc */*.py */*/*.py', shell=True)
    if cmd == 'install':
        return call([sys.executable, 'setup.py', 'install'])
    if cmd == 'pull':
        return call(['git', 'pull'])
    if cmd == 'push':
        return call(['git', 'push'])
    if cmd == 'test':
        return call([sys.executable, '-m', 'typ'])
    else:
        print('Unknown command "%s"' % cmd)
        usage()
        return 2


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