Commit fddcf07e authored by Bob Van Landuyt's avatar Bob Van Landuyt

Merge branch '35709-update-squash-commit-sha-only-on-successful-merge' into 'master'

Update squash_commit_sha only on successful merge

See merge request gitlab-org/gitlab!19688
parents 9f243da1 ba739572
...@@ -11,19 +11,21 @@ module MergeRequests ...@@ -11,19 +11,21 @@ module MergeRequests
private private
def commit def commit
repository.ff_merge(current_user, ff_merge = repository.ff_merge(current_user,
source, source,
merge_request.target_branch, merge_request.target_branch,
merge_request: merge_request) merge_request: merge_request)
if merge_request.squash
merge_request.update_column(:squash_commit_sha, merge_request.in_progress_merge_commit_sha)
end
ff_merge
rescue Gitlab::Git::PreReceiveError => e rescue Gitlab::Git::PreReceiveError => e
raise MergeError, e.message raise MergeError, e.message
rescue StandardError => e rescue StandardError => e
raise MergeError, "Something went wrong during merge: #{e.message}" raise MergeError, "Something went wrong during merge: #{e.message}"
ensure ensure
if merge_request.squash
merge_request.update_column(:squash_commit_sha, merge_request.in_progress_merge_commit_sha)
end
merge_request.update(in_progress_merge_commit_sha: nil) merge_request.update(in_progress_merge_commit_sha: nil)
end end
end end
......
---
title: Update squash_commit_sha only on successful merge
merge_request: 19688
author:
type: fixed
...@@ -24,33 +24,63 @@ describe MergeRequests::FfMergeService do ...@@ -24,33 +24,63 @@ describe MergeRequests::FfMergeService do
context 'valid params' do context 'valid params' do
let(:service) { described_class.new(project, user, valid_merge_params) } let(:service) { described_class.new(project, user, valid_merge_params) }
before do def execute_ff_merge
allow(service).to receive(:execute_hooks)
perform_enqueued_jobs do perform_enqueued_jobs do
service.execute(merge_request) service.execute(merge_request)
end end
end end
before do
allow(service).to receive(:execute_hooks)
end
it "does not create merge commit" do it "does not create merge commit" do
execute_ff_merge
source_branch_sha = merge_request.source_project.repository.commit(merge_request.source_branch).sha source_branch_sha = merge_request.source_project.repository.commit(merge_request.source_branch).sha
target_branch_sha = merge_request.target_project.repository.commit(merge_request.target_branch).sha target_branch_sha = merge_request.target_project.repository.commit(merge_request.target_branch).sha
expect(source_branch_sha).to eq(target_branch_sha) expect(source_branch_sha).to eq(target_branch_sha)
end end
it { expect(merge_request).to be_valid } it 'keeps the merge request valid' do
it { expect(merge_request).to be_merged } expect { execute_ff_merge }
.not_to change { merge_request.valid? }
end
it 'updates the merge request to merged' do
expect { execute_ff_merge }
.to change { merge_request.merged? }
.from(false)
.to(true)
end
it 'sends email to user2 about merge of new merge_request' do it 'sends email to user2 about merge of new merge_request' do
execute_ff_merge
email = ActionMailer::Base.deliveries.last email = ActionMailer::Base.deliveries.last
expect(email.to.first).to eq(user2.email) expect(email.to.first).to eq(user2.email)
expect(email.subject).to include(merge_request.title) expect(email.subject).to include(merge_request.title)
end end
it 'creates system note about merge_request merge' do it 'creates system note about merge_request merge' do
execute_ff_merge
note = merge_request.notes.last note = merge_request.notes.last
expect(note.note).to include 'merged' expect(note.note).to include 'merged'
end end
it 'does not update squash_commit_sha if it is not a squash' do
expect { execute_ff_merge }.not_to change { merge_request.squash_commit_sha }
end
it 'updates squash_commit_sha if it is a squash' do
merge_request.update!(squash: true)
expect { execute_ff_merge }
.to change { merge_request.squash_commit_sha }
.from(nil)
end
end end
context 'error handling' do context 'error handling' do
...@@ -83,6 +113,16 @@ describe MergeRequests::FfMergeService do ...@@ -83,6 +113,16 @@ describe MergeRequests::FfMergeService do
expect(merge_request.merge_error).to include(error_message) expect(merge_request.merge_error).to include(error_message)
expect(Rails.logger).to have_received(:error).with(a_string_matching(error_message)) expect(Rails.logger).to have_received(:error).with(a_string_matching(error_message))
end end
it 'does not update squash_commit_sha if squash merge is not successful' do
merge_request.update!(squash: true)
expect(project.repository.raw).to receive(:ff_merge) do
raise 'Merge error'
end
expect { service.execute(merge_request) }.not_to change { merge_request.squash_commit_sha }
end
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment