Commit afa21054 authored by Jacob Vosmaer (GitLab)'s avatar Jacob Vosmaer (GitLab)

Merge branch 'zj-workhorse-to-serve-diffs' into 'master'

Workhorse to serve raw diffs

Fixes (partially) #13999

Dependent on: gitlab-org/gitlab-workhorse!45

See merge request !4130
parents 8c356ac5 d47218fb
...@@ -172,6 +172,7 @@ v 8.7.6 ...@@ -172,6 +172,7 @@ v 8.7.6
- Fix import from GitLab.com to a private instance failure. !4181 - Fix import from GitLab.com to a private instance failure. !4181
- Fix external imports not finding the import data. !4106 - Fix external imports not finding the import data. !4106
- Fix notification delay when changing status of an issue - Fix notification delay when changing status of an issue
- Bump Workhorse to 0.7.5 so it can serve raw diffs
v 8.7.5 v 8.7.5
- Fix relative links in wiki pages. !4050 - Fix relative links in wiki pages. !4050
......
...@@ -58,9 +58,16 @@ class Projects::MergeRequestsController < Projects::ApplicationController ...@@ -58,9 +58,16 @@ class Projects::MergeRequestsController < Projects::ApplicationController
respond_to do |format| respond_to do |format|
format.html format.html
format.json { render json: @merge_request } format.json { render json: @merge_request }
format.diff { render text: @merge_request.to_diff } format.patch { render text: @merge_request.to_patch }
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
end end
......
...@@ -313,13 +313,6 @@ class MergeRequest < ActiveRecord::Base ...@@ -313,13 +313,6 @@ class MergeRequest < ActiveRecord::Base
) )
end 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. # Returns the commit as a series of email patches.
# #
# see "git format-patch" # see "git format-patch"
......
...@@ -74,18 +74,6 @@ Feature: Project Merge Requests ...@@ -74,18 +74,6 @@ Feature: Project Merge Requests
And I submit new merge request "Wiki Feature" And I submit new merge request "Wiki Feature"
Then I should see 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 @javascript
Scenario: I comment on a merge request Scenario: I comment on a merge request
Given I visit merge request page "Bug NS-04" Given I visit merge request page "Bug NS-04"
......
...@@ -29,9 +29,22 @@ module Gitlab ...@@ -29,9 +29,22 @@ module Gitlab
"git-archive:#{encode(params)}", "git-archive:#{encode(params)}",
] ]
end 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 protected
def encode(hash) def encode(hash)
Base64.urlsafe_encode64(JSON.dump(hash)) Base64.urlsafe_encode64(JSON.dump(hash))
end end
......
...@@ -84,17 +84,14 @@ describe Projects::MergeRequestsController do ...@@ -84,17 +84,14 @@ describe Projects::MergeRequestsController do
end end
describe "as diff" do describe "as diff" do
include_examples "export merge as", :diff it "triggers workhorse to serve the request" do
let(:format) { :diff }
it "should really only be a git diff" do
get(:show, get(:show,
namespace_id: project.namespace.to_param, namespace_id: project.namespace.to_param,
project_id: project.to_param, project_id: project.to_param,
id: merge_request.iid, 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
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