@@ -87,97 +87,97 @@ class ChangesetStatusModel(BaseModel):
with_revisions=False):
q = self._get_status_query(repo, revision, pull_request,
with_revisions)
return q.all()
def get_status(self, repo, revision=None, pull_request=None, as_str=True):
"""
Returns latest status of changeset for given revision or for given
pull request. Statuses are versioned inside a table itself and
version == 0 is always the current one
:param repo:
:param revision: 40char hash or None
:param pull_request: pull_request reference
:param as_str: return status as string not object
q = self._get_status_query(repo, revision, pull_request)
# need to use first here since there can be multiple statuses
# returned from pull_request
status = q.first()
if as_str:
status = status.status if status else status
st = status or ChangesetStatus.DEFAULT
return str(st)
return status
def set_status(self, repo, status, user, comment=None, revision=None,
pull_request=None, dont_allow_on_closed_pull_request=False):
Creates new status for changeset or updates the old ones bumping their
version, leaving the current status at
:param revision:
:param status:
:param user:
:param comment:
:param dont_allow_on_closed_pull_request: don't allow a status change
if last status was for pull request and it's closed. We shouldn't
mess around this manually
repo = self._get_repo(repo)
q = ChangesetStatus.query()
if not comment:
from rhodecode.model.comment import ChangesetCommentsModel
comment = ChangesetCommentsModel().create(
text='Auto status change to %s' % (ChangesetStatus.get_status_lbl(status)),
text=u'Auto status change to %s' % (ChangesetStatus.get_status_lbl(status)),
repo=repo,
user=user,
pull_request=pull_request,
send_email=False
)
if revision:
q = q.filter(ChangesetStatus.repo == repo)
q = q.filter(ChangesetStatus.revision == revision)
elif pull_request:
pull_request = self.__get_pull_request(pull_request)
q = q.filter(ChangesetStatus.repo == pull_request.org_repo)
q = q.filter(ChangesetStatus.revision.in_(pull_request.revisions))
cur_statuses = q.all()
#if statuses exists and last is associated with a closed pull request
# we need to check if we can allow this status change
if (dont_allow_on_closed_pull_request and cur_statuses
and getattr(cur_statuses[0].pull_request, 'status', '')
== PullRequest.STATUS_CLOSED):
raise StatusChangeOnClosedPullRequestError(
'Changing status on closed pull request is not allowed'
#update all current statuses with older version
if cur_statuses:
for st in cur_statuses:
st.version += 1
self.sa.add(st)
def _create_status(user, repo, status, comment, revision, pull_request):
new_status = ChangesetStatus()
new_status.author = self._get_user(user)
new_status.repo = self._get_repo(repo)
new_status.status = status
new_status.comment = comment
new_status.revision = revision
new_status.pull_request = pull_request
return new_status
new_status = _create_status(user=user, repo=repo, status=status,
comment=comment, revision=revision,
pull_request=None)
self.sa.add(new_status)
#pull request can have more than one revision associated to it
#we need to create new version for each one
Status change: