diff --git a/pagure/hooks/files/pagure_hook_requests.py b/pagure/hooks/files/pagure_hook_requests.py deleted file mode 100755 index 137449c..0000000 --- a/pagure/hooks/files/pagure_hook_requests.py +++ /dev/null @@ -1,98 +0,0 @@ -#!/usr/bin/env python - - -"""Pagure specific hook to update pull-requests stored in the database -based on the information pushed in the requests git repository. -""" - -from __future__ import print_function, unicode_literals - -import os -import sys - - -# We need to access the database -if "PAGURE_CONFIG" not in os.environ and os.path.exists( - "/etc/pagure/pagure.cfg" -): - os.environ["PAGURE_CONFIG"] = "/etc/pagure/pagure.cfg" - - -import pagure.config # noqa: E402 -import pagure.lib.tasks_services # noqa: E402 - - -_config = pagure.config.config -abspath = os.path.abspath(os.environ["GIT_DIR"]) - - -def get_files_to_load(new_commits_list): - - print("Files changed by new commits:\n") - file_list = [] - new_commits_list.reverse() - for commit in new_commits_list: - filenames = pagure.lib.git.read_git_lines( - ["diff-tree", "--no-commit-id", "--name-only", "-r", commit], - abspath, - ) - for line in filenames: - if line.strip(): - file_list.append(line.strip()) - - return file_list - - -def run_as_post_receive_hook(): - - repo = pagure.lib.git.get_repo_name(abspath) - username = pagure.lib.git.get_username(abspath) - namespace = pagure.lib.git.get_repo_namespace( - abspath, gitfolder=_config["TICKETS_FOLDER"] - ) - if _config.get("HOOK_DEBUG", False): - print("repo:", repo) - print("user:", username) - print("namespace:", namespace) - - for line in sys.stdin: - if _config.get("HOOK_DEBUG", False): - print(line) - (oldrev, newrev, refname) = line.strip().split(" ", 2) - - if _config.get("HOOK_DEBUG", False): - print(" -- Old rev") - print(oldrev) - print(" -- New rev") - print(newrev) - print(" -- Ref name") - print(refname) - - if set(newrev) == set(["0"]): - print( - "Deleting a reference/branch, so we won't run the " - "pagure hook" - ) - return - - commits = pagure.lib.git.get_revs_between( - oldrev, newrev, abspath, refname - ) - - pagure.lib.tasks_services.load_json_commits_to_db.delay( - name=repo, - commits=commits, - abspath=abspath, - data_type="pull-request", - agent=os.environ.get("GL_USER"), - namespace=namespace, - username=username, - ) - - -def main(args): - run_as_post_receive_hook() - - -if __name__ == "__main__": - main(sys.argv[1:]) diff --git a/pagure/hooks/pagure_request_hook.py b/pagure/hooks/pagure_request_hook.py index 7242eeb..c582d83 100644 --- a/pagure/hooks/pagure_request_hook.py +++ b/pagure/hooks/pagure_request_hook.py @@ -23,8 +23,9 @@ except ImportError: from sqlalchemy.orm import relation from sqlalchemy.orm import backref +import pagure.lib.git from pagure.config import config as pagure_config -from pagure.hooks import BaseHook +from pagure.hooks import BaseHook, BaseRunner from pagure.lib.model import BASE, Project @@ -60,6 +61,49 @@ class PagureRequestsTable(BASE): ) +class PagureRequestRunner(BaseRunner): + """ Runner for the hook updating the db about requests on push to the + git repo containing the meta-data about pull-requests. + """ + + @staticmethod + def post_receive(session, username, project, repotype, repodir, changes): + """ Run the default post-receive hook. + + For args, see BaseRunner.runhook. + """ + + if repotype != "requests": + print( + "The pagure requests hook only runs on the requests " + "git repo.") + return + + for refname in changes: + (oldrev, newrev) = changes[refname] + + if set(newrev) == set(["0"]): + print( + "Deleting a reference/branch, so we won't run the " + "pagure hook" + ) + return + + commits = pagure.lib.git.get_revs_between( + oldrev, newrev, repodir, refname + ) + + pagure.lib.tasks_services.load_json_commits_to_db.delay( + name=project.name, + commits=commits, + abspath=repodir, + data_type="pull-request", + agent=username, + namespace=project.namespace, + username=project.user.user if project.is_fork else None, + ) + + class PagureRequestsForm(FlaskForm): """ Form to configure the pagure hook. """ @@ -79,6 +123,7 @@ class PagureRequestHook(BaseHook): db_object = PagureRequestsTable backref = "pagure_hook_requests" form_fields = ["active"] + runner = PagureRequestRunner @classmethod def set_up(cls, project):