summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-09-21 16:25:59 +0200
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-09-21 16:25:59 +0200
commit3a001a929064f615eda8fe935c6359381db21ddd (patch)
treeefc8fb032a7a690fba44678ef2493efbd690011a
parentabaa65efc1f912ffef05ccaf1e92dc009f828278 (diff)
downloadgitlab-ce-fix-mr-without-refs.tar.gz
Fetch merge request ref if it is missing when visit MR pagefix-mr-without-refs
This will fix merge problem for merge requests between forks created before 8.0 Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
-rw-r--r--app/controllers/projects/merge_requests_controller.rb7
-rw-r--r--app/models/merge_request.rb14
2 files changed, 20 insertions, 1 deletions
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index f3054881daf..c1231994f25 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -7,6 +7,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
before_action :closes_issues, only: [:edit, :update, :show, :diffs, :commits]
before_action :validates_merge_request, only: [:show, :diffs, :commits]
before_action :define_show_vars, only: [:show, :diffs, :commits]
+ before_action :ensure_ref_fetched, only: [:show, :commits, :diffs]
# Allow read any merge_request
before_action :authorize_read_merge_request!
@@ -277,4 +278,10 @@ class Projects::MergeRequestsController < Projects::ApplicationController
:state_event, :description, :task_num, label_ids: []
)
end
+
+ # Make sure merge requests created before 8.0
+ # have head file in refs/merge-requests/
+ def ensure_ref_fetched
+ @merge_request.ensure_ref_fetched
+ end
end
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 93faa133875..eb468c6cd53 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -433,10 +433,22 @@ class MergeRequest < ActiveRecord::Base
target_project.repository.fetch_ref(
source_project.repository.path_to_repo,
"refs/heads/#{source_branch}",
- "refs/merge-requests/#{iid}/head"
+ ref_path
)
end
+ def ref_path
+ "refs/merge-requests/#{iid}/head"
+ end
+
+ def ref_is_fetched?
+ File.exists?(File.join(project.repository.path_to_repo, ref_path))
+ end
+
+ def ensure_ref_fetched
+ fetch_ref unless ref_is_fetched?
+ end
+
def in_locked_state
begin
lock_mr