summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2019-02-12 16:56:59 +0000
committerRémy Coutable <remy@rymai.me>2019-02-12 16:56:59 +0000
commit553c9f3c2f77912bbc9d676747094e609aa96595 (patch)
treeb9cebb0a29a8ed298931ec88e92390f2c139c856
parentb753fc6daddd9e599ff848c5347cd7fc15f6a7c4 (diff)
parent752887b9a7a8158d0c9e140d93877017e2fc2a69 (diff)
downloadgitlab-ce-553c9f3c2f77912bbc9d676747094e609aa96595.tar.gz
Merge branch 'fix-broken-links-in-help' into 'master'
Fix broken links on help page Closes #57554 See merge request gitlab-org/gitlab-ce!25120
-rw-r--r--app/controllers/help_controller.rb7
-rw-r--r--spec/controllers/help_controller_spec.rb40
2 files changed, 44 insertions, 3 deletions
diff --git a/app/controllers/help_controller.rb b/app/controllers/help_controller.rb
index e5a1fc9d6ff..a9d6addd4a4 100644
--- a/app/controllers/help_controller.rb
+++ b/app/controllers/help_controller.rb
@@ -13,9 +13,10 @@ class HelpController < ApplicationController
# Remove YAML frontmatter so that it doesn't look weird
@help_index = File.read(Rails.root.join('doc', 'README.md')).sub(YAML_FRONT_MATTER_REGEXP, '')
- # Prefix Markdown links with `help/` unless they are external links
- # See http://rubular.com/r/X3baHTbPO2
- @help_index.gsub!(%r{(?<delim>\]\()(?!.+://)(?!/)(?<link>[^\)\(]+\))}) do
+ # Prefix Markdown links with `help/` unless they are external links.
+ # '//' not necessarily part of URL, e.g., mailto:mail@example.com
+ # See https://rubular.com/r/DFHZl5w8d3bpzV
+ @help_index.gsub!(%r{(?<delim>\]\()(?!\w+:)(?!/)(?<link>[^\)\(]+\))}) do
"#{$~[:delim]}#{Gitlab.config.gitlab.relative_url_root}/help/#{$~[:link]}"
end
end
diff --git a/spec/controllers/help_controller_spec.rb b/spec/controllers/help_controller_spec.rb
index 5cb284e7e2d..dca67c18caa 100644
--- a/spec/controllers/help_controller_spec.rb
+++ b/spec/controllers/help_controller_spec.rb
@@ -37,6 +37,46 @@ describe HelpController do
expect(assigns[:help_index]).to eq '[external](https://some.external.link)'
end
end
+
+ context 'when relative url with external on same line' do
+ it 'prefix it with /help/' do
+ stub_readme("[API](api/README.md) [external](https://some.external.link)")
+
+ get :index
+
+ expect(assigns[:help_index]).to eq '[API](/help/api/README.md) [external](https://some.external.link)'
+ end
+ end
+
+ context 'when relative url with http:// in query' do
+ it 'prefix it with /help/' do
+ stub_readme("[API](api/README.md?go=https://example.com/)")
+
+ get :index
+
+ expect(assigns[:help_index]).to eq '[API](/help/api/README.md?go=https://example.com/)'
+ end
+ end
+
+ context 'when mailto URL' do
+ it 'do not change it' do
+ stub_readme("[report bug](mailto:bugs@example.com)")
+
+ get :index
+
+ expect(assigns[:help_index]).to eq '[report bug](mailto:bugs@example.com)'
+ end
+ end
+
+ context 'when protocol-relative link' do
+ it 'do not change it' do
+ stub_readme("[protocol-relative](//example.com)")
+
+ get :index
+
+ expect(assigns[:help_index]).to eq '[protocol-relative](//example.com)'
+ end
+ end
end
describe 'GET #show' do