summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZ.J. van de Weg <zegerjan@gitlab.com>2016-06-10 14:57:50 +0200
committerZ.J. van de Weg <zegerjan@gitlab.com>2016-06-28 14:26:38 +0200
commitc31f876a275c03111488ef72474116a619ffb0d8 (patch)
tree11c055a9b0552cef4032745c73cea6e6670da005
parente0e325625eb141445720999d4e4a4d60a4b59d95 (diff)
downloadgitlab-ce-c31f876a275c03111488ef72474116a619ffb0d8.tar.gz
Workhorse to serve email diffs
Depends on the changes in Workhorse (gitlab-org/gitlab-workhorse!48).
-rw-r--r--CHANGELOG1
-rw-r--r--app/controllers/projects/merge_requests_controller.rb8
-rw-r--r--app/models/merge_request.rb7
-rw-r--r--lib/gitlab/workhorse.rb13
-rw-r--r--spec/controllers/projects/merge_requests_controller_spec.rb18
5 files changed, 24 insertions, 23 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 6defffefb77..f0e4cbcdda0 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -4,6 +4,7 @@ v 8.10.0 (unreleased)
- Replace Haml with Hamlit to make view rendering faster. !3666
- Wrap code blocks on Activies and Todos page. !4783 (winniehell)
- Add Sidekiq queue duration to transaction metrics.
+ - Let Workhorse serve format-patch diffs
- Make images fit to the size of the viewport !4810
- Fix check for New Branch button on Issue page !4630 (winniehell)
- Fix MR-auto-close text added to description. !4836
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 39c8ba40ca2..dd86b940a08 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -59,7 +59,13 @@ class Projects::MergeRequestsController < Projects::ApplicationController
respond_to do |format|
format.html
format.json { render json: @merge_request }
- format.patch { render text: @merge_request.to_patch }
+ format.patch do
+ headers.store(*Gitlab::Workhorse.send_git_patch(@project.repository,
+ @merge_request.diff_base_commit.id,
+ @merge_request.last_commit.id))
+ headers['Content-Disposition'] = 'inline'
+ head :ok
+ end
format.diff do
return render_404 unless @merge_request.diff_refs
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index f5c5b7c1306..53d9aa588af 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -319,13 +319,6 @@ class MergeRequest < ActiveRecord::Base
)
end
- # Returns the commit as a series of email patches.
- #
- # see "git format-patch"
- def to_patch
- target_project.repository.format_patch(diff_base_commit.sha, source_sha)
- end
-
def hook_attrs
attrs = {
source: source_project.try(:hook_attrs),
diff --git a/lib/gitlab/workhorse.rb b/lib/gitlab/workhorse.rb
index 40e8299c36b..5c3449f0b5b 100644
--- a/lib/gitlab/workhorse.rb
+++ b/lib/gitlab/workhorse.rb
@@ -52,6 +52,19 @@ module Gitlab
]
end
+ def send_git_patch(repository, from, to)
+ params = {
+ 'RepoPath' => repository.path_to_repo,
+ 'ShaFrom' => from,
+ 'ShaTo' => to
+ }
+
+ [
+ SEND_DATA_HEADER,
+ "git-format-patch:#{encode(params)}"
+ ]
+ end
+
protected
def encode(hash)
diff --git a/spec/controllers/projects/merge_requests_controller_spec.rb b/spec/controllers/projects/merge_requests_controller_spec.rb
index 5e66106122c..64eefd71918 100644
--- a/spec/controllers/projects/merge_requests_controller_spec.rb
+++ b/spec/controllers/projects/merge_requests_controller_spec.rb
@@ -96,26 +96,14 @@ describe Projects::MergeRequestsController do
end
describe "as patch" do
- include_examples "export merge as", :patch
- let(:format) { :patch }
-
- it "should really be a git email patch with commit" do
- get(:show,
- namespace_id: project.namespace.to_param,
- project_id: project.to_param,
- id: merge_request.iid, format: format)
-
- expect(response.body[0..100]).to start_with("From #{merge_request.commits.last.id}")
- end
-
- it "should contain git diffs" do
+ it 'triggers workhorse to serve the request' do
get(:show,
namespace_id: project.namespace.to_param,
project_id: project.to_param,
id: merge_request.iid,
- format: format)
+ format: :patch)
- expect(response.body).to match(/^diff --git/)
+ expect(response.headers['Gitlab-Workhorse-Send-Data']).to start_with("git-format-patch:")
end
end
end