Fix attr reader to force the intended values for source and target shas

When importing a pull request from GitHub, the old and new branches may
no longer actually exist by those names, but we need to recreate the
merge request diff with the right source and target shas.

We use these `target_branch_sha` and `source_branch_sha` attributes to
force these to the intended values. But the reader methods were always
looking up to the target/source branch head instead of check if these
values was previously set.
parent e299504b
...@@ -238,10 +238,14 @@ class MergeRequest < ActiveRecord::Base ...@@ -238,10 +238,14 @@ class MergeRequest < ActiveRecord::Base
end end
def target_branch_sha def target_branch_sha
return @target_branch_sha if defined?(@target_branch_sha)
target_branch_head.try(:sha) target_branch_head.try(:sha)
end end
def source_branch_sha def source_branch_sha
return @source_branch_sha if defined?(@source_branch_sha)
source_branch_head.try(:sha) source_branch_head.try(:sha)
end end
......
...@@ -65,11 +65,11 @@ describe MergeRequest, models: true do ...@@ -65,11 +65,11 @@ describe MergeRequest, models: true do
end end
describe '#target_branch_sha' do describe '#target_branch_sha' do
context 'when the target branch does not exist anymore' do
let(:project) { create(:project) } let(:project) { create(:project) }
subject { create(:merge_request, source_project: project, target_project: project) } subject { create(:merge_request, source_project: project, target_project: project) }
context 'when the target branch does not exist' do
before do before do
project.repository.raw_repository.delete_branch(subject.target_branch) project.repository.raw_repository.delete_branch(subject.target_branch)
end end
...@@ -78,6 +78,12 @@ describe MergeRequest, models: true do ...@@ -78,6 +78,12 @@ describe MergeRequest, models: true do
expect(subject.target_branch_sha).to be_nil expect(subject.target_branch_sha).to be_nil
end end
end end
it 'returns memoized value' do
subject.target_branch_sha = '8ffb3c15a5475e59ae909384297fede4badcb4c7'
expect(subject.target_branch_sha).to eq '8ffb3c15a5475e59ae909384297fede4badcb4c7'
end
end end
describe '#source_branch_sha' do describe '#source_branch_sha' do
...@@ -103,6 +109,12 @@ describe MergeRequest, models: true do ...@@ -103,6 +109,12 @@ describe MergeRequest, models: true do
expect(subject.source_branch_sha).to be_nil expect(subject.source_branch_sha).to be_nil
end end
end end
it 'returns memoized value' do
subject.source_branch_sha = '2e5d3239642f9161dcbbc4b70a211a68e5e45e2b'
expect(subject.source_branch_sha).to eq '2e5d3239642f9161dcbbc4b70a211a68e5e45e2b'
end
end end
describe '#to_reference' do describe '#to_reference' do
......
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