From 8bfc46451eae5bd92380b9fbdf91b9636d55066c Mon Sep 17 00:00:00 2001
From: Josh Frye <joshfng@mbp.local>
Date: Wed, 23 Dec 2015 10:20:07 -0500
Subject: [PATCH] Show 'New Merge Request' buttons on canonical repo.

---
 CHANGELOG                                         |  2 ++
 app/views/projects/buttons/_dropdown.html.haml    |  7 ++++---
 app/views/projects/merge_requests/index.html.haml |  5 +++--
 features/project/fork.feature                     | 10 ++++++++++
 features/steps/project/fork.rb                    | 10 ++++++++++
 5 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 2b7d5808e7e..e4245060489 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -91,6 +91,8 @@ v 8.3.0
   - Do not show build status unless builds are enabled and `.gitlab-ci.yml` is present
   - Persist runners registration token in database
   - Fix online editor should not remove newlines at the end of the file
+  - Expose Git's version in the admin area
+  - Show "New Merge Request" buttons on canonical repos when you have a fork (Josh Frye)
 
 v 8.2.3
   - Fix application settings cache not expiring after changes (Stan Hu)
diff --git a/app/views/projects/buttons/_dropdown.html.haml b/app/views/projects/buttons/_dropdown.html.haml
index 1f639fecc30..459e6da2fe2 100644
--- a/app/views/projects/buttons/_dropdown.html.haml
+++ b/app/views/projects/buttons/_dropdown.html.haml
@@ -8,11 +8,12 @@
           = link_to url_for_new_issue(@project, only_path: true) do
             = icon('exclamation-circle fw')
             New issue
-      - if can?(current_user, :create_merge_request, @project)
+      - merge_project = can?(current_user, :create_merge_request, @project) ? @project : current_user.fork_of(@project)
+      - if merge_project
         %li
-          = link_to new_namespace_project_merge_request_path(@project.namespace, @project) do
+          = link_to new_namespace_project_merge_request_path(merge_project.namespace, merge_project) do
             = icon('tasks fw')
-            New merge request
+            New Merge Request
       - if can?(current_user, :create_snippet, @project)
         %li
           = link_to new_namespace_project_snippet_path(@project.namespace, @project) do
diff --git a/app/views/projects/merge_requests/index.html.haml b/app/views/projects/merge_requests/index.html.haml
index 086298e5af1..972fce9ad3d 100644
--- a/app/views/projects/merge_requests/index.html.haml
+++ b/app/views/projects/merge_requests/index.html.haml
@@ -6,9 +6,10 @@
   .controls
     = render 'shared/issuable/search_form', path: namespace_project_merge_requests_path(@project.namespace, @project)
 
-    - if can? current_user, :create_merge_request, @project
+    - merge_project = can?(current_user, :create_merge_request, @project) ? @project : current_user.fork_of(@project)
+    - if merge_project
       .pull-left.hidden-xs
-        = link_to new_namespace_project_merge_request_path(@project.namespace, @project), class: "btn btn-new", title: "New Merge Request" do
+        = link_to new_namespace_project_merge_request_path(merge_project.namespace, merge_project), class: "btn btn-new", title: "New Merge Request" do
           %i.fa.fa-plus
           New Merge Request
   = render 'shared/issuable/filter', type: :merge_requests
diff --git a/features/project/fork.feature b/features/project/fork.feature
index 22f68e5b340..40849352370 100644
--- a/features/project/fork.feature
+++ b/features/project/fork.feature
@@ -1,3 +1,4 @@
+@forks
 Feature: Project Fork
   Background:
     Given I sign in as a user
@@ -14,3 +15,12 @@ Feature: Project Fork
     And I click link "Fork"
     When I fork to my namespace
     Then I should see a "Name has already been taken" warning
+
+  Scenario: Merge request on canonical repo goes to fork merge request page
+    Given I click link "Fork"
+    And I fork to my namespace
+    Then I should see the forked project page
+    When I visit project "Shop" page
+    Then I should see "New merge request"
+    And I goto the Merge Requests page
+    Then I should see "New merge request"
diff --git a/features/steps/project/fork.rb b/features/steps/project/fork.rb
index b0230add34f..878ddea46ff 100644
--- a/features/steps/project/fork.rb
+++ b/features/steps/project/fork.rb
@@ -30,4 +30,14 @@ class Spinach::Features::ProjectFork < Spinach::FeatureSteps
       click_link current_user.name
     end
   end
+
+  step 'I should see "New Merge Request"' do
+    expect(page).to have_content "New Merge Request"
+  end
+
+  step 'I goto the Merge Requests page' do
+    page.within '.page-sidebar-expanded' do
+      click_link "Merge Requests"
+    end
+  end
 end
-- 
GitLab