diff --git a/kallithea/config/routing.py b/kallithea/config/routing.py --- a/kallithea/config/routing.py +++ b/kallithea/config/routing.py @@ -713,11 +713,6 @@ def make_map(config): controller='pullrequests', action='post', conditions=dict(function=check_repo, method=["POST"])) - 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_delete', '/{repo_name:.*?}/pull-request/{pull_request_id}', controller='pullrequests', diff --git a/kallithea/controllers/pullrequests.py b/kallithea/controllers/pullrequests.py --- a/kallithea/controllers/pullrequests.py +++ b/kallithea/controllers/pullrequests.py @@ -486,43 +486,29 @@ class PullrequestsController(BaseRepoCon @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', 'repository.admin') def post(self, repo_name, pull_request_id): - repo = RepoModel()._get_repo(repo_name) - pull_request = PullRequest.get_or_404(pull_request_id) - old_description = pull_request.description - - _form = PullRequestPostForm()().to_python(request.POST) - - pull_request.title = _form['pullrequest_title'] - pull_request.description = _form['pullrequest_desc'].strip() or _('No description') - - PullRequestModel().mention_from_description(pull_request, old_description) - - Session().commit() - h.flash(_('Pull request updated'), category='success') - - return redirect(pull_request.url()) - - # pullrequest_update for updating reviewer list - @LoginRequired() - @NotAnonymous() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') - @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() #only owner or admin can update it owner = pull_request.author.user_id == c.authuser.user_id repo_admin = h.HasRepoPermissionAny('repository.admin')(c.repo_name) - if h.HasPermissionAny('hg.admin') or repo_admin or owner: - reviewers_ids = map(int, filter(lambda v: v not in [None, ''], - request.POST.get('reviewers_ids', '').split(','))) + if not (h.HasPermissionAny('hg.admin') or repo_admin or owner): + raise HTTPForbidden() + + _form = PullRequestPostForm()().to_python(request.POST) - PullRequestModel().update_reviewers(pull_request_id, reviewers_ids) - Session().commit() - return True - raise HTTPForbidden() + old_description = pull_request.description + pull_request.title = _form['pullrequest_title'] + pull_request.description = _form['pullrequest_desc'].strip() or _('No description') + PullRequestModel().mention_from_description(pull_request, old_description) + + reviewers_ids = [int(s) for s in _form['review_members']] + PullRequestModel().update_reviewers(pull_request_id, reviewers_ids) + + Session().commit() + h.flash(_('Pull request updated'), category='success') + + return redirect(pull_request.url()) @LoginRequired() @NotAnonymous() diff --git a/kallithea/model/forms.py b/kallithea/model/forms.py --- a/kallithea/model/forms.py +++ b/kallithea/model/forms.py @@ -485,7 +485,6 @@ def PullRequestForm(repo_id): allow_extra_fields = True filter_extra_fields = True - user = v.UnicodeString(strip=True, required=True) org_repo = v.UnicodeString(strip=True, required=True) org_ref = v.UnicodeString(strip=True, required=True) other_repo = v.UnicodeString(strip=True, required=True) @@ -505,6 +504,7 @@ def PullRequestPostForm(): pullrequest_title = v.UnicodeString(strip=True, required=True) pullrequest_desc = v.UnicodeString(strip=True, required=False) + review_members = v.Set() return _PullRequestPostForm diff --git a/kallithea/public/js/base.js b/kallithea/public/js/base.js --- a/kallithea/public/js/base.js +++ b/kallithea/public/js/base.js @@ -1489,28 +1489,10 @@ var addReviewMember = function(id,fname, var removeReviewMember = function(reviewer_id, repo_name, pull_request_id){ var $li = $('#reviewer_{0}'.format(reviewer_id)); $li.find('div div').css("text-decoration", "line-through"); - $li.find('input').remove(); + $li.find('input').attr('name', 'review_members_removed'); $li.find('.reviewer_member_remove').replaceWith(' (remove not saved)'); } -/* handle "Save Changes" of addReviewMember and removeReviewMember on PR */ -var updateReviewers = function(reviewers_ids, repo_name, pull_request_id){ - if (reviewers_ids === undefined){ - var reviewers_ids = []; - $('#review_members').find('input').each(function(){ - reviewers_ids.push(this.value); - }); - } - var url = pyroutes.url('pullrequest_update', {"repo_name":repo_name, - "pull_request_id": pull_request_id}); - var postData = {'_method':'put', - 'reviewers_ids': reviewers_ids}; - var success = function(o){ - window.location.reload(); - } - ajaxPOST(url,postData,success); -} - /* activate auto completion of users and groups ... but only used for users as PR reviewers */ var PullRequestAutoComplete = function (divid, cont, users_list, groups_list) { var myUsers = users_list; diff --git a/kallithea/templates/pullrequests/pullrequest_show.html b/kallithea/templates/pullrequests/pullrequest_show.html --- a/kallithea/templates/pullrequests/pullrequest_show.html +++ b/kallithea/templates/pullrequests/pullrequest_show.html @@ -24,6 +24,7 @@ ${self.repo_context_bar('showpullrequest ${self.breadcrumbs()} + ${h.form(url('pullrequest_post', repo_name=c.repo_name, pull_request_id=c.pull_request.pull_request_id), method='post', id='pull_request_form')}