Exemple #1
0
def update_project(project, repo_url, branch):
    if branch == 'master':
        return jsonstatus.error(406, 'Will not update master branch')
    # FIXME, should launch in the background instead. This will now block
    # until branching is finished.
    try:
        _wrapupdater().update_db(project, repo_url, branch)
        return jsonstatus.ok()
    except Exception as e:
        return jsonstatus.error(500, 'Wrap generation failed. %s' % e)
Exemple #2
0
def github_hook():
    headers = flask.request.headers
    if not headers.get('User-Agent').startswith('GitHub-Hookshot/'):
        return jsonstatus.error(401, 'Not a GitHub hook')
    signature = ('sha1=%s' %
                 hmac.new(APP.config['SECRET_KEY'].encode('utf-8'),
                          flask.request.data, hashlib.sha1).hexdigest())
    if headers.get('X-Hub-Signature') != signature:
        return jsonstatus.error(401, 'Not a valid secret key')
    if headers.get('X-Github-Event') == 'pull_request':
        return github_pull_request()
    else:
        return jsonstatus.error(405, 'Not a Pull Request hook')
Exemple #3
0
def get_wrap(project, branch, revision):
    result = _database().get_wrap(project, branch, revision)
    if result is None:
        return jsonstatus.error(500, 'No such entry')
    resp = flask.make_response(result)
    resp.mimetype = 'text/plain'
    return resp
Exemple #4
0
def get_wrap(project, branch, revision):
    result = _database().get_wrap(project, branch, revision)
    if result is None:
        return jsonstatus.error(404, 'No such entry')
    resp = flask.make_response(result)
    resp.mimetype = 'text/plain'
    return resp
Exemple #5
0
def get_project_info(project):
    if project is None:
        return get_projectlist()
    matches = _database().get_versions(project)
    if len(matches) == 0:
        return jsonstatus.error(500, 'No such project')
    versions = [{'branch': i[0], 'revision': i[1]} for i in matches]
    return jsonstatus.ok(versions=versions)
Exemple #6
0
def get_project_info(project):
    if project is None:
        return get_projectlist()
    matches = _database().get_versions(project)
    if len(matches) == 0:
        return jsonstatus.error(404, 'No such project')
    versions = [{'branch': i[0], 'revision': i[1]} for i in matches]
    return jsonstatus.ok(versions=versions)
Exemple #7
0
def get_zip(project, branch, revision):
    result = _database().get_zip(project, branch, revision)
    if result is None:
        return jsonstatus.error(500, 'No such entry')
    resp = flask.make_response(result)
    resp.mimetype = 'application/zip'
    resp.headers['Content-Disposition'] = (
        'attachment; filename=%s-%s-%d-wrap.zip' % (project, branch, revision))
    return resp
Exemple #8
0
def get_project_info(project):
    matches = _database().get_versions(project)
    if not matches:
        projects = _database().name_search(project)
        if project not in projects:
            return jsonstatus.error(404, 'No such project')
        return jsonstatus.ok(versions=[])
    versions = [{'branch': i[0], 'revision': i[1]} for i in matches]
    return jsonstatus.ok(versions=versions)
Exemple #9
0
def get_zip(project, branch, revision):
    result = _database().get_zip(project, branch, revision)
    if result is None:
        return jsonstatus.error(404, 'No such entry')
    resp = flask.make_response(result)
    resp.mimetype = 'application/zip'
    resp.headers['Content-Disposition'] = (
        'attachment; filename=%s-%s-%d-wrap.zip' %
        (project, branch, revision))
    return resp
Exemple #10
0
def github_pull_request():
    d = flask.request.get_json()
    base = d['pull_request']['base']
    check_allowed_project(base['repo']['full_name'])
    if d['action'] != 'closed' or not d['pull_request']['merged']:
        APP.logger.warning(flask.request.data)
        return jsonstatus.error(
            417, 'We got hook which is not merged pull request')
    return update_project(project=base['repo']['name'],
                          repo_url=base['repo']['clone_url'],
                          branch=base['ref'])
Exemple #11
0
def get_project_info(project):
    metadata = _database().get_metadata(project)
    matches = _database().get_versions(project)
    if not matches:
        projects = _database().name_search(project)
        if project not in projects:
            return jsonstatus.error(404, 'No such project')
        return jsonstatus.ok(versions=[])
    md = dict()
    if metadata is not None:
        for field in ['homepage', 'description']:
            if metadata.has(field):
                md[field] = getattr(metadata, field)
    versions = [{'branch': i[0], 'revision': i[1]} for i in matches]
    return jsonstatus.ok(name=project, metadata=md, versions=versions)
Exemple #12
0
def favicon():
    return jsonstatus.error(404, 'Favicon not found')
Exemple #13
0
def get_latest(project):
    matches = _database().get_versions(project, latest=True)
    if len(matches) == 0:
        return jsonstatus.error(500, 'No such project')
    latest = matches[0]
    return jsonstatus.ok(branch=latest[0], revision=latest[1])
Exemple #14
0
def get_latest(project):
    matches = _database().get_versions(project, latest=True)
    if len(matches) == 0:
        return jsonstatus.error(404, 'No such project')
    latest = matches[0]
    return jsonstatus.ok(branch=latest[0], revision=latest[1])
Exemple #15
0
def favicon():
    return jsonstatus.error(404, 'Favicon not found')
Exemple #16
0
def get_latest(project):
    latest = _database().get_latest_version(project)
    if latest is None:
        return jsonstatus.error(404, 'No such project')
    return jsonstatus.ok(branch=latest[0], revision=latest[1])