##// END OF EJS Templates
pull-requests: allow having repo targets all forks and parent forks of target....
pull-requests: allow having repo targets all forks and parent forks of target. - this is common workflow supported by github etc.

File last commit:

r3133:6afdd8e7 default
r3330:7e8ec062 default
Show More
hooks_utils.py
163 lines | 5.8 KiB | text/x-python | PythonLexer
project: added all source files and assets
r1 # -*- coding: utf-8 -*-
release: update copyright year to 2018
r2487 # Copyright (C) 2010-2018 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,
pull_request):
"""
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
"""
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))
project: added all source files and assets
r1 extras.update(pull_request.get_api_data())
hooks_base.log_create_pull_request(**extras)
def trigger_log_merge_pull_request_hook(username, repo_name, repo_alias,
pull_request):
"""
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
"""
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,
pull_request):
"""
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
"""
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,
pull_request):
"""
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
"""
if repo_alias not in ('hg', 'git'):
return
extras = _get_rc_scm_extras(username, repo_name, repo_alias,
'review_pull_request')
dan
events: add pull request events
r378 events.trigger(events.PullRequestReviewEvent(pull_request))
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,
pull_request):
"""
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
"""
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)