Show More
@@ -968,7 +968,7 b' class TestPullrequestsView(object):' | |||||
968 | 'csrf_token': csrf_token}) |
|
968 | 'csrf_token': csrf_token}) | |
969 |
|
969 | |||
970 | assert response.status_int == 200 |
|
970 | assert response.status_int == 200 | |
971 | assert response.body == 'true' |
|
971 | assert response.body == '{"response": true, "redirect_url": null}' | |
972 |
|
972 | |||
973 | # Make sure that after update, it won't raise 500 errors |
|
973 | # Make sure that after update, it won't raise 500 errors | |
974 | response = self.app.get(route_path( |
|
974 | response = self.app.get(route_path( |
@@ -1051,12 +1051,14 b' class RepoPullRequestsView(RepoAppView, ' | |||||
1051 | _ = self.request.translate |
|
1051 | _ = self.request.translate | |
1052 |
|
1052 | |||
1053 | self.load_default_context() |
|
1053 | self.load_default_context() | |
|
1054 | redirect_url = None | |||
1054 |
|
1055 | |||
1055 | if pull_request.is_closed(): |
|
1056 | if pull_request.is_closed(): | |
1056 | log.debug('update: forbidden because pull request is closed') |
|
1057 | log.debug('update: forbidden because pull request is closed') | |
1057 | msg = _(u'Cannot update closed pull requests.') |
|
1058 | msg = _(u'Cannot update closed pull requests.') | |
1058 | h.flash(msg, category='error') |
|
1059 | h.flash(msg, category='error') | |
1059 | return True |
|
1060 | return {'response': True, | |
|
1061 | 'redirect_url': redirect_url} | |||
1060 |
|
1062 | |||
1061 | if pull_request.pull_request_state != PullRequest.STATE_CREATED: |
|
1063 | if pull_request.pull_request_state != PullRequest.STATE_CREATED: | |
1062 | log.debug('update: forbidden because pull request is in state %s', |
|
1064 | log.debug('update: forbidden because pull request is in state %s', | |
@@ -1065,13 +1067,15 b' class RepoPullRequestsView(RepoAppView, ' | |||||
1065 | u'Current state is: `{}`').format(PullRequest.STATE_CREATED, |
|
1067 | u'Current state is: `{}`').format(PullRequest.STATE_CREATED, | |
1066 | pull_request.pull_request_state) |
|
1068 | pull_request.pull_request_state) | |
1067 | h.flash(msg, category='error') |
|
1069 | h.flash(msg, category='error') | |
1068 | return True |
|
1070 | return {'response': True, | |
|
1071 | 'redirect_url': redirect_url} | |||
1069 |
|
1072 | |||
1070 | # only owner or admin can update it |
|
1073 | # only owner or admin can update it | |
1071 | allowed_to_update = PullRequestModel().check_user_update( |
|
1074 | allowed_to_update = PullRequestModel().check_user_update( | |
1072 | pull_request, self._rhodecode_user) |
|
1075 | pull_request, self._rhodecode_user) | |
1073 | if allowed_to_update: |
|
1076 | if allowed_to_update: | |
1074 | controls = peppercorn.parse(self.request.POST.items()) |
|
1077 | controls = peppercorn.parse(self.request.POST.items()) | |
|
1078 | force_refresh = str2bool(self.request.POST.get('force_refresh')) | |||
1075 |
|
1079 | |||
1076 | if 'review_members' in controls: |
|
1080 | if 'review_members' in controls: | |
1077 | self._update_reviewers( |
|
1081 | self._update_reviewers( | |
@@ -1079,11 +1083,18 b' class RepoPullRequestsView(RepoAppView, ' | |||||
1079 | pull_request.reviewer_data) |
|
1083 | pull_request.reviewer_data) | |
1080 | elif str2bool(self.request.POST.get('update_commits', 'false')): |
|
1084 | elif str2bool(self.request.POST.get('update_commits', 'false')): | |
1081 | self._update_commits(pull_request) |
|
1085 | self._update_commits(pull_request) | |
|
1086 | if force_refresh: | |||
|
1087 | redirect_url = h.route_path( | |||
|
1088 | 'pullrequest_show', repo_name=self.db_repo_name, | |||
|
1089 | pull_request_id=pull_request.pull_request_id, | |||
|
1090 | _query={"force_refresh": 1}) | |||
1082 | elif str2bool(self.request.POST.get('edit_pull_request', 'false')): |
|
1091 | elif str2bool(self.request.POST.get('edit_pull_request', 'false')): | |
1083 | self._edit_pull_request(pull_request) |
|
1092 | self._edit_pull_request(pull_request) | |
1084 | else: |
|
1093 | else: | |
1085 | raise HTTPBadRequest() |
|
1094 | raise HTTPBadRequest() | |
1086 | return True |
|
1095 | ||
|
1096 | return {'response': True, | |||
|
1097 | 'redirect_url': redirect_url} | |||
1087 | raise HTTPForbidden() |
|
1098 | raise HTTPForbidden() | |
1088 |
|
1099 | |||
1089 | def _edit_pull_request(self, pull_request): |
|
1100 | def _edit_pull_request(self, pull_request): |
@@ -249,6 +249,54 b' input[type="button"] {' | |||||
249 |
|
249 | |||
250 | } |
|
250 | } | |
251 |
|
251 | |||
|
252 | ||||
|
253 | .btn-group-actions { | |||
|
254 | position: relative; | |||
|
255 | z-index: 100; | |||
|
256 | ||||
|
257 | &:not(.open) .btn-action-switcher-container { | |||
|
258 | display: none; | |||
|
259 | } | |||
|
260 | } | |||
|
261 | ||||
|
262 | ||||
|
263 | .btn-action-switcher-container{ | |||
|
264 | position: absolute; | |||
|
265 | top: 30px; | |||
|
266 | left: 0px; | |||
|
267 | } | |||
|
268 | ||||
|
269 | .btn-action-switcher { | |||
|
270 | display: block; | |||
|
271 | position: relative; | |||
|
272 | z-index: 300; | |||
|
273 | min-width: 240px; | |||
|
274 | max-width: 500px; | |||
|
275 | margin-top: 4px; | |||
|
276 | margin-bottom: 24px; | |||
|
277 | font-size: 14px; | |||
|
278 | font-weight: 400; | |||
|
279 | padding: 8px 0; | |||
|
280 | background-color: #fff; | |||
|
281 | border: 1px solid @grey4; | |||
|
282 | border-radius: 3px; | |||
|
283 | box-shadow: @dropdown-shadow; | |||
|
284 | ||||
|
285 | li { | |||
|
286 | display: block; | |||
|
287 | text-align: left; | |||
|
288 | list-style: none; | |||
|
289 | padding: 5px 10px; | |||
|
290 | } | |||
|
291 | ||||
|
292 | li .action-help-block { | |||
|
293 | font-size: 10px; | |||
|
294 | line-height: normal; | |||
|
295 | color: @grey4; | |||
|
296 | } | |||
|
297 | ||||
|
298 | } | |||
|
299 | ||||
252 | .btn-link { |
|
300 | .btn-link { | |
253 | background: transparent; |
|
301 | background: transparent; | |
254 | border: none; |
|
302 | border: none; |
@@ -343,18 +343,29 b' var _updatePullRequest = function(repo_n' | |||||
343 | } else { |
|
343 | } else { | |
344 | postData.csrf_token = CSRF_TOKEN; |
|
344 | postData.csrf_token = CSRF_TOKEN; | |
345 | } |
|
345 | } | |
|
346 | ||||
346 | var success = function(o) { |
|
347 | var success = function(o) { | |
347 | window.location.reload(); |
|
348 | var redirectUrl = o['redirect_url']; | |
|
349 | if (redirectUrl !== undefined && redirectUrl !== null && redirectUrl !== '') { | |||
|
350 | window.location = redirectUrl; | |||
|
351 | } else { | |||
|
352 | window.location.reload(); | |||
|
353 | } | |||
348 | }; |
|
354 | }; | |
|
355 | ||||
349 | ajaxPOST(url, postData, success); |
|
356 | ajaxPOST(url, postData, success); | |
350 | }; |
|
357 | }; | |
351 |
|
358 | |||
352 | /** |
|
359 | /** | |
353 | * PULL REQUEST update commits |
|
360 | * PULL REQUEST update commits | |
354 | */ |
|
361 | */ | |
355 | var updateCommits = function(repo_name, pull_request_id) { |
|
362 | var updateCommits = function(repo_name, pull_request_id, force) { | |
356 | var postData = { |
|
363 | var postData = { | |
357 |
'update_commits': true |
|
364 | 'update_commits': true | |
|
365 | }; | |||
|
366 | if (force !== undefined && force === true) { | |||
|
367 | postData['force_refresh'] = true | |||
|
368 | } | |||
358 | _updatePullRequest(repo_name, pull_request_id, postData); |
|
369 | _updatePullRequest(repo_name, pull_request_id, postData); | |
359 | }; |
|
370 | }; | |
360 |
|
371 | |||
@@ -549,4 +560,49 b' VersionController = function () {' | |||||
549 | return false |
|
560 | return false | |
550 | } |
|
561 | } | |
551 |
|
562 | |||
|
563 | }; | |||
|
564 | ||||
|
565 | ||||
|
566 | UpdatePrController = function () { | |||
|
567 | var self = this; | |||
|
568 | this.$updateCommits = $('#update_commits'); | |||
|
569 | this.$updateCommitsSwitcher = $('#update_commits_switcher'); | |||
|
570 | ||||
|
571 | this.lockUpdateButton = function (label) { | |||
|
572 | self.$updateCommits.attr('disabled', 'disabled'); | |||
|
573 | self.$updateCommitsSwitcher.attr('disabled', 'disabled'); | |||
|
574 | ||||
|
575 | self.$updateCommits.addClass('disabled'); | |||
|
576 | self.$updateCommitsSwitcher.addClass('disabled'); | |||
|
577 | ||||
|
578 | self.$updateCommits.removeClass('btn-primary'); | |||
|
579 | self.$updateCommitsSwitcher.removeClass('btn-primary'); | |||
|
580 | ||||
|
581 | self.$updateCommits.text(_gettext(label)); | |||
|
582 | }; | |||
|
583 | ||||
|
584 | this.isUpdateLocked = function () { | |||
|
585 | return self.$updateCommits.attr('disabled') !== undefined; | |||
|
586 | }; | |||
|
587 | ||||
|
588 | this.updateCommits = function (curNode) { | |||
|
589 | if (self.isUpdateLocked()) { | |||
|
590 | return | |||
|
591 | } | |||
|
592 | self.lockUpdateButton(_gettext('Updating...')); | |||
|
593 | updateCommits( | |||
|
594 | templateContext.repo_name, | |||
|
595 | templateContext.pull_request_data.pull_request_id); | |||
|
596 | }; | |||
|
597 | ||||
|
598 | this.forceUpdateCommits = function () { | |||
|
599 | if (self.isUpdateLocked()) { | |||
|
600 | return | |||
|
601 | } | |||
|
602 | self.lockUpdateButton(_gettext('Force updating...')); | |||
|
603 | var force = true; | |||
|
604 | updateCommits( | |||
|
605 | templateContext.repo_name, | |||
|
606 | templateContext.pull_request_data.pull_request_id, force); | |||
|
607 | }; | |||
552 | }; No newline at end of file |
|
608 | }; |
@@ -68,8 +68,6 b'' | |||||
68 |
|
68 | |||
69 | <div class="pull-request-merge-refresh"> |
|
69 | <div class="pull-request-merge-refresh"> | |
70 | <a href="#refreshChecks" onclick="refreshMergeChecks(); return false;">${_('refresh checks')}</a> |
|
70 | <a href="#refreshChecks" onclick="refreshMergeChecks(); return false;">${_('refresh checks')}</a> | |
71 | / |
|
|||
72 | <a class="tooltip" title="Force refresh of the merge workspace in case current status seems wrong." href="${h.route_path('pullrequest_show', repo_name=c.repo_name, pull_request_id=c.pull_request.pull_request_id,_query={"force_refresh":1})}">forced recheck</a> |
|
|||
73 | </div> |
|
71 | </div> | |
74 |
|
72 | |||
75 | </div> |
|
73 | </div> |
@@ -405,7 +405,30 b'' | |||||
405 |
|
405 | |||
406 | <div class="pull-right"> |
|
406 | <div class="pull-right"> | |
407 | % if c.allowed_to_update and not c.pull_request.is_closed(): |
|
407 | % if c.allowed_to_update and not c.pull_request.is_closed(): | |
408 | <a id="update_commits" class="btn btn-primary no-margin pull-right">${_('Update commits')}</a> |
|
408 | ||
|
409 | <div class="btn-group btn-group-actions"> | |||
|
410 | <a id="update_commits" class="btn btn-primary no-margin" onclick="updateController.updateCommits(this); return false"> | |||
|
411 | ${_('Update commits')} | |||
|
412 | </a> | |||
|
413 | ||||
|
414 | <a id="update_commits_switcher" class="btn btn-primary" style="margin-left: -1px" data-toggle="dropdown" aria-pressed="false" role="button"> | |||
|
415 | <i class="icon-down"></i> | |||
|
416 | </a> | |||
|
417 | ||||
|
418 | <div class="btn-action-switcher-container" id="update-commits-switcher"> | |||
|
419 | <ul class="btn-action-switcher" role="menu"> | |||
|
420 | <li> | |||
|
421 | <a href="#forceUpdate" onclick="updateController.forceUpdateCommits(this); return false"> | |||
|
422 | ${_('Force update commits')} | |||
|
423 | </a> | |||
|
424 | <div class="action-help-block"> | |||
|
425 | ${_('Update commits and force refresh this pull request.')} | |||
|
426 | </div> | |||
|
427 | </li> | |||
|
428 | </ul> | |||
|
429 | </div> | |||
|
430 | </div> | |||
|
431 | ||||
409 |
|
|
432 | % else: | |
410 | <a class="tooltip btn disabled pull-right" disabled="disabled" title="${_('Update is disabled for current view')}">${_('Update commits')}</a> |
|
433 | <a class="tooltip btn disabled pull-right" disabled="disabled" title="${_('Update is disabled for current view')}">${_('Update commits')}</a> | |
411 | % endif |
|
434 | % endif | |
@@ -584,6 +607,8 b'' | |||||
584 | reviewersController = new ReviewersController(); |
|
607 | reviewersController = new ReviewersController(); | |
585 | commitsController = new CommitsController(); |
|
608 | commitsController = new CommitsController(); | |
586 |
|
609 | |||
|
610 | updateController = new UpdatePrController(); | |||
|
611 | ||||
587 | $(function(){ |
|
612 | $(function(){ | |
588 |
|
613 | |||
589 | // custom code mirror |
|
614 | // custom code mirror | |
@@ -746,17 +771,7 b'' | |||||
746 | "${c.repo_name}", "${c.pull_request.pull_request_id}"); |
|
771 | "${c.repo_name}", "${c.pull_request.pull_request_id}"); | |
747 | }); |
|
772 | }); | |
748 |
|
773 | |||
749 | $('#update_commits').on('click', function(e){ |
|
774 | ||
750 | var isDisabled = !$(e.currentTarget).attr('disabled'); |
|
|||
751 | $(e.currentTarget).attr('disabled', 'disabled'); |
|
|||
752 | $(e.currentTarget).addClass('disabled'); |
|
|||
753 | $(e.currentTarget).removeClass('btn-primary'); |
|
|||
754 | $(e.currentTarget).text(_gettext('Updating...')); |
|
|||
755 | if(isDisabled){ |
|
|||
756 | updateCommits( |
|
|||
757 | "${c.repo_name}", "${c.pull_request.pull_request_id}"); |
|
|||
758 | } |
|
|||
759 | }); |
|
|||
760 | // fixing issue with caches on firefox |
|
775 | // fixing issue with caches on firefox | |
761 | $('#update_commits').removeAttr("disabled"); |
|
776 | $('#update_commits').removeAttr("disabled"); | |
762 |
|
777 |
General Comments 0
You need to be logged in to leave comments.
Login now