diff --git a/lib/gitlab/conflict/file.rb b/lib/gitlab/conflict/file.rb index b6fa9402d4628d1bb470331209da58d600f57a68..16727e752bd4084b7cbaf4e650c2c52fe30b2fa1 100644 --- a/lib/gitlab/conflict/file.rb +++ b/lib/gitlab/conflict/file.rb @@ -1,18 +1,21 @@ module Gitlab module Conflict class File + include Gitlab::Routing.url_helpers + class MissingResolution < StandardError end CONTEXT_LINES = 3 - attr_reader :merge_file_result, :their_path, :our_path, :repository + attr_reader :merge_file_result, :their_path, :our_path, :merge_request, :repository - def initialize(merge_file_result, conflict, repository:) + def initialize(merge_file_result, conflict, merge_request:) @merge_file_result = merge_file_result @their_path = conflict[:theirs][:path] @our_path = conflict[:ours][:path] - @repository = repository + @merge_request = merge_request + @repository = merge_request.project.repository end # Array of Gitlab::Diff::Line objects @@ -147,6 +150,9 @@ module Gitlab { old_path: their_path, new_path: our_path, + blob_path: namespace_project_blob_path(merge_request.project.namespace, + merge_request.project, + ::File.join(merge_request.diff_refs.head_sha, our_path)), sections: sections } end diff --git a/lib/gitlab/conflict/file_collection.rb b/lib/gitlab/conflict/file_collection.rb index 5df54fd8677fede0a15eb6be6f576c1873e67111..04a75f9edc3d71deee4a83c8d4f7ff89283085fb 100644 --- a/lib/gitlab/conflict/file_collection.rb +++ b/lib/gitlab/conflict/file_collection.rb @@ -47,7 +47,7 @@ module Gitlab Gitlab::Conflict::File.new(merge_index.merge_file(conflict[:ours][:path]), conflict, - repository: repository) + merge_request: merge_request) end end diff --git a/spec/lib/gitlab/conflict/file_spec.rb b/spec/lib/gitlab/conflict/file_spec.rb index 290640ced49decbb9f112b42f365cc2a15dde321..a57ca70672b0a58277924d71a08a318cb3a299de 100644 --- a/spec/lib/gitlab/conflict/file_spec.rb +++ b/spec/lib/gitlab/conflict/file_spec.rb @@ -6,10 +6,11 @@ describe Gitlab::Conflict::File, lib: true do let(:rugged) { repository.rugged } let(:their_commit) { rugged.branches['conflict-a'].target } let(:our_commit) { rugged.branches['conflict-b'].target } + let(:merge_request) { create(:merge_request, source_branch: 'conflict-b', target_branch: 'conflict-a', source_project: project) } let(:index) { rugged.merge_commits(our_commit, their_commit) } let(:conflict) { index.conflicts.last } let(:merge_file_result) { index.merge_file('files/ruby/regex.rb') } - let(:conflict_file) { Gitlab::Conflict::File.new(merge_file_result, conflict, repository: repository) } + let(:conflict_file) { Gitlab::Conflict::File.new(merge_file_result, conflict, merge_request: merge_request) } describe '#resolve_lines' do let(:section_keys) { conflict_file.sections.map { |section| section[:id] }.compact } @@ -141,4 +142,11 @@ describe Gitlab::Conflict::File, lib: true do expect(section_ids.uniq).to eq(section_ids) end end + + describe '#as_json' do + it 'includes the blob path for the file' do + expect(conflict_file.as_json[:blob_path]). + to eq("/#{project.namespace.to_param}/#{merge_request.project.to_param}/blob/#{our_commit.oid}/files/ruby/regex.rb") + end + end end