##// END OF EJS Templates
pull-requests: add merge check that detects WIP marker in title. This will prevent merges in such case....
pull-requests: add merge check that detects WIP marker in title. This will prevent merges in such case. Usually WIP in title means unfinished task that needs still some work. This pattern is present in Gitlab/Github and is already quite common.

File last commit:

r3627:cff84552 default
r4099:c12e69d0 default
Show More
hooks_utils.py
169 lines | 6.3 KiB | text/x-python | PythonLexer
project: added all source files and assets
r1 # -*- coding: utf-8 -*-
docs: updated copyrights to 2019
r3363 # Copyright (C) 2010-2019 RhodeCode GmbH
project: added all source files and assets
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
pylons: remove pylons as dependency...
r2351 from pyramid.threadlocal import get_current_request
project: added all source files and assets
r1
dan
events: add pull request events
r378 from rhodecode import events
project: added all source files and assets
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')
pylons: remove pylons as dependency...
r2351 request = get_current_request()
# default
dummy_environ = webob.Request.blank('').environ
project: added all source files and assets
r1 try:
pylons: remove pylons as dependency...
r2351 environ = request.environ or dummy_environ
project: added all source files and assets
r1 except TypeError:
pylons: remove pylons as dependency...
r2351 # we might use this outside of request context
environ = dummy_environ
project: added all source files and assets
r1
extras = vcs_operation_context(
environ, repo_name, username, action, repo_alias, check_locking)
return utils2.AttributeDict(extras)
def trigger_post_push_hook(
rcextensions: new builtin rcextensions....
r3133 username, action, hook_type, repo_name, repo_alias, commit_ids):
project: added all source files and assets
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
rcextensions: new builtin rcextensions....
r3133 extras.hook_type = hook_type
project: added all source files and assets
r1 hooks_base.post_push(extras)
def trigger_log_create_pull_request_hook(username, repo_name, repo_alias,
events: trigger 'review_status_change' when reviewers are updated....
r3415 pull_request, data=None):
project: added all source files and assets
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
events: trigger 'review_status_change' when reviewers are updated....
r3415 :param data: extra data for specific events e.g {'comment': comment_obj}
project: added all source files and assets
r1 """
if repo_alias not in ('hg', 'git'):
return
extras = _get_rc_scm_extras(username, repo_name, repo_alias,
'create_pull_request')
dan
events: add pull request events
r378 events.trigger(events.PullRequestCreateEvent(pull_request))
pull-requests: updated metadata information for failed merges with multiple heads.
r3627 extras.update(pull_request.get_api_data(with_merge_state=False))
project: added all source files and assets
r1 hooks_base.log_create_pull_request(**extras)
def trigger_log_merge_pull_request_hook(username, repo_name, repo_alias,
events: trigger 'review_status_change' when reviewers are updated....
r3415 pull_request, data=None):
project: added all source files and assets
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
events: trigger 'review_status_change' when reviewers are updated....
r3415 :param data: extra data for specific events e.g {'comment': comment_obj}
project: added all source files and assets
r1 """
if repo_alias not in ('hg', 'git'):
return
extras = _get_rc_scm_extras(username, repo_name, repo_alias,
'merge_pull_request')
dan
events: add pull request events
r378 events.trigger(events.PullRequestMergeEvent(pull_request))
project: added all source files and assets
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,
events: trigger 'review_status_change' when reviewers are updated....
r3415 pull_request, data=None):
project: added all source files and assets
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
events: trigger 'review_status_change' when reviewers are updated....
r3415 :param data: extra data for specific events e.g {'comment': comment_obj}
project: added all source files and assets
r1 """
if repo_alias not in ('hg', 'git'):
return
extras = _get_rc_scm_extras(username, repo_name, repo_alias,
'close_pull_request')
dan
events: add pull request events
r378 events.trigger(events.PullRequestCloseEvent(pull_request))
project: added all source files and assets
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,
events: trigger 'review_status_change' when reviewers are updated....
r3415 pull_request, data=None):
project: added all source files and assets
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
events: trigger 'review_status_change' when reviewers are updated....
r3415 :param data: extra data for specific events e.g {'comment': comment_obj}
project: added all source files and assets
r1 """
if repo_alias not in ('hg', 'git'):
return
extras = _get_rc_scm_extras(username, repo_name, repo_alias,
'review_pull_request')
events: trigger 'review_status_change' when reviewers are updated....
r3415 status = data.get('status')
events.trigger(events.PullRequestReviewEvent(pull_request, status))
project: added all source files and assets
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,
events: trigger 'review_status_change' when reviewers are updated....
r3415 pull_request, data=None):
project: added all source files and assets
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
events: trigger 'review_status_change' when reviewers are updated....
r3415 :param data: extra data for specific events e.g {'comment': comment_obj}
project: added all source files and assets
r1 """
if repo_alias not in ('hg', 'git'):
return
extras = _get_rc_scm_extras(username, repo_name, repo_alias,
'update_pull_request')
dan
events: add pull request events
r378 events.trigger(events.PullRequestUpdateEvent(pull_request))
project: added all source files and assets
r1 extras.update(pull_request.get_api_data())
hooks_base.log_update_pull_request(**extras)