From b1b8261f56d35e471bc32b0f2050e27650b7c797 Mon Sep 17 00:00:00 2001
From: Douwe Maan <douwe@gitlab.com>
Date: Tue, 17 Mar 2015 18:37:50 +0100
Subject: [PATCH] Add license and contribution guide links to project sidebar.

---
 CHANGELOG                                     |  1 +
 app/helpers/projects_helper.rb                | 37 ++++++++++++++++++-
 app/models/repository.rb                      | 10 ++++-
 app/views/projects/_issuable_form.html.haml   |  4 +-
 .../merge_requests/_new_submit.html.haml      |  4 +-
 app/views/projects/show.html.haml             | 26 ++++++++-----
 6 files changed, 65 insertions(+), 17 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index 09b60e8e54a..ec5ada56311 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,7 @@ Please view this file on the master branch, on stable branches it's out of date.
 
 v 7.10.0 (unreleased)
   - Add a service to support external wikis (Hannes Rosenögger)
+  - Add changelog, license and contribution guide links to project sidebar.
 
 v 7.9.0 (unreleased)
   - Add HipChat integration documentation (Stan Hu)
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index 2225b110651..a14277180c7 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -232,12 +232,45 @@ module ProjectsHelper
   end
 
   def contribution_guide_url(project)
-    if project && project.repository.contribution_guide
+    if project && contribution_guide = project.repository.contribution_guide
       namespace_project_blob_path(
         project.namespace,
         project,
         tree_join(project.default_branch,
-                  project.repository.contribution_guide.name)
+                  contribution_guide.name)
+      )
+    end
+  end
+
+  def changelog_url(project)
+    if project && changelog = project.repository.changelog
+      namespace_project_blob_path(
+        project.namespace,
+        project,
+        tree_join(project.default_branch,
+                  changelog.name)
+      )
+    end
+  end
+
+  def license_url(project)
+    if project && license = project.repository.license
+      namespace_project_blob_path(
+        project.namespace,
+        project,
+        tree_join(project.default_branch,
+                  license.name)
+      )
+    end
+  end
+
+  def version_url(project)
+    if project && version = project.repository.version
+      namespace_project_blob_path(
+        project.namespace,
+        project,
+        tree_join(project.default_branch,
+                  version.name)
       )
     end
   end
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 8d0306e820d..86c9c9b4d48 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -122,7 +122,7 @@ class Repository
 
   def expire_cache
     %i(size branch_names tag_names commit_count graph_log
-       readme version contribution_guide changelog).each do |key|
+       readme version contribution_guide changelog license).each do |key|
       cache.expire(key)
     end
   end
@@ -212,6 +212,14 @@ class Repository
     end
   end
 
+  def license
+    cache.fetch(:license) do
+      tree(:head).blobs.find do |file|
+        file.name =~ /^license/i
+      end
+    end
+  end
+
   def head_commit
     commit(self.root_ref)
   end
diff --git a/app/views/projects/_issuable_form.html.haml b/app/views/projects/_issuable_form.html.haml
index a7cd129b631..7fd5fe8a6e1 100644
--- a/app/views/projects/_issuable_form.html.haml
+++ b/app/views/projects/_issuable_form.html.haml
@@ -71,10 +71,10 @@
       = link_to 'Create new label', new_namespace_project_label_path(issuable.project.namespace, issuable.project), target: :blank
 
 .form-actions
-  - if !issuable.project.empty_repo? && contribution_guide_url(issuable.project) && !issuable.persisted?
+  - if !issuable.project.empty_repo? && (guide_url = contribution_guide_url(issuable.project)) && !issuable.persisted?
     %p
       Please review the
-      %strong #{link_to 'guidelines for contribution', contribution_guide_url(issuable.project)}
+      %strong #{link_to 'guidelines for contribution', guide_url}
       to this repository.
   - if issuable.new_record?
     = f.submit "Submit new #{issuable.class.model_name.human.downcase}", class: 'btn btn-create'
diff --git a/app/views/projects/merge_requests/_new_submit.html.haml b/app/views/projects/merge_requests/_new_submit.html.haml
index bf80afe8785..1d8eef4e8ce 100644
--- a/app/views/projects/merge_requests/_new_submit.html.haml
+++ b/app/views/projects/merge_requests/_new_submit.html.haml
@@ -69,10 +69,10 @@
           = link_to 'Create new label', new_namespace_project_label_path(@merge_request.target_project.namespace, @merge_request.target_project), target: :blank
 
     .form-actions
-      - if contribution_guide_url(@target_project)
+      - if guide_url = contribution_guide_url(@target_project)
         %p
           Please review the
-          %strong #{link_to 'guidelines for contribution', contribution_guide_url(@target_project)}
+          %strong #{link_to 'guidelines for contribution', guide_url}
           to this repository.
       = f.hidden_field :source_project_id
       = f.hidden_field :source_branch
diff --git a/app/views/projects/show.html.haml b/app/views/projects/show.html.haml
index 25dee2043be..822e67c5616 100644
--- a/app/views/projects/show.html.haml
+++ b/app/views/projects/show.html.haml
@@ -47,21 +47,27 @@
               = link_to @project.forked_from_project.name_with_namespace, namespace_project_path(@project.namespace, @project.forked_from_project)
 
           - unless @project.empty_repo?
-            = link_to namespace_project_compare_index_path(@project.namespace, @project, from: @repository.root_ref, to: @ref || @repository.root_ref), class: 'btn btn-block' do
-              Compare code
-
-            - version = @repository.version
-            - changelog = @repository.changelog
-            - if version
-              - detail_file = changelog.try(:name) || version.name
-              = link_to namespace_project_blob_path(@project.namespace, @project, tree_join(@repository.root_ref, detail_file)), class: 'btn btn-block' do
+            - if version = @repository.version
+              - detail_url = changelog_url(@project) || version_url(@project)
+              = link_to detail_url, class: 'btn btn-block' do
                 Version:
                 %span.count
                   = @repository.blob_by_oid(version.id).data
-            - elsif changelog
-              = link_to namespace_project_blob_path(@project.namespace, @project, tree_join(@repository.root_ref, changelog.name)), class: 'btn btn-block' do
+            - elsif @repository.changelog
+              = link_to changelog_url(@project), class: 'btn btn-block' do
                 View changelog
 
+            - if @repository.contribution_guide
+              = link_to contribution_guide_url(@project), class: 'btn btn-block' do
+                View contribution guide
+
+            - if @repository.license
+              = link_to license_url(@project), class: 'btn btn-block' do
+                View license
+            
+            = link_to namespace_project_compare_index_path(@project.namespace, @project, from: @repository.root_ref, to: @ref || @repository.root_ref), class: 'btn btn-block' do
+              Compare code
+
         .prepend-top-10
           %p
             %span.light Created on
-- 
GitLab