diff options
author | Phil Hughes <me@iamphill.com> | 2019-03-15 09:25:10 +0000 |
---|---|---|
committer | Phil Hughes <me@iamphill.com> | 2019-03-15 09:25:10 +0000 |
commit | 27619f268b03e092101868bd26d3684977634135 (patch) | |
tree | 686123ce5d2533d7deec2d2b0cb489772e3821a0 | |
parent | 893c63dab33c3b11ffdeba2cc004ed3bc90a3f93 (diff) | |
parent | d50fe9e49acda211f36a612ee932c583847bda51 (diff) | |
download | gitlab-ce-27619f268b03e092101868bd26d3684977634135.tar.gz |
Merge branch '56970-fix-mr-stuck-loading-on-error' into 'master'
Resolve "Merge request page loses state"
See merge request gitlab-org/gitlab-ce!25988
4 files changed, 33 insertions, 6 deletions
diff --git a/app/assets/javascripts/lib/utils/simple_poll.js b/app/assets/javascripts/lib/utils/simple_poll.js index 473f179ad86..576a9ec880c 100644 --- a/app/assets/javascripts/lib/utils/simple_poll.js +++ b/app/assets/javascripts/lib/utils/simple_poll.js @@ -1,10 +1,10 @@ -export default (fn, interval = 2000, timeout = 60000) => { +export default (fn, { interval = 2000, timeout = 60000 } = {}) => { const startTime = Date.now(); return new Promise((resolve, reject) => { const stop = arg => (arg instanceof Error ? reject(arg) : resolve(arg)); const next = () => { - if (Date.now() - startTime < timeout) { + if (timeout === 0 || Date.now() - startTime < timeout) { setTimeout(fn.bind(null, next, stop), interval); } else { reject(new Error('SIMPLE_POLL_TIMEOUT')); diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue index 8e043ed50c9..bb76eb1030d 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue @@ -165,9 +165,12 @@ export default { }); }, initiateMergePolling() { - simplePoll((continuePolling, stopPolling) => { - this.handleMergePolling(continuePolling, stopPolling); - }); + simplePoll( + (continuePolling, stopPolling) => { + this.handleMergePolling(continuePolling, stopPolling); + }, + { timeout: 0 }, + ); }, handleMergePolling(continuePolling, stopPolling) { this.service @@ -198,6 +201,7 @@ export default { }) .catch(() => { new Flash(__('Something went wrong while merging this merge request. Please try again.')); // eslint-disable-line + stopPolling(); }); }, initiateRemoveSourceBranchPolling() { diff --git a/changelogs/unreleased/56970-fix-mr-stuck-loading-on-error.yml b/changelogs/unreleased/56970-fix-mr-stuck-loading-on-error.yml new file mode 100644 index 00000000000..f86c77d0e24 --- /dev/null +++ b/changelogs/unreleased/56970-fix-mr-stuck-loading-on-error.yml @@ -0,0 +1,5 @@ +--- +title: Disable timeout on merge request merging poll +merge_request: 25988 +author: +type: fixed diff --git a/spec/javascripts/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js b/spec/javascripts/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js index 6ed654250e6..30659ad16f3 100644 --- a/spec/javascripts/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js +++ b/spec/javascripts/vue_mr_widget/components/states/mr_widget_ready_to_merge_spec.js @@ -377,11 +377,29 @@ describe('ReadyToMerge', () => { }); describe('initiateMergePolling', () => { + beforeEach(() => { + jasmine.clock().install(); + }); + + afterEach(() => { + jasmine.clock().uninstall(); + }); + it('should call simplePoll', () => { const simplePoll = spyOnDependency(ReadyToMerge, 'simplePoll'); vm.initiateMergePolling(); - expect(simplePoll).toHaveBeenCalled(); + expect(simplePoll).toHaveBeenCalledWith(jasmine.any(Function), { timeout: 0 }); + }); + + it('should call handleMergePolling', () => { + spyOn(vm, 'handleMergePolling'); + + vm.initiateMergePolling(); + + jasmine.clock().tick(2000); + + expect(vm.handleMergePolling).toHaveBeenCalled(); }); }); |