Mercurial > kallithea
changeset 4784:d42d7b2a3b2f
pullrequests: reintroduce 'update' functionality as separate submit button in the big form
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Wed, 21 Jan 2015 17:35:11 +0100 |
parents | 2145dfdc3af3 |
children | 6262ca7ed934 |
files | kallithea/controllers/pullrequests.py kallithea/model/forms.py kallithea/public/css/style.css kallithea/templates/pullrequests/pullrequest_show.html |
diffstat | 4 files changed, 45 insertions(+), 37 deletions(-) [+] |
line wrap: on
line diff
--- a/kallithea/controllers/pullrequests.py Wed Jan 21 17:35:11 2015 +0100 +++ b/kallithea/controllers/pullrequests.py Wed Jan 21 17:35:11 2015 +0100 @@ -365,24 +365,10 @@ return redirect(pull_request.url()) - @LoginRequired() - @NotAnonymous() - @HasRepoPermissionAnyDecorator('repository.read', 'repository.write', - 'repository.admin') - def copy_update(self, repo_name, pull_request_id): - old_pull_request = PullRequest.get_or_404(pull_request_id) - assert old_pull_request.other_repo.repo_name == repo_name - if old_pull_request.is_closed(): - raise HTTPForbidden() - + def create_update(self, old_pull_request, updaterev, title, description, reviewers_ids): org_repo = RepoModel()._get_repo(old_pull_request.org_repo.repo_name) org_ref_type, org_ref_name, org_rev = old_pull_request.org_ref.split(':') - updaterev = request.POST.get('updaterev') - if updaterev: - new_org_rev = self._get_ref_rev(org_repo, 'rev', updaterev) - else: - # assert org_ref_type == 'branch', org_ref_type # TODO: what if not? - new_org_rev = self._get_ref_rev(org_repo, org_ref_type, org_ref_name) + new_org_rev = self._get_ref_rev(org_repo, 'rev', updaterev) other_repo = RepoModel()._get_repo(old_pull_request.other_repo.repo_name) other_ref_type, other_ref_name, other_rev = old_pull_request.other_ref.split(':') # other_rev is ancestor @@ -400,7 +386,7 @@ infos = ['This is an update of %s "%s".' % (h.canonical_url('pullrequest_show', repo_name=old_pull_request.other_repo.repo_name, - pull_request_id=pull_request_id), + pull_request_id=old_pull_request.pull_request_id), old_pull_request.title)] if lost: @@ -435,18 +421,15 @@ new_other_ref = '%s:%s:%s' % (other_ref_type, other_ref_name, ancestor_rev) new_org_ref = '%s:%s:%s' % (org_ref_type, org_ref_name, new_org_rev) - reviewers_ids = [r.user_id for r in old_pull_request.reviewers] - try: - old_title, old_v = re.match(r'(.*)\(v(\d+)\)\s*$', old_pull_request.title).groups() + title, old_v = re.match(r'(.*)\(v(\d+)\)\s*$', title).groups() v = int(old_v) + 1 except (AttributeError, ValueError): - old_title = old_pull_request.title v = 2 - title = '%s (v%s)' % (old_title.strip(), v) + title = '%s (v%s)' % (title.strip(), v) # using a mail-like separator, insert new update info at the top of the list - descriptions = old_pull_request.description.replace('\r\n', '\n').split('\n-- \n', 1) + descriptions = description.replace('\r\n', '\n').split('\n-- \n', 1) description = descriptions[0].strip() + '\n\n-- \n' + '\n'.join(infos) if len(descriptions) > 1: description += '\n\n' + descriptions[1].strip() @@ -470,9 +453,9 @@ pull_request_id=pull_request.pull_request_id), repo=old_pull_request.other_repo.repo_id, user=c.authuser.user_id, - pull_request=pull_request_id, + pull_request=old_pull_request.pull_request_id, closing_pr=True) - PullRequestModel().close_pull_request(pull_request_id) + PullRequestModel().close_pull_request(old_pull_request.pull_request_id) Session().commit() h.flash(_('Pull request update created'), @@ -496,13 +479,20 @@ raise HTTPForbidden() _form = PullRequestPostForm()().to_python(request.POST) + reviewers_ids = [int(s) for s in _form['review_members']] + + if _form['updaterev']: + return self.create_update(pull_request, + _form['updaterev'], + _form['pullrequest_title'], + _form['pullrequest_desc'], + reviewers_ids) 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()
--- a/kallithea/model/forms.py Wed Jan 21 17:35:11 2015 +0100 +++ b/kallithea/model/forms.py Wed Jan 21 17:35:11 2015 +0100 @@ -505,6 +505,7 @@ pullrequest_title = v.UnicodeString(strip=True, required=True) pullrequest_desc = v.UnicodeString(strip=True, required=False) review_members = v.Set() + updaterev = v.UnicodeString(strip=True, required=False, if_missing=None) return _PullRequestPostForm
--- a/kallithea/public/css/style.css Wed Jan 21 17:35:11 2015 +0100 +++ b/kallithea/public/css/style.css Wed Jan 21 17:35:11 2015 +0100 @@ -3490,6 +3490,7 @@ cursor: default !important; } +input[disabled].btn, .btn.disabled { color: #999; }
--- a/kallithea/templates/pullrequests/pullrequest_show.html Wed Jan 21 17:35:11 2015 +0100 +++ b/kallithea/templates/pullrequests/pullrequest_show.html Wed Jan 21 17:35:11 2015 +0100 @@ -173,13 +173,26 @@ <div class="input"> <div class="msg-div">${c.update_msg}</div> %if c.available: - <div style="max-height:200px; overflow-y:auto; overflow-x:hidden; margin-bottom: 10px"> + <div id="updaterevs" style="max-height:200px; overflow-y:auto; overflow-x:hidden; margin-bottom: 10px"> <table class="noborder"> %for cnt, cs in enumerate(c.available): <tr> - <td>${h.radio(name='updaterev', value=cs.raw_id)}</td> - <td>${h.link_to(h.show_id(cs),h.url('changeset_home',repo_name=c.cs_repo.repo_name,revision=cs.raw_id))}</td> - <td><div class="message" style="white-space:normal; height:1.1em; max-width: 500px; padding:0">${h.urlify_commit(cs.message, c.repo_name)}</div></td> + %if cs.revision == c.cs_ranges[-1].revision: + <td> + %if editable: + ${h.radio(name='updaterev', value='')} + %endif + </td> + <td colspan="2">${_("Current revision - no change")}</td> + %else: + <td> + %if editable: + ${h.radio(name='updaterev', value=cs.raw_id)} + %endif + </td> + <td>${h.link_to(h.show_id(cs),h.url('changeset_home',repo_name=c.cs_repo.repo_name,revision=cs.raw_id))}</td> + <td><div class="message" style="white-space:normal; height:1.1em; max-width: 500px; padding:0">${h.urlify_commit(cs.message, c.repo_name)}</div></td> + %endif </tr> %endfor </table> @@ -187,11 +200,6 @@ %endif <div class="msg-div">${c.update_msg_other}</div> </div> - %if editable and c.available: - <div class="buttons"> - ${h.submit('copy_update',_('Create Pull Request Update'),class_="btn btn-small")} - </div> - %endif </div> </div> </div> @@ -235,8 +243,9 @@ <div class="fields"> %if editable: <div class="buttons"> - ${h.submit('pr-form-save',_('Save'),class_="btn btn-small")} - ${h.reset('pr-form-reset',_('Cancel'),class_="btn btn-small")} + ${h.submit('pr-form-save',_('Save Changes'),class_="btn btn-small")} + ${h.submit('pr-form-clone',_('Save as New Pull Request'),class_="btn btn-small",disabled='disabled')} + ${h.reset('pr-form-reset',_('Cancel Changes'),class_="btn btn-small")} </div> %endif </div> @@ -344,10 +353,17 @@ linkInlineComments(document.getElementsByClassName('firstlink'), document.getElementsByClassName("inline-comment")); + $('#updaterevs input').change(function(e){ + var update = !!e.target.value; + $('#pr-form-save').prop('disabled',update); + $('#pr-form-clone').prop('disabled',!update); + }); var $org_review_members = $('#review_members').clone(); $('#pr-form-reset').click(function(e){ $('#pr-edit-form').hide(); $('.pr-not-edit').show(); + $('#pr-form-save').prop('disabled',false); + $('#pr-form-clone').prop('disabled',true); $('#review_members').html($org_review_members); });