summaryrefslogtreecommitdiff
path: root/lib/gitlab
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2018-10-17 13:17:20 +0000
committerRémy Coutable <remy@rymai.me>2018-10-17 13:17:20 +0000
commit1696a3e8c36a0336e62ec990fd8b4e0517e4c93c (patch)
tree7aa2ebfb39874599ab25cf87f8a26b37f5a62e7a /lib/gitlab
parent071b39a22c8a3efc4e3a0531c71e1e8161b78f47 (diff)
parentc5bff77ea4a6170a3dc1966254feac0ca1836eaa (diff)
downloadgitlab-ce-1696a3e8c36a0336e62ec990fd8b4e0517e4c93c.tar.gz
Merge branch '44361-remove-gitlab-grit' into 'master'
Remove gitlab-grit as a transitive dependency of GitLab Closes #44361 See merge request gitlab-org/gitlab-ce!22373
Diffstat (limited to 'lib/gitlab')
-rw-r--r--lib/gitlab/git/wiki.rb53
1 files changed, 38 insertions, 15 deletions
diff --git a/lib/gitlab/git/wiki.rb b/lib/gitlab/git/wiki.rb
index 072019dfb0a..7fe56979d5c 100644
--- a/lib/gitlab/git/wiki.rb
+++ b/lib/gitlab/git/wiki.rb
@@ -1,8 +1,3 @@
-# We only need Gollum::Page so let's not load all of gollum-lib.
-require 'gollum-lib/pagination'
-require 'gollum-lib/wiki'
-require 'gollum-lib/page'
-
module Gitlab
module Git
class Wiki
@@ -16,7 +11,43 @@ module Gitlab
{ user_id: user_id, username: username, name: name, email: email, message: message }
end
end
- PageBlob = Struct.new(:name)
+
+ # GollumSlug inlines just enough knowledge from Gollum::Page to generate a
+ # slug, which is used when previewing pages that haven't been persisted
+ class GollumSlug
+ class << self
+ def cname(name, char_white_sub = '-', char_other_sub = '-')
+ if name.respond_to?(:gsub)
+ name.gsub(/\s/, char_white_sub).gsub(/[<>+]/, char_other_sub)
+ else
+ ''
+ end
+ end
+
+ def format_to_ext(format)
+ format == :markdown ? "md" : format.to_s
+ end
+
+ def canonicalize_filename(filename)
+ ::File.basename(filename, ::File.extname(filename)).tr('-', ' ')
+ end
+
+ def generate(title, format)
+ ext = format_to_ext(format.to_sym)
+ name = cname(title) + '.' + ext
+ canonical_name = canonicalize_filename(name)
+
+ path =
+ if name.include?('/')
+ name.sub(%r{/[^/]+$}, '/')
+ else
+ ''
+ end
+
+ path + cname(canonical_name, '-', '-')
+ end
+ end
+ end
attr_reader :repository
@@ -90,15 +121,7 @@ module Gitlab
end
def preview_slug(title, format)
- # Adapted from gollum gem (Gollum::Wiki#preview_page) to avoid
- # using Rugged through a Gollum::Wiki instance
- page_class = Gollum::Page
- page = page_class.new(nil)
- ext = page_class.format_to_ext(format.to_sym)
- name = page_class.cname(title) + '.' + ext
- blob = PageBlob.new(name)
- page.populate(blob)
- page.url_path
+ GollumSlug.generate(title, format)
end
def page_formatted_data(title:, dir: nil, version: nil)