|
Pierre-Yves Chibon |
3390f9 |
# -*- coding: utf-8 -*-
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Pierre-Yves Chibon |
3390f9 |
"""
|
|
Pierre-Yves Chibon |
5a5352 |
(c) 2014-2016 - Copyright Red Hat Inc
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Pierre-Yves Chibon |
3390f9 |
Authors:
|
|
Pierre-Yves Chibon |
3390f9 |
Pierre-Yves Chibon <pingou@pingoured.fr></pingou@pingoured.fr>
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Pierre-Yves Chibon |
3390f9 |
"""
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Aurélien Bompard |
dcf6f6 |
from __future__ import unicode_literals
|
|
Aurélien Bompard |
dcf6f6 |
|
|
Pierre-Yves Chibon |
3390f9 |
import sqlalchemy as sa
|
|
Pierre-Yves Chibon |
3390f9 |
import wtforms
|
|
Pierre-Yves Chibon |
9c2953 |
|
|
Pierre-Yves Chibon |
5a5352 |
try:
|
|
Pierre-Yves Chibon |
2011e2 |
from flask_wtf import FlaskForm
|
|
Pierre-Yves Chibon |
2011e2 |
except ImportError:
|
|
Pierre-Yves Chibon |
5a5352 |
from flask_wtf import Form as FlaskForm
|
|
Pierre-Yves Chibon |
3390f9 |
from sqlalchemy.orm import relation
|
|
Pierre-Yves Chibon |
3390f9 |
from sqlalchemy.orm import backref
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Pierre-Yves Chibon |
4e1723 |
import pagure.lib.git
|
|
Pierre-Yves Chibon |
930073 |
import pagure.lib.tasks_services
|
|
Pierre-Yves Chibon |
4e1723 |
from pagure.hooks import BaseHook, BaseRunner
|
|
Pierre-Yves Chibon |
fe5017 |
from pagure.lib.model import BASE, Project
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Pierre-Yves Chibon |
fe5017 |
class PagureRequestsTable(BASE):
|
|
Pierre-Yves Chibon |
fe5017 |
""" Stores information about the pagure requests hook deployed on a
|
|
Pierre-Yves Chibon |
3390f9 |
project.
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Pierre-Yves Chibon |
fe5017 |
Table -- hook_pagure_requests
|
|
Pierre-Yves Chibon |
3390f9 |
"""
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Pierre-Yves Chibon |
9c2953 |
__tablename__ = "hook_pagure_requests"
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Pierre-Yves Chibon |
3390f9 |
id = sa.Column(sa.Integer, primary_key=True)
|
|
Pierre-Yves Chibon |
3390f9 |
project_id = sa.Column(
|
|
Pierre-Yves Chibon |
3390f9 |
sa.Integer,
|
|
Pierre-Yves Chibon |
9c2953 |
sa.ForeignKey("projects.id", onupdate="CASCADE", ondelete="CASCADE"),
|
|
Pierre-Yves Chibon |
3390f9 |
nullable=False,
|
|
Pierre-Yves Chibon |
3390f9 |
unique=True,
|
|
Pierre-Yves Chibon |
9c2953 |
index=True,
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Pierre-Yves Chibon |
3390f9 |
active = sa.Column(sa.Boolean, nullable=False, default=False)
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Pierre-Yves Chibon |
3390f9 |
project = relation(
|
|
Pierre-Yves Chibon |
9c2953 |
"Project",
|
|
Pierre-Yves Chibon |
9c2953 |
remote_side=[Project.id],
|
|
Pierre-Yves Chibon |
3390f9 |
backref=backref(
|
|
Pierre-Yves Chibon |
9c2953 |
"pagure_hook_requests",
|
|
Pierre-Yves Chibon |
9c2953 |
cascade="delete, delete-orphan",
|
|
Pierre-Yves Chibon |
9c2953 |
single_parent=True,
|
|
Pierre-Yves Chibon |
9c2953 |
uselist=False,
|
|
Pierre-Yves Chibon |
9c2953 |
),
|
|
farhaanbukhsh |
9b97b4 |
)
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Pierre-Yves Chibon |
4e1723 |
class PagureRequestRunner(BaseRunner):
|
|
Pierre-Yves Chibon |
4e1723 |
""" Runner for the hook updating the db about requests on push to the
|
|
Pierre-Yves Chibon |
4e1723 |
git repo containing the meta-data about pull-requests.
|
|
Pierre-Yves Chibon |
4e1723 |
"""
|
|
Pierre-Yves Chibon |
4e1723 |
|
|
Pierre-Yves Chibon |
4e1723 |
@staticmethod
|
|
Pierre-Yves Chibon |
4e1723 |
def post_receive(session, username, project, repotype, repodir, changes):
|
|
Pierre-Yves Chibon |
4e1723 |
""" Run the default post-receive hook.
|
|
Pierre-Yves Chibon |
4e1723 |
|
|
Pierre-Yves Chibon |
4e1723 |
For args, see BaseRunner.runhook.
|
|
Pierre-Yves Chibon |
4e1723 |
"""
|
|
Pierre-Yves Chibon |
4e1723 |
|
|
Pierre-Yves Chibon |
4e1723 |
if repotype != "requests":
|
|
Pierre-Yves Chibon |
4e1723 |
print(
|
|
Pierre-Yves Chibon |
4e1723 |
"The pagure requests hook only runs on the requests "
|
|
Pierre-Yves Chibon |
998b35 |
"git repo."
|
|
Pierre-Yves Chibon |
998b35 |
)
|
|
Pierre-Yves Chibon |
4e1723 |
return
|
|
Pierre-Yves Chibon |
4e1723 |
|
|
Patrick Uiterwijk |
1d5e11 |
if username == "pagure":
|
|
Patrick Uiterwijk |
1d5e11 |
# This was an update from inside the UI. Do not trigger further
|
|
Patrick Uiterwijk |
1d5e11 |
# database updates, as this has already been done
|
|
Patrick Uiterwijk |
1d5e11 |
return
|
|
Patrick Uiterwijk |
1d5e11 |
|
|
Pierre-Yves Chibon |
4e1723 |
for refname in changes:
|
|
Pierre-Yves Chibon |
4e1723 |
(oldrev, newrev) = changes[refname]
|
|
Pierre-Yves Chibon |
4e1723 |
|
|
Pierre-Yves Chibon |
4e1723 |
if set(newrev) == set(["0"]):
|
|
Pierre-Yves Chibon |
4e1723 |
print(
|
|
Pierre-Yves Chibon |
4e1723 |
"Deleting a reference/branch, so we won't run the "
|
|
Pierre-Yves Chibon |
4e1723 |
"pagure hook"
|
|
Pierre-Yves Chibon |
4e1723 |
)
|
|
Pierre-Yves Chibon |
4e1723 |
return
|
|
Pierre-Yves Chibon |
4e1723 |
|
|
Pierre-Yves Chibon |
4e1723 |
commits = pagure.lib.git.get_revs_between(
|
|
Pierre-Yves Chibon |
4e1723 |
oldrev, newrev, repodir, refname
|
|
Pierre-Yves Chibon |
4e1723 |
)
|
|
Pierre-Yves Chibon |
4e1723 |
|
|
Pierre-Yves Chibon |
4e1723 |
pagure.lib.tasks_services.load_json_commits_to_db.delay(
|
|
Pierre-Yves Chibon |
4e1723 |
name=project.name,
|
|
Pierre-Yves Chibon |
4e1723 |
commits=commits,
|
|
Pierre-Yves Chibon |
4e1723 |
abspath=repodir,
|
|
Pierre-Yves Chibon |
4e1723 |
data_type="pull-request",
|
|
Pierre-Yves Chibon |
4e1723 |
agent=username,
|
|
Pierre-Yves Chibon |
4e1723 |
namespace=project.namespace,
|
|
Pierre-Yves Chibon |
4e1723 |
username=project.user.user if project.is_fork else None,
|
|
Pierre-Yves Chibon |
4e1723 |
)
|
|
Pierre-Yves Chibon |
4e1723 |
|
|
Pierre-Yves Chibon |
4e1723 |
|
|
Pierre-Yves Chibon |
5a5352 |
class PagureRequestsForm(FlaskForm):
|
|
Pierre-Yves Chibon |
9c2953 |
""" Form to configure the pagure hook. """
|
|
Pierre-Yves Chibon |
9c2953 |
|
|
Pierre-Yves Chibon |
9c2953 |
active = wtforms.BooleanField("Active", [wtforms.validators.Optional()])
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Pierre-Yves Chibon |
fe5017 |
class PagureRequestHook(BaseHook):
|
|
Pierre-Yves Chibon |
9c2953 |
""" Pagure request hook. """
|
|
Pierre-Yves Chibon |
3390f9 |
|
|
Pierre-Yves Chibon |
9c2953 |
name = "Pagure requests"
|
|
Pierre-Yves Chibon |
9c2953 |
description = (
|
|
Pierre-Yves Chibon |
9c2953 |
"Pagure specific hook to update pull-requests stored "
|
|
Pierre-Yves Chibon |
9c2953 |
"in the database based on the information pushed in the requests "
|
|
Pierre-Yves Chibon |
9c2953 |
"git repository."
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Pierre-Yves Chibon |
fe5017 |
form = PagureRequestsForm
|
|
Pierre-Yves Chibon |
fe5017 |
db_object = PagureRequestsTable
|
|
Pierre-Yves Chibon |
9c2953 |
backref = "pagure_hook_requests"
|
|
Pierre-Yves Chibon |
9c2953 |
form_fields = ["active"]
|
|
Pierre-Yves Chibon |
4e1723 |
runner = PagureRequestRunner
|