Initial commit, got popularity scanner working
This commit is contained in:
commit
d725de6949
|
@ -0,0 +1,2 @@
|
||||||
|
*.pyc
|
||||||
|
*.egg-info
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
import argparse
|
||||||
|
import teamanalysis.git
|
||||||
|
import teamanalysis.repos
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('name', help='The name of the person to look up')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
for repo in teamanalysis.repos.REPOSITORIES:
|
||||||
|
print(repo)
|
||||||
|
abspath = '/Users/eliribble/src/{}/'.format(repo)
|
||||||
|
entries = teamanalysis.git.shortlog(abspath)
|
||||||
|
matching_entries = [entry for entry in entries if args.name in entry[1]]
|
||||||
|
for entry in matching_entries:
|
||||||
|
print("\t{} {}".format(*entry))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
|
@ -0,0 +1,92 @@
|
||||||
|
from setuptools import setup
|
||||||
|
import contextlib
|
||||||
|
import imp
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
DATA_ROOTS = []
|
||||||
|
PROJECT = 'teamanalysis'
|
||||||
|
VERSION_FILE = 'teamanalysis/version.py'
|
||||||
|
|
||||||
|
def _get_output_or_none(args):
|
||||||
|
try:
|
||||||
|
return subprocess.check_output(args).decode('utf-8').strip()
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _get_git_description():
|
||||||
|
return _get_output_or_none(['git', 'describe'])
|
||||||
|
|
||||||
|
def _get_git_branches_for_this_commit():
|
||||||
|
branches = _get_output_or_none(['git', 'branch', '-r', '--contains', 'HEAD'])
|
||||||
|
split = branches.split('\n') if branches else []
|
||||||
|
return [branch.strip() for branch in split]
|
||||||
|
|
||||||
|
def _is_on_releasable_branch(branches):
|
||||||
|
return any(['origin/master' == branch or branch.startswith('origin/hotfix') for branch in branches])
|
||||||
|
|
||||||
|
def _git_to_version(git):
|
||||||
|
match = re.match(r'(?P<tag>[\d\.]+)-(?P<offset>[\d]+)-(?P<sha>\w{8})', git)
|
||||||
|
if not match:
|
||||||
|
version = git
|
||||||
|
else:
|
||||||
|
version = "{tag}.post0.dev{offset}".format(**match.groupdict())
|
||||||
|
print("Calculated {} version '{}' from git description '{}'".format(PROJECT, version, git))
|
||||||
|
return version
|
||||||
|
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def write_version():
|
||||||
|
git_description = _get_git_description()
|
||||||
|
git_branches = _get_git_branches_for_this_commit()
|
||||||
|
version = _git_to_version(git_description) if git_description else None
|
||||||
|
if git_branches and not _is_on_releasable_branch(git_branches):
|
||||||
|
print("Forcing version to 0.0.1 because this commit is on branches {} and not a whitelisted branch".format(git_branches))
|
||||||
|
version = '0.0.1'
|
||||||
|
if version:
|
||||||
|
with open(VERSION_FILE, 'r') as version_file:
|
||||||
|
old_contents = version_file.read()
|
||||||
|
with open(VERSION_FILE, 'w') as version_file:
|
||||||
|
version_file.write('VERSION = "{}"\n'.format(version))
|
||||||
|
yield
|
||||||
|
if version:
|
||||||
|
with open(VERSION_FILE, 'w') as version_file:
|
||||||
|
version_file.write(old_contents)
|
||||||
|
|
||||||
|
def get_version():
|
||||||
|
basedir = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
version = imp.load_source('version', os.path.join(basedir, PROJECT, 'version.py'))
|
||||||
|
return version.VERSION
|
||||||
|
|
||||||
|
def get_data_files():
|
||||||
|
data_files = []
|
||||||
|
for data_root in DATA_ROOTS:
|
||||||
|
for root, _, files in os.walk(data_root):
|
||||||
|
data_files.append((os.path.join(PROJECT, root), [os.path.join(root, f) for f in files]))
|
||||||
|
return data_files
|
||||||
|
|
||||||
|
def main():
|
||||||
|
with write_version():
|
||||||
|
setup(
|
||||||
|
name = "teamanalysis",
|
||||||
|
version = get_version(),
|
||||||
|
description = "A project for analyzing what a team is doing",
|
||||||
|
url = "https://github.com/EliRibble/teamanlysis",
|
||||||
|
long_description = open("README.md").read(),
|
||||||
|
author = "Eli Ribble",
|
||||||
|
author_email = "eli@theribbles.org",
|
||||||
|
install_requires = [
|
||||||
|
],
|
||||||
|
packages = ['teamanalysis'],
|
||||||
|
package_data = {
|
||||||
|
"teamanalysis" : ["teamanalysis/*"],
|
||||||
|
},
|
||||||
|
data_files = get_data_files(),
|
||||||
|
scripts = [
|
||||||
|
"bin/popular-repositories",
|
||||||
|
],
|
||||||
|
include_package_data = True,
|
||||||
|
)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -0,0 +1,14 @@
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
SHORTLOG_PATTERN = re.compile(r'\s+(?P<lines>\d+)\s+(?P<name>[\w \-]+)\s*')
|
||||||
|
def shortlog(abspath):
|
||||||
|
os.chdir(abspath)
|
||||||
|
output = subprocess.check_output(['git', 'shortlog', '-s', '-n'])
|
||||||
|
lines = output.split('\n')
|
||||||
|
matches = [SHORTLOG_PATTERN.match(line) for line in lines]
|
||||||
|
matches = [match for match in matches if match]
|
||||||
|
entries = [(match.group('lines'), match.group('name')) for match in matches]
|
||||||
|
return entries
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
|
||||||
|
REPOSITORIES = [
|
||||||
|
'3diax',
|
||||||
|
'archer',
|
||||||
|
'authentise.com',
|
||||||
|
'blue-whale',
|
||||||
|
'chelido',
|
||||||
|
'deployment',
|
||||||
|
'docs',
|
||||||
|
'eventbus',
|
||||||
|
#'gigas',
|
||||||
|
'hoth',
|
||||||
|
'lowes',
|
||||||
|
'lowes-scanner',
|
||||||
|
'marketing-website',
|
||||||
|
'musicbot',
|
||||||
|
'pao',
|
||||||
|
'partner.authentise.com',
|
||||||
|
'quickslice',
|
||||||
|
'scylla',
|
||||||
|
'sepiida',
|
||||||
|
'sirenia',
|
||||||
|
'streamus',
|
||||||
|
'vision',
|
||||||
|
]
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
VERSION = 'development'
|
Loading…
Reference in New Issue