|
Slavek Kabrda |
5afad4 |
# -*- coding: utf-8 -*-
|
|
Slavek Kabrda |
5afad4 |
|
|
Slavek Kabrda |
5afad4 |
"""
|
|
Slavek Kabrda |
5afad4 |
(c) 2014-2018 - Copyright Red Hat Inc
|
|
Slavek Kabrda |
5afad4 |
|
|
Slavek Kabrda |
5afad4 |
Authors:
|
|
Slavek Kabrda |
5afad4 |
Slavek Kabrda <bkabrda@redhat.com></bkabrda@redhat.com>
|
|
Slavek Kabrda |
5afad4 |
|
|
Slavek Kabrda |
5afad4 |
"""
|
|
Slavek Kabrda |
5afad4 |
|
|
Pierre-Yves Chibon |
67d1cc |
from __future__ import unicode_literals, absolute_import
|
|
Slavek Kabrda |
5afad4 |
|
|
Slavek Kabrda |
5afad4 |
import sqlalchemy as sa
|
|
Slavek Kabrda |
5afad4 |
import wtforms
|
|
Pierre-Yves Chibon |
9c2953 |
|
|
Slavek Kabrda |
5afad4 |
try:
|
|
Slavek Kabrda |
5afad4 |
from flask_wtf import FlaskForm
|
|
Slavek Kabrda |
5afad4 |
except ImportError:
|
|
Slavek Kabrda |
5afad4 |
from flask_wtf import Form as FlaskForm
|
|
Slavek Kabrda |
5afad4 |
from sqlalchemy.orm import relation
|
|
Slavek Kabrda |
5afad4 |
from sqlalchemy.orm import backref
|
|
Slavek Kabrda |
5afad4 |
|
|
Pierre-Yves Chibon |
2300bb |
from pagure.hooks import BaseHook, BaseRunner
|
|
Slavek Kabrda |
5afad4 |
from pagure.lib.model import BASE, Project
|
|
Slavek Kabrda |
5afad4 |
|
|
Slavek Kabrda |
5afad4 |
|
|
Slavek Kabrda |
5afad4 |
class PagureNoNewBranchesTable(BASE):
|
|
Slavek Kabrda |
5afad4 |
""" Stores information about the pagure hook deployed on a project.
|
|
Slavek Kabrda |
5afad4 |
|
|
Slavek Kabrda |
5afad4 |
Table -- hook_pagure_no_new_branches
|
|
Slavek Kabrda |
5afad4 |
"""
|
|
Slavek Kabrda |
5afad4 |
|
|
Pierre-Yves Chibon |
9c2953 |
__tablename__ = "hook_pagure_no_new_branches"
|
|
Slavek Kabrda |
5afad4 |
|
|
Slavek Kabrda |
5afad4 |
id = sa.Column(sa.Integer, primary_key=True)
|
|
Slavek Kabrda |
5afad4 |
project_id = sa.Column(
|
|
Slavek Kabrda |
5afad4 |
sa.Integer,
|
|
Pierre-Yves Chibon |
9c2953 |
sa.ForeignKey("projects.id", onupdate="CASCADE", ondelete="CASCADE"),
|
|
Slavek Kabrda |
5afad4 |
nullable=False,
|
|
Slavek Kabrda |
5afad4 |
unique=True,
|
|
Pierre-Yves Chibon |
9c2953 |
index=True,
|
|
Pierre-Yves Chibon |
9c2953 |
)
|
|
Slavek Kabrda |
5afad4 |
|
|
Slavek Kabrda |
5afad4 |
active = sa.Column(sa.Boolean, nullable=False, default=False)
|
|
Slavek Kabrda |
5afad4 |
|
|
Slavek Kabrda |
5afad4 |
project = relation(
|
|
Pierre-Yves Chibon |
9c2953 |
"Project",
|
|
Pierre-Yves Chibon |
9c2953 |
remote_side=[Project.id],
|
|
Slavek Kabrda |
5afad4 |
backref=backref(
|
|
Pierre-Yves Chibon |
9c2953 |
"pagure_hook_no_new_branches",
|
|
Slavek Kabrda |
5afad4 |
cascade="delete, delete-orphan",
|
|
Pierre-Yves Chibon |
9c2953 |
single_parent=True,
|
|
Pierre-Yves Chibon |
9c2953 |
uselist=False,
|
|
Pierre-Yves Chibon |
9c2953 |
),
|
|
Slavek Kabrda |
5afad4 |
)
|
|
Slavek Kabrda |
5afad4 |
|
|
Slavek Kabrda |
5afad4 |
|
|
Pierre-Yves Chibon |
2300bb |
class PagureNoNewBranchRunner(BaseRunner):
|
|
Pierre-Yves Chibon |
2300bb |
""" Runner for the hook blocking new branches from being created. """
|
|
Pierre-Yves Chibon |
2300bb |
|
|
Pierre-Yves Chibon |
2300bb |
@staticmethod
|
|
Pierre-Yves Chibon |
2300bb |
def pre_receive(session, username, project, repotype, repodir, changes):
|
|
Pierre-Yves Chibon |
2300bb |
""" Run the pre-receive tasks of a hook.
|
|
Pierre-Yves Chibon |
2300bb |
|
|
Pierre-Yves Chibon |
2300bb |
For args, see BaseRunner.runhook.
|
|
Pierre-Yves Chibon |
2300bb |
"""
|
|
Pierre-Yves Chibon |
2300bb |
|
|
Slavek Kabrda |
c9ac74 |
if repotype != "main":
|
|
Slavek Kabrda |
c9ac74 |
print("The no new branches hook only runs on the main git repo.")
|
|
Slavek Kabrda |
c9ac74 |
return
|
|
Slavek Kabrda |
c9ac74 |
|
|
Pierre-Yves Chibon |
2300bb |
for refname in changes:
|
|
Lubomír Sedlář |
73f7f5 |
if refname.startswith("refs/tags/"):
|
|
Lubomír Sedlář |
73f7f5 |
# Allow creating new tags
|
|
Lubomír Sedlář |
73f7f5 |
continue
|
|
Lubomír Sedlář |
73f7f5 |
|
|
Pierre-Yves Chibon |
2300bb |
(oldrev, newrev) = changes[refname]
|
|
Pierre-Yves Chibon |
2300bb |
|
|
Pierre-Yves Chibon |
2300bb |
if set(oldrev) == set(["0"]):
|
|
Patrick Uiterwijk |
e3347b |
raise Exception(
|
|
Patrick Uiterwijk |
e3347b |
"Creating a new reference/branch is not "
|
|
Patrick Uiterwijk |
e3347b |
"allowed in this project."
|
|
Pierre-Yves Chibon |
2300bb |
)
|
|
Pierre-Yves Chibon |
2300bb |
|
|
Pierre-Yves Chibon |
2300bb |
|
|
Slavek Kabrda |
5afad4 |
class PagureNoNewBranchesForm(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()])
|
|
Slavek Kabrda |
5afad4 |
|
|
Slavek Kabrda |
5afad4 |
|
|
Slavek Kabrda |
5afad4 |
class PagureNoNewBranchesHook(BaseHook):
|
|
Pierre-Yves Chibon |
9c2953 |
""" PagureNoNewBranches hook. """
|
|
Slavek Kabrda |
5afad4 |
|
|
Pierre-Yves Chibon |
9c2953 |
name = "Prevent creating new branches by git push"
|
|
Pierre-Yves Chibon |
9c2953 |
description = "This hook prevents creating new branches by git push."
|
|
Slavek Kabrda |
5afad4 |
form = PagureNoNewBranchesForm
|
|
Slavek Kabrda |
5afad4 |
db_object = PagureNoNewBranchesTable
|
|
Pierre-Yves Chibon |
9c2953 |
backref = "pagure_hook_no_new_branches"
|
|
Pierre-Yves Chibon |
9c2953 |
form_fields = ["active"]
|
|
Pierre-Yves Chibon |
9c2953 |
hook_type = "pre-receive"
|
|
Pierre-Yves Chibon |
2300bb |
runner = PagureNoNewBranchRunner
|