Commit 01e1139f authored by Zeger-Jan van de Weg's avatar Zeger-Jan van de Weg Committed by Z.J. van de Weg

Workhorse to serve raw diffs

parent ca3c5c29
......@@ -58,8 +58,15 @@ class Projects::MergeRequestsController < Projects::ApplicationController
respond_to do |format|
format.html
format.json { render json: @merge_request }
format.diff { render text: @merge_request.to_diff }
format.patch { render text: @merge_request.to_patch }
format.diff do
headers.store(*Gitlab::Workhorse.send_git_diff(@project.repository,
@merge_request.diff_base_commit.id,
@merge_request.last_commit.id))
headers['Content-Disposition'] = 'inline'
head :ok
end
end
end
......
......@@ -313,13 +313,6 @@ class MergeRequest < ActiveRecord::Base
)
end
# Returns the raw diff for this merge request
#
# see "git diff"
def to_diff
target_project.repository.diff_text(diff_base_commit.sha, source_sha)
end
# Returns the commit as a series of email patches.
#
# see "git format-patch"
......
......@@ -76,18 +76,6 @@ Feature: Project Merge Requests
And I submit new merge request "Wiki Feature"
Then I should see merge request "Wiki Feature"
Scenario: I download a diff on a public merge request
Given public project "Community"
And "John Doe" owns public project "Community"
And project "Community" has "Bug CO-01" open merge request with diffs inside
Given I logout directly
And I visit merge request page "Bug CO-01"
And I click on "Email Patches"
Then I should see a patch diff
And I visit merge request page "Bug CO-01"
And I click on "Plain Diff"
Then I should see a patch diff
@javascript
Scenario: I comment on a merge request
Given I visit merge request page "Bug NS-04"
......
......@@ -30,6 +30,19 @@ module Gitlab
]
end
def send_git_diff(repository, from, to)
params = {
'RepoPath' => repository.path_to_repo,
'ShaFrom' => from,
'ShaTo' => to
}
[
SEND_DATA_HEADER,
"git-diff:#{encode(params)}"
]
end
protected
def encode(hash)
......
......@@ -84,17 +84,14 @@ describe Projects::MergeRequestsController do
end
describe "as diff" do
include_examples "export merge as", :diff
let(:format) { :diff }
it "should really only be a git diff" 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: :diff)
expect(response.body).to start_with("diff --git")
expect(response.headers['Gitlab-Workhorse-Send-Data']).to start_with("git-diff:")
end
end
......
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