Initial commit, got popularity scanner working

This commit is contained in:
Eli Ribble 2015-07-23 12:36:25 -06:00
commit d725de6949
8 changed files with 155 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.pyc
*.egg-info

0
README.md Normal file
View File

20
bin/popular-repositories Executable file
View File

@ -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()

92
setup.py Normal file
View File

@ -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
teamanalysis/__init__.py Normal file
View File

14
teamanalysis/git.py Normal file
View File

@ -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

26
teamanalysis/repos.py Normal file
View File

@ -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',
]

1
teamanalysis/version.py Normal file
View File

@ -0,0 +1 @@
VERSION = 'development'