Commit be7ab1f2 authored by Rémy Coutable's avatar Rémy Coutable

Merge branch 'fix-gh-pull-requests' into 'master'

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

## What does this MR do?

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, this MR applies a memoization pattern to both of them.

## Are there points in the code the reviewer needs to double check?

This [commit](https://gitlab.com/gitlab-org/gitlab-ce/commit/6ce25e7b4caa9e94de74378729178c7060d640b2) introduced this bug in the importer.

## What are the relevant issue numbers?

gitlab-org/gitlab-ce#20385

## Does this MR meet the acceptance criteria?

- [X] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added
- [X] ~~[Documentation created/updated](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/doc_styleguide.md)~~
- [X] ~~API support added~~
- Tests
  - [X] Added for this feature/bug
  - [ ] All builds are passing
- [x] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides)
- [ ] Branch has no merge conflicts with `master` (if you do - rebase it please)
- [ ] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)

/cc @akitaonrails @DouweM 

See merge request !5573
parents 5d8726bb 285ba1b2
...@@ -43,6 +43,7 @@ v 8.11.0 (unreleased) ...@@ -43,6 +43,7 @@ v 8.11.0 (unreleased)
- Sensible state specific default sort order for issues and merge requests !5453 (tomb0y) - Sensible state specific default sort order for issues and merge requests !5453 (tomb0y)
v 8.10.3 (unreleased) v 8.10.3 (unreleased)
- Fix importer for GitHub Pull Requests when a branch was removed
- Fix hooks missing on imported GitLab projects - Fix hooks missing on imported GitLab projects
- Properly abort a merge when merge conflicts occur - Properly abort a merge when merge conflicts occur
- Ignore invalid IPs in X-Forwarded-For when trusted proxies are configured. - Ignore invalid IPs in X-Forwarded-For when trusted proxies are configured.
......
...@@ -238,11 +238,11 @@ class MergeRequest < ActiveRecord::Base ...@@ -238,11 +238,11 @@ class MergeRequest < ActiveRecord::Base
end end
def target_branch_sha def target_branch_sha
target_branch_head.try(:sha) @target_branch_sha || target_branch_head.try(:sha)
end end
def source_branch_sha def source_branch_sha
source_branch_head.try(:sha) @source_branch_sha || source_branch_head.try(:sha)
end end
def diff_refs def diff_refs
......
...@@ -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