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)
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')
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
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
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)
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)
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
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)
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
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'])
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)
def favicon(): return jsonstatus.error(404, 'Favicon not found')
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])
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])
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])