hooks_utils.py
169 lines
| 6.3 KiB
| text/x-python
|
PythonLexer
r1 | # -*- coding: utf-8 -*- | |||
r3363 | # Copyright (C) 2010-2019 RhodeCode GmbH | |||
r1 | # | |||
# This program is free software: you can redistribute it and/or modify | ||||
# it under the terms of the GNU Affero General Public License, version 3 | ||||
# (only), as published by the Free Software Foundation. | ||||
# | ||||
# This program is distributed in the hope that it will be useful, | ||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
# | ||||
# You should have received a copy of the GNU Affero General Public License | ||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
# | ||||
# This program is dual-licensed. If you wish to learn more about the | ||||
# RhodeCode Enterprise Edition, including its added features, Support services, | ||||
# and proprietary license terms, please see https://rhodecode.com/licenses/ | ||||
import webob | ||||
r2351 | from pyramid.threadlocal import get_current_request | |||
r1 | ||||
r378 | from rhodecode import events | |||
r1 | from rhodecode.lib import hooks_base | |||
from rhodecode.lib import utils2 | ||||
def _get_rc_scm_extras(username, repo_name, repo_alias, action): | ||||
# TODO: johbo: Replace by vcs_operation_context and remove fully | ||||
from rhodecode.lib.base import vcs_operation_context | ||||
check_locking = action in ('pull', 'push') | ||||
r2351 | request = get_current_request() | |||
# default | ||||
dummy_environ = webob.Request.blank('').environ | ||||
r1 | try: | |||
r2351 | environ = request.environ or dummy_environ | |||
r1 | except TypeError: | |||
r2351 | # we might use this outside of request context | |||
environ = dummy_environ | ||||
r1 | ||||
extras = vcs_operation_context( | ||||
environ, repo_name, username, action, repo_alias, check_locking) | ||||
return utils2.AttributeDict(extras) | ||||
def trigger_post_push_hook( | ||||
r3133 | username, action, hook_type, repo_name, repo_alias, commit_ids): | |||
r1 | """ | |||
Triggers push action hooks | ||||
:param username: username who pushes | ||||
:param action: push/push_local/push_remote | ||||
:param repo_name: name of repo | ||||
:param repo_alias: the type of SCM repo | ||||
:param commit_ids: list of commit ids that we pushed | ||||
""" | ||||
extras = _get_rc_scm_extras(username, repo_name, repo_alias, action) | ||||
extras.commit_ids = commit_ids | ||||
r3133 | extras.hook_type = hook_type | |||
r1 | hooks_base.post_push(extras) | |||
def trigger_log_create_pull_request_hook(username, repo_name, repo_alias, | ||||
r3415 | pull_request, data=None): | |||
r1 | """ | |||
Triggers create pull request action hooks | ||||
:param username: username who creates the pull request | ||||
:param repo_name: name of target repo | ||||
:param repo_alias: the type of SCM target repo | ||||
:param pull_request: the pull request that was created | ||||
r3415 | :param data: extra data for specific events e.g {'comment': comment_obj} | |||
r1 | """ | |||
if repo_alias not in ('hg', 'git'): | ||||
return | ||||
extras = _get_rc_scm_extras(username, repo_name, repo_alias, | ||||
'create_pull_request') | ||||
r378 | events.trigger(events.PullRequestCreateEvent(pull_request)) | |||
r3627 | extras.update(pull_request.get_api_data(with_merge_state=False)) | |||
r1 | hooks_base.log_create_pull_request(**extras) | |||
def trigger_log_merge_pull_request_hook(username, repo_name, repo_alias, | ||||
r3415 | pull_request, data=None): | |||
r1 | """ | |||
Triggers merge pull request action hooks | ||||
:param username: username who creates the pull request | ||||
:param repo_name: name of target repo | ||||
:param repo_alias: the type of SCM target repo | ||||
:param pull_request: the pull request that was merged | ||||
r3415 | :param data: extra data for specific events e.g {'comment': comment_obj} | |||
r1 | """ | |||
if repo_alias not in ('hg', 'git'): | ||||
return | ||||
extras = _get_rc_scm_extras(username, repo_name, repo_alias, | ||||
'merge_pull_request') | ||||
r378 | events.trigger(events.PullRequestMergeEvent(pull_request)) | |||
r1 | extras.update(pull_request.get_api_data()) | |||
hooks_base.log_merge_pull_request(**extras) | ||||
def trigger_log_close_pull_request_hook(username, repo_name, repo_alias, | ||||
r3415 | pull_request, data=None): | |||
r1 | """ | |||
Triggers close pull request action hooks | ||||
:param username: username who creates the pull request | ||||
:param repo_name: name of target repo | ||||
:param repo_alias: the type of SCM target repo | ||||
:param pull_request: the pull request that was closed | ||||
r3415 | :param data: extra data for specific events e.g {'comment': comment_obj} | |||
r1 | """ | |||
if repo_alias not in ('hg', 'git'): | ||||
return | ||||
extras = _get_rc_scm_extras(username, repo_name, repo_alias, | ||||
'close_pull_request') | ||||
r378 | events.trigger(events.PullRequestCloseEvent(pull_request)) | |||
r1 | extras.update(pull_request.get_api_data()) | |||
hooks_base.log_close_pull_request(**extras) | ||||
def trigger_log_review_pull_request_hook(username, repo_name, repo_alias, | ||||
r3415 | pull_request, data=None): | |||
r1 | """ | |||
Triggers review status change pull request action hooks | ||||
:param username: username who creates the pull request | ||||
:param repo_name: name of target repo | ||||
:param repo_alias: the type of SCM target repo | ||||
:param pull_request: the pull request that review status changed | ||||
r3415 | :param data: extra data for specific events e.g {'comment': comment_obj} | |||
r1 | """ | |||
if repo_alias not in ('hg', 'git'): | ||||
return | ||||
extras = _get_rc_scm_extras(username, repo_name, repo_alias, | ||||
'review_pull_request') | ||||
r3415 | status = data.get('status') | |||
events.trigger(events.PullRequestReviewEvent(pull_request, status)) | ||||
r1 | extras.update(pull_request.get_api_data()) | |||
hooks_base.log_review_pull_request(**extras) | ||||
def trigger_log_update_pull_request_hook(username, repo_name, repo_alias, | ||||
r3415 | pull_request, data=None): | |||
r1 | """ | |||
Triggers update pull request action hooks | ||||
:param username: username who creates the pull request | ||||
:param repo_name: name of target repo | ||||
:param repo_alias: the type of SCM target repo | ||||
:param pull_request: the pull request that was updated | ||||
r3415 | :param data: extra data for specific events e.g {'comment': comment_obj} | |||
r1 | """ | |||
if repo_alias not in ('hg', 'git'): | ||||
return | ||||
extras = _get_rc_scm_extras(username, repo_name, repo_alias, | ||||
'update_pull_request') | ||||
r378 | events.trigger(events.PullRequestUpdateEvent(pull_request)) | |||
r1 | extras.update(pull_request.get_api_data()) | |||
hooks_base.log_update_pull_request(**extras) | ||||