# HG changeset patch # User Mads Kiilerich # Date 2015-01-21 17:35:11 # Node ID 2145dfdc3af361c41f069b640109073ff15a50d9 # Parent 531ff665167238d5d6afb8aedeee3b7eb76e0b28 pullrequests: make top pane one big form with one save button This will temporarily break the PR update functionality. 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')}
${_('Title')}: ${c.pull_request.title} @@ -49,8 +50,6 @@ ${self.repo_context_bar('showpullrequest %if editable:
- ${h.form(url('pullrequest_copy_update',repo_name=c.repo_name,pull_request_id=c.pull_request.pull_request_id), method='post')} -
+
@@ -200,9 +192,7 @@ ${self.repo_context_bar('showpullrequest ${h.submit('copy_update',_('Create Pull Request Update'),class_="btn btn-small")}
%endif -
- ${h.end_form()} - +
## REVIEWERS @@ -237,15 +227,21 @@ ${self.repo_context_bar('showpullrequest ${h.text('user', class_='yui-ac-input',placeholder=_('Type name of reviewer to add'))}
-
- ${_('Save Changes')} -
%endif - -
+
+
+ %if editable: +
+ ${h.submit('pr-form-save',_('Save'),class_="btn btn-small")} + ${h.reset('pr-form-reset',_('Cancel'),class_="btn btn-small")} +
+ %endif +
+
+ ${h.end_form()}
@@ -306,7 +302,6 @@ ${self.repo_context_bar('showpullrequest pyroutes.register('pullrequest_comment', "${url('pullrequest_comment',repo_name='%(repo_name)s',pull_request_id='%(pull_request_id)s')}", ['repo_name', 'pull_request_id']); pyroutes.register('pullrequest_comment_delete', "${url('pullrequest_comment_delete',repo_name='%(repo_name)s',comment_id='%(comment_id)s')}", ['repo_name', 'comment_id']); - pyroutes.register('pullrequest_update', "${url('pullrequest_update',repo_name='%(repo_name)s',pull_request_id='%(pull_request_id)s')}", ['repo_name', 'pull_request_id']); @@ -349,8 +344,11 @@ ${self.repo_context_bar('showpullrequest linkInlineComments(document.getElementsByClassName('firstlink'), document.getElementsByClassName("inline-comment")); - $('#update_pull_request').click(function(e){ - updateReviewers(undefined, "${c.repo_name}", "${c.pull_request.pull_request_id}"); + var $org_review_members = $('#review_members').clone(); + $('#pr-form-reset').click(function(e){ + $('#pr-edit-form').hide(); + $('.pr-not-edit').show(); + $('#review_members').html($org_review_members); }); // hack: re-navigate to target after JS is done ... if a target is set and setting href thus won't reload