default-reviewers: changes for source/target branch distinction and new rule name.
- since reasons is bigger now we'll hide those and toggle on view.
This commit is contained in:
parent
eb371210f5
commit
4eb2164498
5 changed files with 86 additions and 18 deletions
|
|
@ -51,7 +51,7 @@ PYRAMID_SETTINGS = {}
|
|||
EXTENSIONS = {}
|
||||
|
||||
__version__ = ('.'.join((str(each) for each in VERSION[:3])))
|
||||
__dbversion__ = 82 # defines current db version for migrations
|
||||
__dbversion__ = 83 # defines current db version for migrations
|
||||
__platform__ = platform.system()
|
||||
__license__ = 'AGPLv3, and Commercial License'
|
||||
__author__ = 'RhodeCode GmbH'
|
||||
|
|
|
|||
41
rhodecode/lib/dbmigrate/versions/083_version_4_11_0.py
Normal file
41
rhodecode/lib/dbmigrate/versions/083_version_4_11_0.py
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
import logging
|
||||
|
||||
from sqlalchemy import *
|
||||
|
||||
from rhodecode.model import meta
|
||||
from rhodecode.lib.dbmigrate.versions import _reset_base, notify
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def upgrade(migrate_engine):
|
||||
"""
|
||||
Upgrade operations go here.
|
||||
Don't create your own engine; bind migrate_engine to your metadata
|
||||
"""
|
||||
_reset_base(migrate_engine)
|
||||
from rhodecode.lib.dbmigrate.schema import db_4_11_0_0 as db
|
||||
|
||||
review_rule_table = db.RepoReviewRule.__table__
|
||||
|
||||
target_branch_pattern = Column(
|
||||
"target_branch_pattern",
|
||||
UnicodeText().with_variant(UnicodeText(255), 'mysql'), default=u'*')
|
||||
target_branch_pattern.create(table=review_rule_table)
|
||||
|
||||
review_rule_name = Column('review_rule_name', String(255))
|
||||
review_rule_name.create(table=review_rule_table)
|
||||
|
||||
# issue fixups
|
||||
fixups(db, meta.Session)
|
||||
|
||||
|
||||
def downgrade(migrate_engine):
|
||||
meta = MetaData()
|
||||
meta.bind = migrate_engine
|
||||
|
||||
|
||||
def fixups(models, _SESSION):
|
||||
pass
|
||||
|
||||
|
||||
|
|
@ -4127,7 +4127,9 @@ class RepoReviewRule(Base, BaseModel):
|
|||
"repo_id", Integer(), ForeignKey('repositories.repo_id'))
|
||||
repo = relationship('Repository', backref='review_rules')
|
||||
|
||||
review_rule_name = Column('review_rule_name', String(255))
|
||||
_branch_pattern = Column("branch_pattern", UnicodeText().with_variant(UnicodeText(255), 'mysql'), default=u'*') # glob
|
||||
_target_branch_pattern = Column("target_branch_pattern", UnicodeText().with_variant(UnicodeText(255), 'mysql'), default=u'*') # glob
|
||||
_file_pattern = Column("file_pattern", UnicodeText().with_variant(UnicodeText(255), 'mysql'), default=u'*') # glob
|
||||
|
||||
use_authors_for_review = Column("use_authors_for_review", Boolean(), nullable=False, default=False)
|
||||
|
|
@ -4138,18 +4140,27 @@ class RepoReviewRule(Base, BaseModel):
|
|||
rule_users = relationship('RepoReviewRuleUser')
|
||||
rule_user_groups = relationship('RepoReviewRuleUserGroup')
|
||||
|
||||
@hybrid_property
|
||||
def branch_pattern(self):
|
||||
return self._branch_pattern or '*'
|
||||
|
||||
def _validate_glob(self, value):
|
||||
re.compile('^' + glob2re(value) + '$')
|
||||
|
||||
@branch_pattern.setter
|
||||
def branch_pattern(self, value):
|
||||
@hybrid_property
|
||||
def source_branch_pattern(self):
|
||||
return self._branch_pattern or '*'
|
||||
|
||||
@source_branch_pattern.setter
|
||||
def source_branch_pattern(self, value):
|
||||
self._validate_glob(value)
|
||||
self._branch_pattern = value or '*'
|
||||
|
||||
@hybrid_property
|
||||
def target_branch_pattern(self):
|
||||
return self._target_branch_pattern or '*'
|
||||
|
||||
@target_branch_pattern.setter
|
||||
def target_branch_pattern(self, value):
|
||||
self._validate_glob(value)
|
||||
self._target_branch_pattern = value or '*'
|
||||
|
||||
@hybrid_property
|
||||
def file_pattern(self):
|
||||
return self._file_pattern or '*'
|
||||
|
|
@ -4159,7 +4170,7 @@ class RepoReviewRule(Base, BaseModel):
|
|||
self._validate_glob(value)
|
||||
self._file_pattern = value or '*'
|
||||
|
||||
def matches(self, branch, files_changed):
|
||||
def matches(self, source_branch, target_branch, files_changed):
|
||||
"""
|
||||
Check if this review rule matches a branch/files in a pull request
|
||||
|
||||
|
|
@ -4167,13 +4178,21 @@ class RepoReviewRule(Base, BaseModel):
|
|||
:param files_changed: list of file paths changed in the pull request
|
||||
"""
|
||||
|
||||
branch = branch or ''
|
||||
source_branch = source_branch or ''
|
||||
target_branch = target_branch or ''
|
||||
files_changed = files_changed or []
|
||||
|
||||
branch_matches = True
|
||||
if branch:
|
||||
branch_regex = re.compile('^' + glob2re(self.branch_pattern) + '$')
|
||||
branch_matches = bool(branch_regex.search(branch))
|
||||
if source_branch or target_branch:
|
||||
source_branch_regex = re.compile(
|
||||
'^' + glob2re(self.source_branch_pattern) + '$')
|
||||
target_branch_regex = re.compile(
|
||||
'^' + glob2re(self.target_branch_pattern) + '$')
|
||||
|
||||
branch_matches = (
|
||||
bool(source_branch_regex.search(source_branch)) and
|
||||
bool(target_branch_regex.search(target_branch))
|
||||
)
|
||||
|
||||
files_matches = True
|
||||
if self.file_pattern != '*':
|
||||
|
|
|
|||
|
|
@ -1335,9 +1335,14 @@ table.integrations {
|
|||
width: 100%;
|
||||
overflow: auto;
|
||||
}
|
||||
.reviewer_reason {
|
||||
padding-left: 20px;
|
||||
|
||||
.reviewer_reason_container {
|
||||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.reviewer_reason {
|
||||
}
|
||||
|
||||
.reviewer_status {
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
|
|
|
|||
|
|
@ -340,7 +340,7 @@
|
|||
## REVIEWERS
|
||||
<div class="reviewers-title block-right">
|
||||
<div class="pr-details-title">
|
||||
${_('Pull request reviewers')}
|
||||
${_('Pull request reviewers')} / <a href="#toggleReasons" onclick="$('.reviewer_reason').toggle(); return false">${_('show reasons')}</a>
|
||||
%if c.allowed_to_update:
|
||||
<span id="open_edit_reviewers" class="block-right action_button last-item">${_('Edit')}</span>
|
||||
%endif
|
||||
|
|
@ -351,7 +351,7 @@
|
|||
<input type="hidden" name="__start__" value="review_members:sequence">
|
||||
<ul id="review_members" class="group_members">
|
||||
%for member,reasons,mandatory,status in c.pull_request_reviewers:
|
||||
<li id="reviewer_${member.user_id}" class="reviewer_entry">
|
||||
<li id="reviewer_${member.user_id}">
|
||||
<div class="reviewers_member">
|
||||
<div class="reviewer_status tooltip" title="${h.tooltip(h.commit_status_lbl(status[0][1].status if status else 'not_reviewed'))}">
|
||||
<div class="${'flag_status %s' % (status[0][1].status if status else 'not_reviewed')} pull-left reviewer_member_status"></div>
|
||||
|
|
@ -361,11 +361,14 @@
|
|||
</div>
|
||||
<input type="hidden" name="__start__" value="reviewer:mapping">
|
||||
<input type="hidden" name="__start__" value="reasons:sequence">
|
||||
% if reasons:
|
||||
<div class="reviewer_reason_container">
|
||||
%for reason in reasons:
|
||||
<div class="reviewer_reason">- ${reason}</div>
|
||||
<div class="reviewer_reason" style="display: none">- ${reason}</div>
|
||||
<input type="hidden" name="reason" value="${reason}">
|
||||
|
||||
%endfor
|
||||
</div>
|
||||
% endif
|
||||
<input type="hidden" name="__end__" value="reasons:sequence">
|
||||
<input id="reviewer_${member.user_id}_input" type="hidden" value="${member.user_id}" name="user_id" />
|
||||
<input type="hidden" name="mandatory" value="${mandatory}"/>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue