feat(task-for-automatic-pr-merge): added f-ty to support pull request auto merge for EE. Fixes: RCCE-67
This commit is contained in:
parent
9e9b09f082
commit
38d5e39b57
8 changed files with 57 additions and 2 deletions
|
|
@ -48,6 +48,7 @@ class TestVcsSettings(object):
|
|||
'extensions_evolve': False,
|
||||
'phases_publish': 'False',
|
||||
'rhodecode_pr_merge_enabled': False,
|
||||
'rhodecode_auto_merge_enabled': False,
|
||||
'rhodecode_use_outdated_comments': False,
|
||||
'new_svn_branch': '',
|
||||
'new_svn_tag': ''
|
||||
|
|
@ -59,7 +60,7 @@ class TestVcsSettings(object):
|
|||
response = self.app.get(route_path('edit_repo_vcs', repo_name=repo_name))
|
||||
|
||||
expected_settings = (
|
||||
'rhodecode_use_outdated_comments', 'rhodecode_pr_merge_enabled',
|
||||
'rhodecode_use_outdated_comments', 'rhodecode_pr_merge_enabled', 'rhodecode_auto_merge_enabled',
|
||||
'hooks_changegroup_repo_size', 'hooks_changegroup_push_logger',
|
||||
'hooks_outgoing_pull_logger'
|
||||
)
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ from rhodecode.lib.plugins.utils import register_rhodecode_plugin
|
|||
from rhodecode.lib.utils2 import AttributeDict
|
||||
from rhodecode.lib.exc_tracking import store_exception, format_exc
|
||||
from rhodecode.subscribers import (
|
||||
scan_repositories_if_enabled, write_js_routes_if_enabled,
|
||||
auto_merge_pr_if_needed, scan_repositories_if_enabled, write_js_routes_if_enabled,
|
||||
write_metadata_if_needed, write_usage_data, import_license_if_present)
|
||||
from rhodecode.lib.statsd_client import StatsdClient
|
||||
|
||||
|
|
@ -392,6 +392,7 @@ def includeme(config, auth_resources=None):
|
|||
# Add subscribers.
|
||||
if load_all:
|
||||
log.debug('Adding subscribers...')
|
||||
config.add_subscriber(auto_merge_pr_if_needed, rhodecode.events.PullRequestReviewEvent)
|
||||
config.add_subscriber(scan_repositories_if_enabled,
|
||||
pyramid.events.ApplicationCreated)
|
||||
config.add_subscriber(write_metadata_if_needed,
|
||||
|
|
|
|||
|
|
@ -445,6 +445,7 @@ class _BaseVcsSettingsForm(formencode.Schema):
|
|||
|
||||
# PR/Code-review
|
||||
rhodecode_pr_merge_enabled = v.StringBoolean(if_missing=False)
|
||||
rhodecode_auto_merge_enabled = v.StringBoolean(if_missing=False)
|
||||
rhodecode_use_outdated_comments = v.StringBoolean(if_missing=False)
|
||||
|
||||
# hg
|
||||
|
|
|
|||
|
|
@ -2125,6 +2125,10 @@ class PullRequestModel(BaseModel):
|
|||
return self._get_general_setting(
|
||||
pull_request, 'rhodecode_pr_merge_enabled')
|
||||
|
||||
def is_automatic_merge_enabled(self, pull_request):
|
||||
return self._get_general_setting(
|
||||
pull_request, 'rhodecode_auto_merge_enabled')
|
||||
|
||||
def _use_rebase_for_merging(self, pull_request):
|
||||
repo_type = pull_request.target_repo.repo_type
|
||||
if repo_type == 'hg':
|
||||
|
|
|
|||
|
|
@ -461,6 +461,7 @@ class VcsSettingsModel(object):
|
|||
GENERAL_SETTINGS = (
|
||||
'use_outdated_comments',
|
||||
'pr_merge_enabled',
|
||||
'auto_merge_enabled',
|
||||
'hg_use_rebase_for_merging',
|
||||
'hg_close_branch_before_merging',
|
||||
'git_use_rebase_for_merging',
|
||||
|
|
|
|||
|
|
@ -57,6 +57,34 @@ def add_renderer_globals(event):
|
|||
event['h'] = helpers
|
||||
|
||||
|
||||
def auto_merge_pr_if_needed(event):
|
||||
from rhodecode.model.db import PullRequest
|
||||
from rhodecode.model.pull_request import (
|
||||
PullRequestModel, ChangesetStatus, MergeCheck
|
||||
)
|
||||
|
||||
pr_event_data = event.as_dict()['pullrequest']
|
||||
pull_request = PullRequest.get(pr_event_data['pull_request_id'])
|
||||
calculated_status = pr_event_data['status']
|
||||
if (calculated_status == ChangesetStatus.STATUS_APPROVED
|
||||
and PullRequestModel().is_automatic_merge_enabled(pull_request)):
|
||||
user = pull_request.author.AuthUser()
|
||||
|
||||
merge_check = MergeCheck.validate(
|
||||
pull_request, user, translator=lambda x: x, fail_early=True
|
||||
)
|
||||
if merge_check.merge_possible:
|
||||
from rhodecode.lib.base import vcs_operation_context
|
||||
extras = vcs_operation_context(
|
||||
event.request.environ, repo_name=pull_request.target_repo.repo_name,
|
||||
username=user.username, action='push',
|
||||
scm=pull_request.target_repo.repo_type)
|
||||
from rc_ee.lib.celerylib.tasks import auto_merge_repo
|
||||
auto_merge_repo.apply_async(
|
||||
args=(pull_request.pull_request_id, extras)
|
||||
)
|
||||
|
||||
|
||||
def set_user_lang(event):
|
||||
request = event.request
|
||||
cur_user = getattr(request, 'user', None)
|
||||
|
|
|
|||
|
|
@ -210,6 +210,23 @@
|
|||
<div class="label">
|
||||
<span class="help-block">${_('Note: when this feature is enabled, it only runs hooks defined in the rcextension package. Custom hooks added on the Admin -> Settings -> Hooks page will not be run when pull requests are automatically merged from the web interface.')}</span>
|
||||
</div>
|
||||
%if c.rhodecode_edition_id != 'EE':
|
||||
<div class="checkbox">
|
||||
<input type="checkbox" disabled>
|
||||
<label for="rhodecode_auto_merge_enabled${suffix}">${_('Enable automatic merge for approved pull requests')}</label>
|
||||
</div>
|
||||
<div class="label">
|
||||
<span class="help-block">${_('This feature is available in RhodeCode EE edition only. Contact {sales_email} to obtain a trial license.').format(sales_email='<a href="mailto:sales@rhodecode.com">sales@rhodecode.com</a>')|n}</span>
|
||||
<div>
|
||||
%else:
|
||||
<div class="checkbox">
|
||||
${h.checkbox('rhodecode_auto_merge_enabled' + suffix, 'True', **kwargs)}
|
||||
<label for="rhodecode_auto_merge_enabled${suffix}">${_('Enable automatic merge for approved pull requests')}</label>
|
||||
</div>
|
||||
<div class="label">
|
||||
<span class="help-block">${_('When this is enabled, the pull request will be merged once it has at least one reviewer and is approved.')}</span>
|
||||
</div>
|
||||
%endif
|
||||
<div class="checkbox">
|
||||
${h.checkbox('rhodecode_use_outdated_comments' + suffix, 'True', **kwargs)}
|
||||
<label for="rhodecode_use_outdated_comments${suffix}">${_('Invalidate and relocate inline comments during update')}</label>
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ SVN_FORM_DATA = {
|
|||
|
||||
GENERAL_FORM_DATA = {
|
||||
'rhodecode_pr_merge_enabled': True,
|
||||
'rhodecode_auto_merge_enabled': True,
|
||||
'rhodecode_use_outdated_comments': True,
|
||||
'rhodecode_hg_use_rebase_for_merging': True,
|
||||
'rhodecode_hg_close_branch_before_merging': True,
|
||||
|
|
@ -989,6 +990,7 @@ class TestCreateOrUpdateRepoSettings(object):
|
|||
'vcs_git_lfs_enabled': False,
|
||||
'phases_publish': 'False',
|
||||
'rhodecode_pr_merge_enabled': False,
|
||||
'rhodecode_auto_merge_enabled': False,
|
||||
'rhodecode_use_outdated_comments': False,
|
||||
'new_svn_branch': '',
|
||||
'new_svn_tag': ''
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue