summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@selenight.nl>2016-07-03 17:01:13 -0400
committerDouwe Maan <douwe@selenight.nl>2016-07-06 18:51:01 -0400
commitddec2ed0dfb0981bf1f022f705470402e20ef9bc (patch)
tree97d0c4fef0049465f6cc91deea9a7c3cea85e943
parent5ffb848ee6ecb66d4ff1b2d2bb21968f44f33f7e (diff)
downloadgitlab-ce-ddec2ed0dfb0981bf1f022f705470402e20ef9bc.tar.gz
Add send_git_patch helper
-rw-r--r--app/controllers/projects/merge_requests_controller.rb15
-rw-r--r--app/helpers/workhorse_helper.rb9
-rw-r--r--lib/gitlab/workhorse.rb6
-rw-r--r--spec/controllers/projects/merge_requests_controller_spec.rb2
4 files changed, 21 insertions, 11 deletions
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index ae0660078f9..df1943dd9bb 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -58,14 +58,17 @@ class Projects::MergeRequestsController < Projects::ApplicationController
respond_to do |format|
format.html
- format.json { render json: @merge_request }
+
+ format.json do
+ render json: @merge_request
+ end
+
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
+ return render_404 unless @merge_request.diff_refs
+
+ send_git_patch @project.repository, @merge_request.diff_refs
end
+
format.diff do
return render_404 unless @merge_request.diff_refs
diff --git a/app/helpers/workhorse_helper.rb b/app/helpers/workhorse_helper.rb
index 2bd0dbfd095..65598ad9ed3 100644
--- a/app/helpers/workhorse_helper.rb
+++ b/app/helpers/workhorse_helper.rb
@@ -1,4 +1,4 @@
-# Helpers to send Git blobs, diffs or archives through Workhorse.
+# Helpers to send Git blobs, diffs, patches or archives through Workhorse.
# Workhorse will also serve files when using `send_file`.
module WorkhorseHelper
# Send a Git blob through Workhorse
@@ -16,6 +16,13 @@ module WorkhorseHelper
head :ok
end
+ # Send a Git patch through Workhorse
+ def send_git_patch(repository, diff_refs)
+ headers.store(*Gitlab::Workhorse.send_git_patch(repository, diff_refs))
+ headers['Content-Disposition'] = 'inline'
+ head :ok
+ end
+
# Archive a Git repository and send it through Workhorse
def send_git_archive(repository, ref:, format:)
headers.store(*Gitlab::Workhorse.send_git_archive(repository, ref: ref, format: format))
diff --git a/lib/gitlab/workhorse.rb b/lib/gitlab/workhorse.rb
index 41b6854cbe1..bc0193a6c32 100644
--- a/lib/gitlab/workhorse.rb
+++ b/lib/gitlab/workhorse.rb
@@ -50,11 +50,11 @@ module Gitlab
]
end
- def send_git_patch(repository, from, to)
+ def send_git_patch(repository, diff_refs)
params = {
'RepoPath' => repository.path_to_repo,
- 'ShaFrom' => from,
- 'ShaTo' => to
+ 'ShaFrom' => diff_refs.start_sha,
+ 'ShaTo' => diff_refs.head_sha
}
[
diff --git a/spec/controllers/projects/merge_requests_controller_spec.rb b/spec/controllers/projects/merge_requests_controller_spec.rb
index 2d2fb87f14e..c4b57e77804 100644
--- a/spec/controllers/projects/merge_requests_controller_spec.rb
+++ b/spec/controllers/projects/merge_requests_controller_spec.rb
@@ -103,7 +103,7 @@ describe Projects::MergeRequestsController do
id: merge_request.iid,
format: :patch)
- expect(response.headers['Gitlab-Workhorse-Send-Data']).to start_with("git-format-patch:")
+ expect(response.headers[Gitlab::Workhorse::SEND_DATA_HEADER]).to start_with("git-format-patch:")
end
end
end