diff options
author | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2016-07-29 18:24:11 -0300 |
---|---|---|
committer | Douglas Barbosa Alexandre <dbalexandre@gmail.com> | 2016-07-31 19:45:30 -0300 |
commit | 5b4ceeed6317cc8039642981ba356565e11d991e (patch) | |
tree | ff0520b09579dd7089dcda4ebd714fb13e13cb81 | |
parent | e299504b798c053817f1c866649542ac0c779924 (diff) | |
download | gitlab-ce-5b4ceeed6317cc8039642981ba356565e11d991e.tar.gz |
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.
-rw-r--r-- | app/models/merge_request.rb | 4 | ||||
-rw-r--r-- | spec/models/merge_request_spec.rb | 18 |
2 files changed, 19 insertions, 3 deletions
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 471e32f3b60..fdcbbdc1d08 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -238,10 +238,14 @@ class MergeRequest < ActiveRecord::Base end def target_branch_sha + return @target_branch_sha if defined?(@target_branch_sha) + target_branch_head.try(:sha) end def source_branch_sha + return @source_branch_sha if defined?(@source_branch_sha) + source_branch_head.try(:sha) end diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index c8ad7ab3e7f..a0e3c26e542 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -65,11 +65,11 @@ describe MergeRequest, models: true do end 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 project.repository.raw_repository.delete_branch(subject.target_branch) end @@ -78,6 +78,12 @@ describe MergeRequest, models: true do expect(subject.target_branch_sha).to be_nil end end + + it 'returns memoized value' do + subject.target_branch_sha = '8ffb3c15a5475e59ae909384297fede4badcb4c7' + + expect(subject.target_branch_sha).to eq '8ffb3c15a5475e59ae909384297fede4badcb4c7' + end end describe '#source_branch_sha' do @@ -103,6 +109,12 @@ describe MergeRequest, models: true do expect(subject.source_branch_sha).to be_nil end end + + it 'returns memoized value' do + subject.source_branch_sha = '2e5d3239642f9161dcbbc4b70a211a68e5e45e2b' + + expect(subject.source_branch_sha).to eq '2e5d3239642f9161dcbbc4b70a211a68e5e45e2b' + end end describe '#to_reference' do |