Skip to content

Commit

Permalink
Always checking upstream
Browse files Browse the repository at this point in the history
  • Loading branch information
gvwilson committed Jul 15, 2016
1 parent a4ec693 commit aee474a
Showing 1 changed file with 35 additions and 9 deletions.
44 changes: 35 additions & 9 deletions bin/repo_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import sys
import os
from subprocess import Popen, PIPE
import re
from optparse import OptionParser

Expand All @@ -19,7 +20,13 @@
sys.exit(1)


# Pattern to match repository URLs and extract username and project name.
# Pattern to match Git command-line output for remotes => (user name, project name).
P_GIT_REMOTE = re.compile(r'upstream\s+[^:]+:([^/]+)/([^.]+)\.git\s+\(fetch\)')

# Repository URL format string.
F_REPO_URL = 'https://github.com/{0}/{1}/'

# Pattern to match repository URLs => (user name, project name)
P_REPO_URL = re.compile(r'https?://github\.com/([^.]+)/([^/]+)/?')

# API URL format string.
Expand All @@ -46,7 +53,7 @@ def main():

args = parse_args()
reporter = Reporter()
repo_url = get_repo_url(args.source_dir)
repo_url = get_repo_url(args.source_dir, args.repo_url)
check_labels(reporter, repo_url)
reporter.report()

Expand All @@ -57,6 +64,10 @@ def parse_args():
"""

parser = OptionParser()
parser.add_option('-r', '--repo',
default=None,
dest='repo_url',
help='repository URL')
parser.add_option('-s', '--source',
default=os.curdir,
dest='source_dir',
Expand All @@ -69,18 +80,33 @@ def parse_args():
return args


def get_repo_url(source_dir):
def get_repo_url(source_dir, repo_url):
"""
Figure out which repository to query.
"""

config_file = os.path.join(source_dir, '_config.yml')
config = load_yaml(config_file)
if 'repo' not in config:
print('"repo" not found in {0}'.format(config_file), file=sys.stderr)
sys.exit(1)
# Explicitly specified.
if repo_url is not None:
return repo_url

# Guess.
cmd = 'git remote -v'
p = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, close_fds=True, universal_newlines=True)
stdout_data, stderr_data = p.communicate()
stdout_data = stdout_data.split('\n')
matches = [P_GIT_REMOTE.match(line) for line in stdout_data]
matches = [m for m in matches if m is not None]
require(len(matches) == 1,
'Unexpected output from git remote command: "{0}"'.format(matches))

username = matches[0].group(1)
require(username, 'empty username in git remote output {0}'.format(matches[0]))

project_name = matches[0].group(2)
require(username, 'empty project name in git remote output {0}'.format(matches[0]))

return config['repo']
url = F_REPO_URL.format(username, project_name)
return url


def check_labels(reporter, repo_url):
Expand Down

0 comments on commit aee474a

Please sign in to comment.