Skip to content

Commit

Permalink
Merge branch 'fix-diff-patch-public-mr' into 'master'
Browse files Browse the repository at this point in the history
Fix downloading of patches on public merge requests when user logged out

### What does this MR do?

This MR makes it possible to download a diff patch on a public merge request when a user is logged out.

### Why was this MR needed?

An Error 500 would result when a user attempted to click on the "Email Patches" or "Plain Diff" button:

```
NoMethodError - undefined method `id' for nil:NilClass:
  lib/gitlab/backend/shell_env.rb:9:in `set_env'
  lib/gitlab/satellite/action.rb:20:in `in_locked_and_timed_satellite'
  lib/gitlab/satellite/merge_action.rb:49:in `diff_in_satellite'
  app/models/merge_request.rb:219:in `to_diff'
  app/controllers/projects/merge_requests_controller.rb:42:in `block (2 levels) in show'
```

### What are the relevant issue numbers?

* Closes #1225
* Closes #1854 (dup)
* Closes #1858 (dup)

See merge request !872
  • Loading branch information
dzaporozhets committed Jun 23, 2015
2 parents 94f130c + 555fd0c commit 541f767
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 3 deletions.
1 change: 1 addition & 0 deletions CHANGELOG
Expand Up @@ -3,6 +3,7 @@ Please view this file on the master branch, on stable branches it's out of date.
v 7.13.0 (unreleased)
- Fix invalid timestamps in RSS feeds (Rowan Wookey)
- Fix error when deleting a user who has projects (Stan Hu)
- Fix downloading of patches on public merge requests when user logged out (Stan Hu)
- Update maintenance documentation to explain no need to recompile asssets for omnibus installations (Stan Hu)
- Support commenting on diffs in side-by-side mode (Stan Hu)
- Fix JavaScript error when clicking on the comment button on a diff line that has a comment already (Stan Hu)
Expand Down
12 changes: 12 additions & 0 deletions features/project/merge_requests.feature
Expand Up @@ -41,6 +41,18 @@ 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"
Expand Down
22 changes: 22 additions & 0 deletions features/steps/project/merge_requests.rb
Expand Up @@ -6,6 +6,7 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
include SharedPaths
include SharedMarkdown
include SharedDiffNote
include SharedUser

step 'I click link "New Merge Request"' do
click_link "New Merge Request"
Expand Down Expand Up @@ -108,6 +109,15 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
author: project.users.first)
end

step 'project "Community" has "Bug CO-01" open merge request with diffs inside' do
project = Project.find_by(name: "Community")
create(:merge_request_with_diffs,
title: "Bug CO-01",
source_project: project,
target_project: project,
author: project.users.first)
end

step 'I switch to the diff tab' do
visit diffs_namespace_project_merge_request_path(project.namespace, project, merge_request)
end
Expand Down Expand Up @@ -326,6 +336,18 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
expect(page).to have_content 'Target branch changed from master to feature'
end

step 'I click on "Email Patches"' do
click_link "Email Patches"
end

step 'I click on "Plain Diff"' do
click_link "Plain Diff"
end

step 'I should see a patch diff' do
expect(page).to have_content('diff --git')
end

def merge_request
@merge_request ||= MergeRequest.find_by!(title: "Bug NS-05")
end
Expand Down
5 changes: 5 additions & 0 deletions features/steps/shared/paths.rb
Expand Up @@ -357,6 +357,11 @@ module SharedPaths
visit namespace_project_merge_request_path(mr.target_project.namespace, mr.target_project, mr)
end

step 'I visit merge request page "Bug CO-01"' do
mr = MergeRequest.find_by(title: "Bug CO-01")
visit namespace_project_merge_request_path(mr.target_project.namespace, mr.target_project, mr)
end

step 'I visit project "Shop" merge requests page' do
visit namespace_project_merge_requests_path(project.namespace, project)
end
Expand Down
4 changes: 3 additions & 1 deletion lib/gitlab/backend/shell_env.rb
Expand Up @@ -6,7 +6,9 @@ module ShellEnv

def set_env(user)
# Set GL_ID env variable
ENV['GL_ID'] = "user-#{user.id}"
if user
ENV['GL_ID'] = "user-#{user.id}"
end
end

def reset_env
Expand Down
6 changes: 4 additions & 2 deletions lib/gitlab/satellite/action.rb
Expand Up @@ -39,8 +39,10 @@ def in_locked_and_timed_satellite
def prepare_satellite!(repo)
project.satellite.clear_and_update!

repo.config['user.name'] = user.name
repo.config['user.email'] = user.email
if user
repo.config['user.name'] = user.name
repo.config['user.email'] = user.email
end
end

def default_options(options = {})
Expand Down

0 comments on commit 541f767

Please sign in to comment.