##// 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:

r3423:f8efae2b merge default
r4099:c12e69d0 default
Show More
pullrequest.py
155 lines | 5.3 KiB | text/x-python | PythonLexer
docs: updated copyrights to 2019
r3363 # Copyright (C) 2016-2019 RhodeCode GmbH
dan
events: add pull request events
r378 #
# 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/
events: make the System URL extraction safer....
r1424 import logging
dan
events: add serialization .to_dict() to events based on marshmallow
r379
dan
integrations: add integration support...
r411 from rhodecode.translation import lazy_ugettext
dan
events: change target to source repo for pull request events...
r514 from rhodecode.events.repo import (
RepoEvent, _commits_as_dict, _issues_as_dict)
dan
events: add pull request events
r378
events: make the System URL extraction safer....
r1424 log = logging.getLogger(__name__)
dan
events: add pull request events
r378
class PullRequestEvent(RepoEvent):
"""
dan
events: add serialization .to_dict() to events based on marshmallow
r379 Base class for pull request events.
dan
events: add pull request events
r378
dan
events: add serialization .to_dict() to events based on marshmallow
r379 :param pullrequest: a :class:`PullRequest` instance
dan
events: add pull request events
r378 """
dan
events: add serialization .to_dict() to events based on marshmallow
r379
dan
events: add pull request events
r378 def __init__(self, pullrequest):
super(PullRequestEvent, self).__init__(pullrequest.target_repo)
self.pullrequest = pullrequest
dan
integrations: add integration support...
r411 def as_dict(self):
pull-request-events: expose pr title and uid for commits inside....
r2588 from rhodecode.lib.utils2 import md5_safe
dan
integrations: add integration support...
r411 from rhodecode.model.pull_request import PullRequestModel
data = super(PullRequestEvent, self).as_dict()
dan
events: change target to source repo for pull request events...
r514 commits = _commits_as_dict(
events: re-organizate events handling....
r1789 self,
dan
events: change target to source repo for pull request events...
r514 commit_ids=self.pullrequest.revisions,
repos=[self.pullrequest.source_repo]
)
issues = _issues_as_dict(commits)
pull-request-events: expose pr title and uid for commits inside....
r2588 # calculate hashes of all commits for unique identifier of commits
# inside that pull request
commits_hash = md5_safe(':'.join(x.get('raw_id', '') for x in commits))
dan
integrations: add integration support...
r411
data.update({
'pullrequest': {
'title': self.pullrequest.title,
'issues': issues,
'pull_request_id': self.pullrequest.pull_request_id,
events: ported pylons part to pyramid....
r1959 'url': PullRequestModel().get_url(
self.pullrequest, request=self.request),
events: expose permalink urls for different set of object....
r1788 'permalink_url': PullRequestModel().get_url(
events: ported pylons part to pyramid....
r1959 self.pullrequest, request=self.request, permalink=True),
events: expose shadow repo build url.
r2582 'shadow_url': PullRequestModel().get_shadow_clone_url(
self.pullrequest, request=self.request),
dan
events: add an event for pull request comments with review status
r443 'status': self.pullrequest.calculated_review_status(),
pull-request-events: expose pr title and uid for commits inside....
r2588 'commits_uid': commits_hash,
dan
events: change target to source repo for pull request events...
r514 'commits': commits,
dan
integrations: add integration support...
r411 }
})
return data
dan
events: add pull request events
r378
class PullRequestCreateEvent(PullRequestEvent):
"""
An instance of this class is emitted as an :term:`event` after a pull
request is created.
"""
name = 'pullrequest-create'
dan
integrations: add integration support...
r411 display_name = lazy_ugettext('pullrequest created')
dan
events: add pull request events
r378
class PullRequestCloseEvent(PullRequestEvent):
"""
An instance of this class is emitted as an :term:`event` after a pull
request is closed.
"""
name = 'pullrequest-close'
dan
integrations: add integration support...
r411 display_name = lazy_ugettext('pullrequest closed')
dan
events: add pull request events
r378
class PullRequestUpdateEvent(PullRequestEvent):
"""
An instance of this class is emitted as an :term:`event` after a pull
dan
events: add an event for pull request comments with review status
r443 request's commits have been updated.
dan
events: add pull request events
r378 """
name = 'pullrequest-update'
dan
events: add an event for pull request comments with review status
r443 display_name = lazy_ugettext('pullrequest commits updated')
class PullRequestReviewEvent(PullRequestEvent):
"""
An instance of this class is emitted as an :term:`event` after a pull
events: trigger 'review_status_change' when reviewers are updated....
r3415 request review has changed. A status defines new status of review.
dan
events: add an event for pull request comments with review status
r443 """
name = 'pullrequest-review'
display_name = lazy_ugettext('pullrequest review changed')
dan
events: add pull request events
r378
events: trigger 'review_status_change' when reviewers are updated....
r3415 def __init__(self, pullrequest, status):
super(PullRequestReviewEvent, self).__init__(pullrequest)
self.status = status
dan
events: add pull request events
r378
class PullRequestMergeEvent(PullRequestEvent):
"""
An instance of this class is emitted as an :term:`event` after a pull
request is merged.
"""
name = 'pullrequest-merge'
dan
integrations: add integration support...
r411 display_name = lazy_ugettext('pullrequest merged')
dan
events: add pull request events
r378
dan
events: add an event for pull request comments with review status
r443 class PullRequestCommentEvent(PullRequestEvent):
dan
events: add pull request events
r378 """
An instance of this class is emitted as an :term:`event` after a pull
dan
events: add an event for pull request comments with review status
r443 request comment is created.
dan
events: add pull request events
r378 """
dan
events: add an event for pull request comments with review status
r443 name = 'pullrequest-comment'
display_name = lazy_ugettext('pullrequest commented')
def __init__(self, pullrequest, comment):
super(PullRequestCommentEvent, self).__init__(pullrequest)
self.comment = comment
def as_dict(self):
comments: renamed ChangesetCommentsModel to CommentsModel to reflect what it actually does....
r1323 from rhodecode.model.comment import CommentsModel
dan
events: add an event for pull request comments with review status
r443 data = super(PullRequestCommentEvent, self).as_dict()
dan
events: add pull request events
r378
dan
events: add an event for pull request comments with review status
r443 status = None
if self.comment.status_change:
status = self.comment.status_change[0].status
dan
events: add pull request events
r378
dan
events: add an event for pull request comments with review status
r443 data.update({
'comment': {
'status': status,
'text': self.comment.text,
slack: updated slack integration to use the attachements for nicer formatting.
r1467 'type': self.comment.comment_type,
'file': self.comment.f_path,
'line': self.comment.line_no,
events: ported pylons part to pyramid....
r1959 'url': CommentsModel().get_url(
self.comment, request=self.request),
events: expose permalink urls for different set of object....
r1788 'permalink_url': CommentsModel().get_url(
events: ported pylons part to pyramid....
r1959 self.comment, request=self.request, permalink=True),
dan
events: add an event for pull request comments with review status
r443 }
})
return data