summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStan Hu <stanhu@gmail.com>2019-05-14 14:37:15 -0500
committerStan Hu <stanhu@gmail.com>2019-05-15 21:34:59 -0700
commit5632079c3684562aea890123182bd43648149b55 (patch)
tree327406be44c1893447da6d486ac816a11b80b23a
parent3d2edaac04ec1e4d5074a43249c11cf6e8a8eecf (diff)
downloadgitlab-ce-sh-fix-rebase-error-clearing.tar.gz
Properly clear the merge error upon rebase failuresh-fix-rebase-error-clearing
If `merge_error` is ever set after a failure, it is never cleared, even after a subsequent, successful rebase. We now clear this field whenever a successful rebase occurs. Closes https://gitlab.com/gitlab-org/gitlab-ce/issues/56139
-rw-r--r--app/models/repository.rb4
-rw-r--r--changelogs/unreleased/sh-fix-rebase-error-clearing.yml5
-rw-r--r--spec/services/merge_requests/rebase_service_spec.rb26
3 files changed, 33 insertions, 2 deletions
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 1c02e68f2f6..f540b00a849 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -1050,7 +1050,7 @@ class Repository
# To support the full deprecated behaviour, set the
# `rebase_commit_sha` for the merge_request here and return the value
- merge_request.update(rebase_commit_sha: rebase_sha)
+ merge_request.update(rebase_commit_sha: rebase_sha, merge_error: nil)
rebase_sha
end
@@ -1069,7 +1069,7 @@ class Repository
remote_repository: merge_request.target_project.repository.raw,
remote_branch: merge_request.target_branch
) do |commit_id|
- merge_request.update!(rebase_commit_sha: commit_id)
+ merge_request.update!(rebase_commit_sha: commit_id, merge_error: nil)
end
end
end
diff --git a/changelogs/unreleased/sh-fix-rebase-error-clearing.yml b/changelogs/unreleased/sh-fix-rebase-error-clearing.yml
new file mode 100644
index 00000000000..4f5f2779e7f
--- /dev/null
+++ b/changelogs/unreleased/sh-fix-rebase-error-clearing.yml
@@ -0,0 +1,5 @@
+---
+title: Properly clear the merge error upon rebase failure
+merge_request: 28319
+author:
+type: fixed
diff --git a/spec/services/merge_requests/rebase_service_spec.rb b/spec/services/merge_requests/rebase_service_spec.rb
index a443e4588d9..0c4433453ac 100644
--- a/spec/services/merge_requests/rebase_service_spec.rb
+++ b/spec/services/merge_requests/rebase_service_spec.rb
@@ -38,6 +38,32 @@ describe MergeRequests::RebaseService do
end
end
+ shared_examples 'sequence of failure and success' do
+ it 'properly clears the error message' do
+ allow(repository).to receive(:gitaly_operation_client).and_raise('Something went wrong')
+
+ service.execute(merge_request)
+
+ expect(merge_request.reload.merge_error).to eq described_class::REBASE_ERROR
+
+ allow(repository).to receive(:gitaly_operation_client).and_call_original
+
+ service.execute(merge_request)
+
+ expect(merge_request.reload.merge_error).to eq nil
+ end
+ end
+
+ it_behaves_like 'sequence of failure and success'
+
+ context 'with deprecated step rebase feature' do
+ before do
+ allow(Feature).to receive(:disabled?).with(:two_step_rebase, anything).and_return(true)
+ end
+
+ it_behaves_like 'sequence of failure and success'
+ end
+
context 'when unexpected error occurs' do
before do
allow(repository).to receive(:gitaly_operation_client).and_raise('Something went wrong')