From 3358afa758c7db96ea8fce2a10cdf9c0abe85216 Mon Sep 17 00:00:00 2001
From: Connor Shea <connor.james.shea@gmail.com>
Date: Mon, 16 May 2016 17:06:26 -0500
Subject: [PATCH] Update the help_page_path route to accept paths directly
 instead of using parameters.

---
 app/controllers/help_controller.rb             | 10 ++++------
 app/helpers/search_helper.rb                   | 18 +++++++++---------
 app/views/admin/appearances/_form.html.haml    |  2 +-
 .../admin/application_settings/_form.html.haml |  6 +++---
 app/views/admin/deploy_keys/new.html.haml      |  2 +-
 app/views/admin/groups/show.html.haml          |  2 +-
 app/views/admin/hooks/index.html.haml          |  2 +-
 app/views/admin/projects/show.html.haml        |  2 +-
 app/views/errors/access_denied.html.haml       |  2 +-
 .../group_members/_new_group_member.html.haml  |  2 +-
 app/views/help/show.html.haml                  |  2 +-
 app/views/help/ui.html.haml                    |  2 +-
 app/views/import/github/new.html.haml          |  2 +-
 app/views/profiles/keys/index.html.haml        |  2 +-
 app/views/profiles/preferences/show.html.haml  |  4 ++--
 .../profiles/two_factor_auths/show.html.haml   |  2 +-
 .../projects/_bitbucket_import_modal.html.haml |  2 +-
 app/views/projects/_builds_settings.html.haml  |  2 +-
 .../projects/_gitlab_import_modal.html.haml    |  2 +-
 .../projects/_merge_request_settings.html.haml |  2 +-
 app/views/projects/builds/index.html.haml      |  2 +-
 app/views/projects/deploy_keys/_form.html.haml |  2 +-
 app/views/projects/edit.html.haml              |  2 +-
 .../projects/environments/index.html.haml      |  2 +-
 app/views/projects/environments/new.html.haml  |  2 +-
 app/views/projects/environments/show.html.haml |  2 +-
 app/views/projects/new.html.haml               |  2 +-
 app/views/projects/notes/_hints.html.haml      |  2 +-
 app/views/projects/pipelines/index.html.haml   |  2 +-
 .../_new_project_member.html.haml              |  2 +-
 .../protected_branches/index.html.haml         |  4 ++--
 app/views/shared/_visibility_level.html.haml   |  2 +-
 app/views/shared/web_hooks/_form.html.haml     |  2 +-
 config/routes.rb                               |  4 ++--
 features/steps/dashboard/help.rb               |  2 +-
 spec/features/help_pages_spec.rb               |  2 +-
 36 files changed, 52 insertions(+), 54 deletions(-)

diff --git a/app/controllers/help_controller.rb b/app/controllers/help_controller.rb
index 9b5c43b17e2..d5dc894e0bd 100644
--- a/app/controllers/help_controller.rb
+++ b/app/controllers/help_controller.rb
@@ -12,13 +12,12 @@ class HelpController < ApplicationController
   end
 
   def show
-    @category = clean_path_info(path_params[:category])
-    @file = path_params[:file]
+    @path = path_params[:path]
 
     respond_to do |format|
       format.any(:markdown, :md, :html) do
         # Note: We are purposefully NOT using `Rails.root.join`
-        path = File.join(Rails.root, 'doc', @category, "#{@file}.md")
+        path = File.join(Rails.root, 'doc', "#{@path}.md")
 
         if File.exist?(path)
           @markdown = File.read(path)
@@ -33,7 +32,7 @@ class HelpController < ApplicationController
       # Allow access to images in the doc folder
       format.any(:png, :gif, :jpeg) do
         # Note: We are purposefully NOT using `Rails.root.join`
-        path = File.join(Rails.root, 'doc', @category, "#{@file}.#{params[:format]}")
+        path = File.join(Rails.root, 'doc', "#{@path}.#{params[:format]}")
 
         if File.exist?(path)
           send_file(path, disposition: 'inline')
@@ -57,8 +56,7 @@ class HelpController < ApplicationController
   private
 
   def path_params
-    params.require(:category)
-    params.require(:file)
+    params.require(:path)
 
     params
   end
diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb
index f9fc525df6f..b165b569372 100644
--- a/app/helpers/search_helper.rb
+++ b/app/helpers/search_helper.rb
@@ -43,15 +43,15 @@ module SearchHelper
   # Autocomplete results for internal help pages
   def help_autocomplete
     [
-      { category: "Help", label: "API Help",           url: help_page_path("api", "README") },
-      { category: "Help", label: "Markdown Help",      url: help_page_path("markdown", "markdown") },
-      { category: "Help", label: "Permissions Help",   url: help_page_path("permissions", "permissions") },
-      { category: "Help", label: "Public Access Help", url: help_page_path("public_access", "public_access") },
-      { category: "Help", label: "Rake Tasks Help",    url: help_page_path("raketasks", "README") },
-      { category: "Help", label: "SSH Keys Help",      url: help_page_path("ssh", "README") },
-      { category: "Help", label: "System Hooks Help",  url: help_page_path("system_hooks", "system_hooks") },
-      { category: "Help", label: "Webhooks Help",      url: help_page_path("web_hooks", "web_hooks") },
-      { category: "Help", label: "Workflow Help",      url: help_page_path("workflow", "README") },
+      { category: "Help", label: "API Help",           url: help_page_path("api/README") },
+      { category: "Help", label: "Markdown Help",      url: help_page_path("markdown/markdown") },
+      { category: "Help", label: "Permissions Help",   url: help_page_path("permissions/permissions") },
+      { category: "Help", label: "Public Access Help", url: help_page_path("public_access/public_access") },
+      { category: "Help", label: "Rake Tasks Help",    url: help_page_path("raketasks/README") },
+      { category: "Help", label: "SSH Keys Help",      url: help_page_path("ssh/README") },
+      { category: "Help", label: "System Hooks Help",  url: help_page_path("system_hooks/system_hooks") },
+      { category: "Help", label: "Webhooks Help",      url: help_page_path("web_hooks/web_hooks") },
+      { category: "Help", label: "Workflow Help",      url: help_page_path("workflow/README") },
     ]
   end
 
diff --git a/app/views/admin/appearances/_form.html.haml b/app/views/admin/appearances/_form.html.haml
index dc083e50178..92e2dae4842 100644
--- a/app/views/admin/appearances/_form.html.haml
+++ b/app/views/admin/appearances/_form.html.haml
@@ -13,7 +13,7 @@
     .col-sm-10
       = f.text_area :description, class: "form-control", rows: 10
       .hint
-        Description parsed with #{link_to "GitLab Flavored Markdown", help_page_path('markdown', 'markdown'), target: '_blank'}.
+        Description parsed with #{link_to "GitLab Flavored Markdown", help_page_path('markdown/markdown'), target: '_blank'}.
   .form-group
     = f.label :logo, class: 'control-label'
     .col-sm-10
diff --git a/app/views/admin/application_settings/_form.html.haml b/app/views/admin/application_settings/_form.html.haml
index 8de28528cda..538d8176ce7 100644
--- a/app/views/admin/application_settings/_form.html.haml
+++ b/app/views/admin/application_settings/_form.html.haml
@@ -38,11 +38,11 @@
             = source
         %span.help-block#import-sources-help
           Enabled sources for code import during project creation. OmniAuth must be configured for GitHub
-          = link_to "(?)", help_page_path("integration", "github")
+          = link_to "(?)", help_page_path("integration/github")
           , Bitbucket
-          = link_to "(?)", help_page_path("integration", "bitbucket")
+          = link_to "(?)", help_page_path("integration/bitbucket")
           and GitLab.com
-          = link_to "(?)", help_page_path("integration", "gitlab")
+          = link_to "(?)", help_page_path("integration/gitlab")
     .form-group
       %label.control-label.col-sm-2 Enabled Git access protocols
       .col-sm-10
diff --git a/app/views/admin/deploy_keys/new.html.haml b/app/views/admin/deploy_keys/new.html.haml
index 15aa059c93d..5c410a695bf 100644
--- a/app/views/admin/deploy_keys/new.html.haml
+++ b/app/views/admin/deploy_keys/new.html.haml
@@ -14,7 +14,7 @@
       .col-sm-10
         %p.light
           Paste a machine public key here. Read more about how to generate it
-          = link_to "here", help_page_path("ssh", "README")
+          = link_to "here", help_page_path("ssh/README")
         = f.text_area :key, class: "form-control thin_area", rows: 5
 
     .form-actions
diff --git a/app/views/admin/groups/show.html.haml b/app/views/admin/groups/show.html.haml
index 522153b37e3..40c8169ad9d 100644
--- a/app/views/admin/groups/show.html.haml
+++ b/app/views/admin/groups/show.html.haml
@@ -79,7 +79,7 @@
         .panel-body.form-holder
           %p.light
             Read more about project permissions
-            %strong= link_to "here", help_page_path("permissions", "permissions"), class: "vlink"
+            %strong= link_to "here", help_page_path("permissions/permissions"), class: "vlink"
 
           = form_tag members_update_admin_group_path(@group), id: "new_project_member", class: "bulk_import", method: :put  do
             %div
diff --git a/app/views/admin/hooks/index.html.haml b/app/views/admin/hooks/index.html.haml
index 7b388cf7862..c217490963f 100644
--- a/app/views/admin/hooks/index.html.haml
+++ b/app/views/admin/hooks/index.html.haml
@@ -3,7 +3,7 @@
   System hooks
 
 %p.light
-  #{link_to "System hooks ", help_page_path("system_hooks", "system_hooks"), class: "vlink"} can be
+  #{link_to "System hooks ", help_page_path("system_hooks/system_hooks"), class: "vlink"} can be
   used for binding events when GitLab creates a User or Project.
 
 %hr
diff --git a/app/views/admin/projects/show.html.haml b/app/views/admin/projects/show.html.haml
index 2c5aba71699..b2c607361b3 100644
--- a/app/views/admin/projects/show.html.haml
+++ b/app/views/admin/projects/show.html.haml
@@ -132,7 +132,7 @@
               - else
                 passed.
 
-            = link_to icon('question-circle'), help_page_path('administration', 'repository_checks')
+            = link_to icon('question-circle'), help_page_path('administration/repository_checks')
 
           .form-group
             = f.submit 'Trigger repository check', class: 'btn btn-primary'
diff --git a/app/views/errors/access_denied.html.haml b/app/views/errors/access_denied.html.haml
index 012e9857642..2febeef99d3 100644
--- a/app/views/errors/access_denied.html.haml
+++ b/app/views/errors/access_denied.html.haml
@@ -3,4 +3,4 @@
 %h3 Access Denied
 %hr
 %p You are not allowed to access this page.
-%p Read more about project permissions #{link_to "here", help_page_path("permissions", "permissions"), class: "vlink"}
+%p Read more about project permissions #{link_to "here", help_page_path("permissions/permissions"), class: "vlink"}
diff --git a/app/views/groups/group_members/_new_group_member.html.haml b/app/views/groups/group_members/_new_group_member.html.haml
index e7ab4f2409b..13ded2bc455 100644
--- a/app/views/groups/group_members/_new_group_member.html.haml
+++ b/app/views/groups/group_members/_new_group_member.html.haml
@@ -12,7 +12,7 @@
       = select_tag :access_level, options_for_select(GroupMember.access_level_roles, @group_member.access_level), class: "project-access-select select2"
       .help-block
         Read more about role permissions
-        %strong= link_to "here", help_page_path("permissions", "permissions"), class: "vlink"
+        %strong= link_to "here", help_page_path("permissions/permissions"), class: "vlink"
 
   .form-actions
     = f.submit 'Add users to group', class: "btn btn-create"
diff --git a/app/views/help/show.html.haml b/app/views/help/show.html.haml
index 0398afb4c1d..be257b51b9e 100644
--- a/app/views/help/show.html.haml
+++ b/app/views/help/show.html.haml
@@ -1,3 +1,3 @@
-- page_title @file.humanize, *@category.split("/").reverse.map(&:humanize)
+- page_title @path.split("/").reverse.map(&:humanize)
 .documentation.wiki
   = markdown @markdown.gsub('$your_email', current_user.try(:email) || "email@example.com")
diff --git a/app/views/help/ui.html.haml b/app/views/help/ui.html.haml
index d676bc28c89..431d312b4ca 100644
--- a/app/views/help/ui.html.haml
+++ b/app/views/help/ui.html.haml
@@ -549,4 +549,4 @@
     %li wiki page
     %li help page
 
-  You can check how markdown rendered at #{link_to 'Markdown help page', help_page_path("markdown", "markdown")}.
+  You can check how markdown rendered at #{link_to 'Markdown help page', help_page_path("markdown/markdown")}.
diff --git a/app/views/import/github/new.html.haml b/app/views/import/github/new.html.haml
index 435ed7bd4cb..4c6af0b7908 100644
--- a/app/views/import/github/new.html.haml
+++ b/app/views/import/github/new.html.haml
@@ -38,6 +38,6 @@
       As an administrator you may like to configure
     - else
       Consider asking your GitLab administrator to configure
-    = link_to 'GitHub integration', help_page_path("integration", "github")
+    = link_to 'GitHub integration', help_page_path("integration/github")
     which will allow login via GitHub and allow importing projects without
     generating a Personal Access Token.
diff --git a/app/views/profiles/keys/index.html.haml b/app/views/profiles/keys/index.html.haml
index 6a067a03535..a42b3b8eb38 100644
--- a/app/views/profiles/keys/index.html.haml
+++ b/app/views/profiles/keys/index.html.haml
@@ -11,7 +11,7 @@
       Add an SSH key
     %p.profile-settings-content
       Before you can add an SSH key you need to
-      = link_to "generate it.", help_page_path("ssh", "README")
+      = link_to "generate it.", help_page_path("ssh/README")
     = render 'form'
     %hr
     %h5
diff --git a/app/views/profiles/preferences/show.html.haml b/app/views/profiles/preferences/show.html.haml
index b4d35dc9a3e..2afa026847a 100644
--- a/app/views/profiles/preferences/show.html.haml
+++ b/app/views/profiles/preferences/show.html.haml
@@ -43,12 +43,12 @@
     .form-group
       = f.label :dashboard, class: 'label-light' do
         Default Dashboard
-        = link_to('(?)', help_page_path('profile', 'preferences') + '#default-dashboard', target: '_blank')
+        = link_to('(?)', help_page_path('profile/preferences') + '#default-dashboard', target: '_blank')
       = f.select :dashboard, dashboard_choices, {}, class: 'form-control'
     .form-group
       = f.label :project_view, class: 'label-light' do
         Project view
-        = link_to('(?)', help_page_path('profile', 'preferences') + '#default-project-view', target: '_blank')
+        = link_to('(?)', help_page_path('profile/preferences') + '#default-project-view', target: '_blank')
       = f.select :project_view, project_view_choices, {}, class: 'form-control'
       .help-block
         Choose what content you want to see on a project's home page.
diff --git a/app/views/profiles/two_factor_auths/show.html.haml b/app/views/profiles/two_factor_auths/show.html.haml
index 5890456bee2..8780da1dec4 100644
--- a/app/views/profiles/two_factor_auths/show.html.haml
+++ b/app/views/profiles/two_factor_auths/show.html.haml
@@ -14,7 +14,7 @@
     - else
       %p
         Download the Google Authenticator application from App Store or Google Play Store and scan this code.
-        More information is available in the #{link_to('documentation', help_page_path('profile', 'two_factor_authentication'))}.
+        More information is available in the #{link_to('documentation', help_page_path('profile/two_factor_authentication'))}.
       .row.append-bottom-10
         .col-md-3
           = raw @qr_code
diff --git a/app/views/projects/_bitbucket_import_modal.html.haml b/app/views/projects/_bitbucket_import_modal.html.haml
index 2987f6b5b22..e74fd5b93ea 100644
--- a/app/views/projects/_bitbucket_import_modal.html.haml
+++ b/app/views/projects/_bitbucket_import_modal.html.haml
@@ -10,4 +10,4 @@
           as administrator you need to configure
         - else
           ask your GitLab administrator to configure
-        == #{link_to 'OAuth integration', help_page_path("integration", "bitbucket")}.
+        == #{link_to 'OAuth integration', help_page_path("integration/bitbucket")}.
diff --git a/app/views/projects/_builds_settings.html.haml b/app/views/projects/_builds_settings.html.haml
index d411da85ab0..fff30f11d82 100644
--- a/app/views/projects/_builds_settings.html.haml
+++ b/app/views/projects/_builds_settings.html.haml
@@ -4,7 +4,7 @@
   - unless @repository.gitlab_ci_yml
     .form-group
       %p Builds need to be configured before you can begin using Continuous Integration.
-      = link_to 'Get started with Builds', help_page_path('ci', 'quick_start', 'README'), class: 'btn btn-info'
+      = link_to 'Get started with Builds', help_page_path('ci/quick_start/README'), class: 'btn btn-info'
   .form-group
     %p Get recent application code using the following command:
     .radio
diff --git a/app/views/projects/_gitlab_import_modal.html.haml b/app/views/projects/_gitlab_import_modal.html.haml
index 377cf0187b8..e9f39b16aa7 100644
--- a/app/views/projects/_gitlab_import_modal.html.haml
+++ b/app/views/projects/_gitlab_import_modal.html.haml
@@ -10,4 +10,4 @@
           as administrator you need to configure
         - else
           ask your GitLab administrator to configure
-        == #{link_to 'OAuth integration', help_page_path("integration", "gitlab")}.
+        == #{link_to 'OAuth integration', help_page_path("integration/gitlab")}.
diff --git a/app/views/projects/_merge_request_settings.html.haml b/app/views/projects/_merge_request_settings.html.haml
index 771a2e0df7d..19b4249374b 100644
--- a/app/views/projects/_merge_request_settings.html.haml
+++ b/app/views/projects/_merge_request_settings.html.haml
@@ -8,4 +8,4 @@
         %strong Only allow merge requests to be merged if the build succeeds
       .help-block
         Builds need to be configured to enable this feature.
-        = link_to icon('question-circle'), help_page_path('workflow', 'merge_requests', anchor: 'only-allow-merge-requests-to-be-merged-if-the-build-succeeds')
+        = link_to icon('question-circle'), help_page_path('workflow/merge_requests', anchor: 'only-allow-merge-requests-to-be-merged-if-the-build-succeeds')
diff --git a/app/views/projects/builds/index.html.haml b/app/views/projects/builds/index.html.haml
index a131289ee97..381b3754cd5 100644
--- a/app/views/projects/builds/index.html.haml
+++ b/app/views/projects/builds/index.html.haml
@@ -31,7 +31,7 @@
             data: { confirm: 'Are you sure?' }, class: 'btn btn-danger', method: :post
 
         - unless @repository.gitlab_ci_yml
-          = link_to 'Get started with Builds', help_page_path('ci/quick_start', 'README'), class: 'btn btn-info'
+          = link_to 'Get started with Builds', help_page_path('ci/quick_start/README'), class: 'btn btn-info'
 
         = link_to ci_lint_path, class: 'btn btn-default' do
           %span CI Lint
diff --git a/app/views/projects/deploy_keys/_form.html.haml b/app/views/projects/deploy_keys/_form.html.haml
index 894c36a96df..901605f7ca3 100644
--- a/app/views/projects/deploy_keys/_form.html.haml
+++ b/app/views/projects/deploy_keys/_form.html.haml
@@ -9,5 +9,5 @@
   .form-group
     %p.light.append-bottom-0
       Paste a machine public key here. Read more about how to generate it
-      = link_to "here", help_page_path("ssh", "README")
+      = link_to "here", help_page_path("ssh/README")
   = f.submit "Add key", class: "btn-create btn"
diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml
index 27a94fe02dc..57af167180b 100644
--- a/app/views/projects/edit.html.haml
+++ b/app/views/projects/edit.html.haml
@@ -23,7 +23,7 @@
         .form-group.project-visibility-level-holder
           = f.label :visibility_level, class: 'label-light' do
             Visibility Level
-            = link_to "(?)", help_page_path("public_access", "public_access")
+            = link_to "(?)", help_page_path("public_access/public_access")
           - if can_change_visibility_level?(@project, current_user)
             = render('shared/visibility_radios', model_method: :visibility_level, form: f, selected_level: @project.visibility_level, form_model: @project)
           - else
diff --git a/app/views/projects/environments/index.html.haml b/app/views/projects/environments/index.html.haml
index 5242021243e..303d7c23d01 100644
--- a/app/views/projects/environments/index.html.haml
+++ b/app/views/projects/environments/index.html.haml
@@ -17,7 +17,7 @@
         Environments are places where code gets deployed, such as staging or production.
         %br
         = succeed "." do
-          = link_to "Read more about environments", help_page_path("ci", "environments")
+          = link_to "Read more about environments", help_page_path("ci/environments")
       - if can?(current_user, :create_environment, @project)
         = link_to new_namespace_project_environment_path(@project.namespace, @project), class: 'btn btn-create' do
           New environment
diff --git a/app/views/projects/environments/new.html.haml b/app/views/projects/environments/new.html.haml
index da325efecd2..89e06567196 100644
--- a/app/views/projects/environments/new.html.haml
+++ b/app/views/projects/environments/new.html.haml
@@ -7,6 +7,6 @@
     %p
       Environments allow you to track deployments of your application
       = succeed "." do
-        = link_to "Read more about environments", help_page_path("ci", "environments")
+        = link_to "Read more about environments", help_page_path("ci/environments")
 
   = render 'form'
diff --git a/app/views/projects/environments/show.html.haml b/app/views/projects/environments/show.html.haml
index 53c62ef234d..b17aba2431f 100644
--- a/app/views/projects/environments/show.html.haml
+++ b/app/views/projects/environments/show.html.haml
@@ -20,7 +20,7 @@
         Define environments in the deploy stage(s) in
         %code .gitlab-ci.yml
         to track deployments here.
-      = link_to "Read more", help_page_path("ci", "environments"), class: "btn btn-success"
+      = link_to "Read more", help_page_path("ci/environments"), class: "btn btn-success"
   - else
     .table-holder
       %table.table.environments
diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml
index 05f33b78a47..9b00bdedc27 100644
--- a/app/views/projects/new.html.haml
+++ b/app/views/projects/new.html.haml
@@ -107,7 +107,7 @@
         .form-group.project-visibility-level-holder
           = f.label :visibility_level, class: 'label-light' do
             Visibility Level
-            = link_to "(?)", help_page_path("public_access", "public_access")
+            = link_to "(?)", help_page_path("public_access/public_access")
           = render('shared/visibility_radios', model_method: :visibility_level, form: f, selected_level: @project.visibility_level, form_model: @project)
 
         = f.submit 'Create project', class: "btn btn-create project-submit", tabindex: 4
diff --git a/app/views/projects/notes/_hints.html.haml b/app/views/projects/notes/_hints.html.haml
index 7d1cbc62e86..25466e7562e 100644
--- a/app/views/projects/notes/_hints.html.haml
+++ b/app/views/projects/notes/_hints.html.haml
@@ -1,7 +1,7 @@
 .comment-toolbar.clearfix
   .toolbar-text
     Styling with
-    = link_to 'Markdown', help_page_path('markdown', 'markdown'), target: '_blank', tabindex: -1
+    = link_to 'Markdown', help_page_path('markdown/markdown'), target: '_blank', tabindex: -1
     is supported
   %button.toolbar-button.markdown-selector{ type: 'button', tabindex: '-1' }
     = icon('file-image-o', class: 'toolbar-button-icon')
diff --git a/app/views/projects/pipelines/index.html.haml b/app/views/projects/pipelines/index.html.haml
index 6a127afa410..7c225e2b282 100644
--- a/app/views/projects/pipelines/index.html.haml
+++ b/app/views/projects/pipelines/index.html.haml
@@ -31,7 +31,7 @@
           New pipeline
 
         - unless @repository.gitlab_ci_yml
-          = link_to 'Get started with Pipelines', help_page_path('ci/quick_start', 'README'), class: 'btn btn-info'
+          = link_to 'Get started with Pipelines', help_page_path('ci/quick_start/README'), class: 'btn btn-info'
 
         = link_to ci_lint_path, class: 'btn btn-default' do
           %span CI Lint
diff --git a/app/views/projects/project_members/_new_project_member.html.haml b/app/views/projects/project_members/_new_project_member.html.haml
index 82892a33358..ea3d82d858e 100644
--- a/app/views/projects/project_members/_new_project_member.html.haml
+++ b/app/views/projects/project_members/_new_project_member.html.haml
@@ -12,7 +12,7 @@
       = select_tag :access_level, options_for_select(ProjectMember.access_level_roles, @project_member.access_level), class: "project-access-select select2"
       .help-block
         Read more about role permissions
-        %strong= link_to "here", help_page_path("permissions", "permissions"), class: "vlink"
+        %strong= link_to "here", help_page_path("permissions/permissions"), class: "vlink"
 
   .form-actions
     = f.submit 'Add users to project', class: "btn btn-create"
diff --git a/app/views/projects/protected_branches/index.html.haml b/app/views/projects/protected_branches/index.html.haml
index 5669713d9a1..4da43488dac 100644
--- a/app/views/projects/protected_branches/index.html.haml
+++ b/app/views/projects/protected_branches/index.html.haml
@@ -8,10 +8,10 @@
     %p.prepend-top-20
       Protected branches are designed to:
       %ul
-        %li prevent pushes from everybody except #{link_to "masters", help_page_path("permissions", "permissions"), class: "vlink"}
+        %li prevent pushes from everybody except #{link_to "masters", help_page_path("permissions/permissions"), class: "vlink"}
         %li prevent anyone from force pushing to the branch
         %li prevent anyone from deleting the branch
-      %p.append-bottom-0 Read more about #{link_to "project permissions", help_page_path("permissions", "permissions"), class: "underlined-link"}
+      %p.append-bottom-0 Read more about #{link_to "project permissions", help_page_path("permissions/permissions"), class: "underlined-link"}
   .col-lg-9
     %h5.prepend-top-0
       Protect a branch
diff --git a/app/views/shared/_visibility_level.html.haml b/app/views/shared/_visibility_level.html.haml
index 1c6ec198d3d..107ad19177c 100644
--- a/app/views/shared/_visibility_level.html.haml
+++ b/app/views/shared/_visibility_level.html.haml
@@ -1,7 +1,7 @@
 .form-group.project-visibility-level-holder
   = f.label :visibility_level, class: 'control-label' do
     Visibility Level
-    = link_to "(?)", help_page_path("public_access", "public_access")
+    = link_to "(?)", help_page_path("public_access/public_access")
   .col-sm-10
     - if can_change_visibility_level
       = render('shared/visibility_radios', model_method: :visibility_level, form: f, selected_level: visibility_level, form_model: form_model)
diff --git a/app/views/shared/web_hooks/_form.html.haml b/app/views/shared/web_hooks/_form.html.haml
index d1e861ca80c..2585ed9360b 100644
--- a/app/views/shared/web_hooks/_form.html.haml
+++ b/app/views/shared/web_hooks/_form.html.haml
@@ -6,7 +6,7 @@
     %h4.prepend-top-0
       = page_title
     %p
-      #{link_to "Webhooks", help_page_path("web_hooks", "web_hooks")} can be
+      #{link_to "Webhooks", help_page_path("web_hooks/web_hooks")} can be
       used for binding events when something is happening within the project.
   .col-lg-9.append-bottom-default
     = form_for hook, as: :hook, url: polymorphic_path(url_components + [:hooks]) do |f|
diff --git a/config/routes.rb b/config/routes.rb
index 5ee0bd422fa..3160fd767b8 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -89,9 +89,9 @@ Rails.application.routes.draw do
   mount Grack::AuthSpawner, at: '/', constraints: lambda { |request| /[-\/\w\.]+\.git\/(info\/lfs|gitlab-lfs)/.match(request.path_info) }, via: [:get, :post, :put]
 
   # Help
+  
   get 'help'                  => 'help#index'
-  get 'help/:category/:file'  => 'help#show', as: :help_page, constraints: { category: /.*/, file: /[^\/\.]+/ }
-  get 'help/:category/:subcategory/:file'  => 'help#show', as: :deep_help_page, constraints: { category: /.*/, subcategory: /.*/, file: /[^\/\.]+/ }
+  get 'help/*path'            => 'help#show', as: :help_page
   get 'help/shortcuts'
   get 'help/ui' => 'help#ui'
 
diff --git a/features/steps/dashboard/help.rb b/features/steps/dashboard/help.rb
index 800e869533e..9c94dc70df0 100644
--- a/features/steps/dashboard/help.rb
+++ b/features/steps/dashboard/help.rb
@@ -8,7 +8,7 @@ class Spinach::Features::DashboardHelp < Spinach::FeatureSteps
   end
 
   step 'I visit the "Rake Tasks" help page' do
-    visit help_page_path("raketasks", "maintenance")
+    visit help_page_path("raketasks/maintenance")
   end
 
   step 'I should see "Rake Tasks" page markdown rendered' do
diff --git a/spec/features/help_pages_spec.rb b/spec/features/help_pages_spec.rb
index 8c6b669ce78..1e2306d7f59 100644
--- a/spec/features/help_pages_spec.rb
+++ b/spec/features/help_pages_spec.rb
@@ -6,7 +6,7 @@ describe 'Help Pages', feature: true do
       login_as :user
     end
     it 'replace the variable $your_email with the email of the user' do
-      visit help_page_path('ssh', 'README')
+      visit help_page_path('ssh/README')
       expect(page).to have_content("ssh-keygen -t rsa -C \"#{@user.email}\"")
     end
   end
-- 
GitLab