2016-05-09 12:41:01 +00:00
|
|
|
#!/usr/bin/env python
|
|
|
|
from __future__ import print_function
|
|
|
|
|
2016-05-10 12:16:33 +00:00
|
|
|
import argparse
|
2016-05-09 12:41:01 +00:00
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
import tempfile
|
|
|
|
|
2016-05-09 12:49:38 +00:00
|
|
|
from subprocess import check_call, check_output
|
2016-05-09 12:41:01 +00:00
|
|
|
|
|
|
|
|
|
|
|
PACKAGE_NAME = os.environ.get(
|
2016-05-22 21:42:23 +00:00
|
|
|
'CLI_PACKAGE_NAME', 'github.com/urfave/cli'
|
2016-05-09 12:41:01 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
2016-05-09 12:58:20 +00:00
|
|
|
def main(sysargs=sys.argv[:]):
|
2016-05-10 12:16:33 +00:00
|
|
|
targets = {
|
2016-05-09 12:58:20 +00:00
|
|
|
'vet': _vet,
|
|
|
|
'test': _test,
|
2016-06-16 15:47:19 +00:00
|
|
|
'gfmxr': _gfmxr,
|
|
|
|
'toc': _toc,
|
2016-06-23 04:56:44 +00:00
|
|
|
'gen': _gen,
|
2016-05-10 12:16:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser()
|
|
|
|
parser.add_argument(
|
|
|
|
'target', nargs='?', choices=tuple(targets.keys()), default='test'
|
|
|
|
)
|
|
|
|
args = parser.parse_args(sysargs[1:])
|
2016-05-09 12:49:38 +00:00
|
|
|
|
2016-05-10 12:16:33 +00:00
|
|
|
targets[args.target]()
|
2016-05-09 12:58:20 +00:00
|
|
|
return 0
|
2016-05-09 12:49:38 +00:00
|
|
|
|
|
|
|
|
2016-05-09 12:58:20 +00:00
|
|
|
def _test():
|
|
|
|
if check_output('go version'.split()).split()[2] < 'go1.2':
|
2016-06-23 04:56:44 +00:00
|
|
|
_run('go test -v .')
|
2016-05-09 12:58:20 +00:00
|
|
|
return
|
|
|
|
|
|
|
|
coverprofiles = []
|
|
|
|
for subpackage in ['', 'altsrc']:
|
|
|
|
coverprofile = 'cli.coverprofile'
|
|
|
|
if subpackage != '':
|
|
|
|
coverprofile = '{}.coverprofile'.format(subpackage)
|
|
|
|
|
|
|
|
coverprofiles.append(coverprofile)
|
|
|
|
|
|
|
|
_run('go test -v'.split() + [
|
|
|
|
'-coverprofile={}'.format(coverprofile),
|
2016-05-09 13:00:22 +00:00
|
|
|
('{}/{}'.format(PACKAGE_NAME, subpackage)).rstrip('/')
|
2016-05-09 12:58:20 +00:00
|
|
|
])
|
|
|
|
|
2016-05-22 23:44:21 +00:00
|
|
|
combined_name = _combine_coverprofiles(coverprofiles)
|
2016-06-23 04:56:44 +00:00
|
|
|
_run('go tool cover -func={}'.format(combined_name))
|
2016-05-22 23:44:21 +00:00
|
|
|
os.remove(combined_name)
|
2016-05-09 12:41:01 +00:00
|
|
|
|
2016-05-09 12:58:20 +00:00
|
|
|
|
|
|
|
def _gfmxr():
|
2016-05-09 12:41:01 +00:00
|
|
|
_run(['gfmxr', '-c', str(_gfmxr_count()), '-s', 'README.md'])
|
2016-05-09 12:58:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
def _vet():
|
2016-06-23 04:56:44 +00:00
|
|
|
_run('go vet ./...')
|
2016-05-09 12:41:01 +00:00
|
|
|
|
|
|
|
|
2016-06-16 15:47:19 +00:00
|
|
|
def _toc():
|
2016-06-23 13:59:04 +00:00
|
|
|
_run('node_modules/.bin/markdown-toc -i README.md')
|
2016-06-23 04:56:44 +00:00
|
|
|
_run('git diff --quiet')
|
|
|
|
|
|
|
|
|
|
|
|
def _gen():
|
2016-06-23 05:08:19 +00:00
|
|
|
go_version = check_output('go version'.split()).split()[2]
|
|
|
|
if go_version < 'go1.4':
|
|
|
|
print('runtests: skip on {}'.format(go_version), file=sys.stderr)
|
|
|
|
return
|
|
|
|
|
2016-06-23 04:56:44 +00:00
|
|
|
_run('go generate .')
|
|
|
|
_run('git diff --quiet')
|
2016-06-16 15:47:19 +00:00
|
|
|
|
|
|
|
|
2016-05-09 12:41:01 +00:00
|
|
|
def _run(command):
|
2016-06-23 04:56:44 +00:00
|
|
|
if hasattr(command, 'split'):
|
|
|
|
command = command.split()
|
2016-05-09 12:41:01 +00:00
|
|
|
print('runtests: {}'.format(' '.join(command)), file=sys.stderr)
|
|
|
|
check_call(command)
|
|
|
|
|
|
|
|
|
|
|
|
def _gfmxr_count():
|
|
|
|
with open('README.md') as infile:
|
|
|
|
lines = infile.read().splitlines()
|
|
|
|
return len(filter(_is_go_runnable, lines))
|
|
|
|
|
|
|
|
|
|
|
|
def _is_go_runnable(line):
|
|
|
|
return line.startswith('package main')
|
|
|
|
|
|
|
|
|
|
|
|
def _combine_coverprofiles(coverprofiles):
|
2016-05-22 23:44:21 +00:00
|
|
|
combined = tempfile.NamedTemporaryFile(
|
|
|
|
suffix='.coverprofile', delete=False
|
|
|
|
)
|
2016-05-09 12:41:01 +00:00
|
|
|
combined.write('mode: set\n')
|
|
|
|
|
|
|
|
for coverprofile in coverprofiles:
|
|
|
|
with open(coverprofile, 'r') as infile:
|
|
|
|
for line in infile.readlines():
|
|
|
|
if not line.startswith('mode: '):
|
|
|
|
combined.write(line)
|
|
|
|
|
|
|
|
combined.flush()
|
2016-05-22 23:44:21 +00:00
|
|
|
name = combined.name
|
|
|
|
combined.close()
|
|
|
|
return name
|
2016-05-09 12:41:01 +00:00
|
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
sys.exit(main())
|