# HG changeset patch # User Marcin Kuzminski # Date 2012-07-15 21:16:14 # Node ID 3f50a5e8fc4d811d3b65b898075ea1415a5b0123 # Parent ad3573d744ef5d9f6a43d0d5d177533cd9129c21 Added editing of pull-request reviewers. diff --git a/rhodecode/config/routing.py b/rhodecode/config/routing.py --- a/rhodecode/config/routing.py +++ b/rhodecode/config/routing.py @@ -450,6 +450,11 @@ def make_map(config): controller='pullrequests', action='show', conditions=dict(function=check_repo, method=["GET"])) + rmap.connect('pullrequest_update', + '/{repo_name:.*}/pull-request/{pull_request_id}', + controller='pullrequests', + action='update', conditions=dict(function=check_repo, + method=["PUT"])) rmap.connect('pullrequest_show_all', '/{repo_name:.*}/pull-request', diff --git a/rhodecode/controllers/pullrequests.py b/rhodecode/controllers/pullrequests.py --- a/rhodecode/controllers/pullrequests.py +++ b/rhodecode/controllers/pullrequests.py @@ -167,6 +167,19 @@ class PullrequestsController(BaseRepoCon return redirect(url('pullrequest_show', repo_name=other_repo, pull_request_id=pull_request.pull_request_id)) + @NotAnonymous() + @jsonify + def update(self, repo_name, pull_request_id): + pull_request = PullRequest.get_or_404(pull_request_id) + if pull_request.is_closed(): + raise HTTPForbidden() + + reviewers_ids = map(int, filter(lambda v: v not in [None, ''], + request.POST.get('reviewers_ids', '').split(','))) + PullRequestModel().update_reviewers(pull_request_id, reviewers_ids) + Session.commit() + return True + def _load_compare_data(self, pull_request, enable_comments=True): """ Load context data needed for generating compare diff @@ -337,4 +350,4 @@ class PullrequestsController(BaseRepoCon Session().commit() return True else: - raise HTTPForbidden() \ No newline at end of file + raise HTTPForbidden() diff --git a/rhodecode/model/pull_request.py b/rhodecode/model/pull_request.py --- a/rhodecode/model/pull_request.py +++ b/rhodecode/model/pull_request.py @@ -97,6 +97,34 @@ class PullRequestModel(BaseModel): return new + def update_reviewers(self, pull_request, reviewers_ids): + reviewers_ids = set(reviewers_ids) + pull_request = self.__get_pull_request(pull_request) + current_reviewers = PullRequestReviewers.query()\ + .filter(PullRequestReviewers.pull_request== + pull_request)\ + .all() + current_reviewers_ids = set([x.user.user_id for x in current_reviewers]) + + to_add = reviewers_ids.difference(current_reviewers_ids) + to_remove = current_reviewers_ids.difference(reviewers_ids) + + log.debug("Adding %s reviewers" % to_add) + log.debug("Removing %s reviewers" % to_remove) + + for uid in to_add: + _usr = self._get_user(uid) + reviewer = PullRequestReviewers(_usr, pull_request) + self.sa.add(reviewer) + + for uid in to_remove: + reviewer = PullRequestReviewers.query()\ + .filter(PullRequestReviewers.user_id==uid, + PullRequestReviewers.pull_request==pull_request)\ + .scalar() + if reviewer: + self.sa.delete(reviewer) + def close_pull_request(self, pull_request): pull_request = self.__get_pull_request(pull_request) pull_request.status = PullRequest.STATUS_CLOSED diff --git a/rhodecode/public/js/rhodecode.js b/rhodecode/public/js/rhodecode.js --- a/rhodecode/public/js/rhodecode.js +++ b/rhodecode/public/js/rhodecode.js @@ -501,6 +501,15 @@ var deleteComment = function(comment_id) ajaxPOST(url,postData,success); } +var updateReviewers = function(reviewers_ids){ + var url = AJAX_UPDATE_PULLREQUEST; + var postData = {'_method':'put', + 'reviewers_ids': reviewers_ids}; + var success = function(o){ + window.location.reload(); + } + ajaxPOST(url,postData,success); +} var createInlineAddButton = function(tr){ diff --git a/rhodecode/templates/pullrequests/pullrequest_show.html b/rhodecode/templates/pullrequests/pullrequest_show.html --- a/rhodecode/templates/pullrequests/pullrequest_show.html +++ b/rhodecode/templates/pullrequests/pullrequest_show.html @@ -35,32 +35,9 @@
${_('Created on')}: ${h.fmt_date(c.pull_request.created_on)}
- ## REVIEWERS
-
-
-
${_('Pull request reviewers')}
-
-
-
-
    - %for user,status in c.pull_request_reviewers: -
  • -
    -
    - -
    -
    gravatar
    -
    ${user.username}
    -
    -
  • - %endfor -
-
-
-
##DIFF -
+
${_('Compare view')}
@@ -81,12 +58,51 @@
+ ## REVIEWERS +
+

${_('Pull request reviewers')}

+
+ ## members goes here ! +
+
    + %for member,status in c.pull_request_reviewers: +
  • +
    +
    + +
    +
    gravatar
    +
    ${member.full_name} (${_('owner')})
    + + %if not c.pull_request.is_closed(): + + %endif +
    +
  • + %endfor +
+
+ %if not c.pull_request.is_closed(): +
+
+ ${h.text('user', class_='yui-ac-input')} + ${_('Add reviewer to this pull request.')} +
+
+
+ ${_('save')} +
+
+ %endif +
+
## diff block @@ -112,6 +128,7 @@