diff --git a/app/models/gollum_wiki.rb b/app/models/gollum_wiki.rb deleted file mode 100644 index 62c8b5145ddbe20e434220046ed99c697c969ff0..0000000000000000000000000000000000000000 --- a/app/models/gollum_wiki.rb +++ /dev/null @@ -1,120 +0,0 @@ -class GollumWiki - include Gitlab::ShellAdapter - - MARKUPS = { - "Markdown" => :markdown, - "RDoc" => :rdoc - } - - class CouldNotCreateWikiError < StandardError; end - - # Returns a string describing what went wrong after - # an operation fails. - attr_reader :error_message - - def initialize(project, user = nil) - @project = project - @user = user - end - - def path - @project.path + '.wiki' - end - - def path_with_namespace - @project.path_with_namespace + ".wiki" - end - - def url_to_repo - gitlab_shell.url_to_repo(path_with_namespace) - end - - def ssh_url_to_repo - url_to_repo - end - - def http_url_to_repo - [Gitlab.config.gitlab.url, "/", path_with_namespace, ".git"].join('') - end - - # Returns the Gollum::Wiki object. - def wiki - @wiki ||= begin - Gollum::Wiki.new(path_to_repo) - rescue Gollum::NoSuchPathError - create_repo! - end - end - - def empty? - pages.empty? - end - - # Returns an Array of Gitlab WikiPage instances or an - # empty Array if this Wiki has no pages. - def pages - wiki.pages.map { |page| WikiPage.new(self, page, true) } - end - - # Finds a page within the repository based on a tile - # or slug. - # - # title - The human readable or parameterized title of - # the page. - # - # Returns an initialized WikiPage instance or nil - def find_page(title, version = nil) - if page = wiki.page(title, version) - WikiPage.new(self, page, true) - else - nil - end - end - - def create_page(title, content, format = :markdown, message = nil) - commit = commit_details(:created, message, title) - - wiki.write_page(title, format, content, commit) - rescue Gollum::DuplicatePageError => e - @error_message = "Duplicate page: #{e.message}" - return false - end - - def update_page(page, content, format = :markdown, message = nil) - commit = commit_details(:updated, message, page.title) - - wiki.update_page(page, page.name, format, content, commit) - end - - def delete_page(page, message = nil) - wiki.delete_page(page, commit_details(:deleted, message, page.title)) - end - - private - - def create_repo! - if init_repo(path_with_namespace) - Gollum::Wiki.new(path_to_repo) - else - raise CouldNotCreateWikiError - end - end - - def init_repo(path_with_namespace) - gitlab_shell.add_repository(path_with_namespace) - end - - def commit_details(action, message = nil, title = nil) - commit_message = message || default_message(action, title) - - {email: @user.email, name: @user.name, message: commit_message} - end - - def default_message(action, title) - "#{@user.username} #{action} page: #{title}" - end - - def path_to_repo - @path_to_repo ||= File.join(Gitlab.config.gitlab_shell.repos_path, "#{path_with_namespace}.git") - end -end diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb index 4d3d518a509533ff21d7045c6feca7c78170ba70..11b65256502ba3b0bd43468d5aa8aa87472c6943 100644 --- a/app/services/projects/create_service.rb +++ b/app/services/projects/create_service.rb @@ -74,8 +74,8 @@ module Projects if @project.wiki_enabled? begin # force the creation of a wiki, - GollumWiki.new(@project, @project.owner).wiki - rescue GollumWiki::CouldNotCreateWikiError => ex + ProjectWiki.new(@project, @project.owner).wiki + rescue ProjectWiki::CouldNotCreateWikiError => ex # Prevent project observer crash # if failed to create wiki nil diff --git a/features/steps/project/wiki.rb b/features/steps/project/wiki.rb index 6146599cc4ac24f517184778e2a7d9e9f7981bf4..65e7d094f2d9b1cbf2d16283f82bf834e2b9c0d5 100644 --- a/features/steps/project/wiki.rb +++ b/features/steps/project/wiki.rb @@ -1,4 +1,4 @@ -class ProjectWiki < Spinach::FeatureSteps +class Spinach::Features::ProjectWiki < Spinach::FeatureSteps include SharedAuthentication include SharedProject include SharedNote @@ -16,7 +16,7 @@ class ProjectWiki < Spinach::FeatureSteps end Given 'I create the Wiki Home page' do - fill_in "Content", with: '[link test](test)' + fill_in "wiki_content", with: '[link test](test)' click_on "Create page" end @@ -87,6 +87,6 @@ class ProjectWiki < Spinach::FeatureSteps end def wiki - @gollum_wiki = GollumWiki.new(project, current_user) + @project_wiki = ProjectWiki.new(project, current_user) end end diff --git a/lib/backup/repository.rb b/lib/backup/repository.rb index 552f7eaa5ce7d1ed8cf52978fbf27dedc8a1eab4..214d9824ee125cf118bbb0de835169d97f3e3fa8 100644 --- a/lib/backup/repository.rb +++ b/lib/backup/repository.rb @@ -24,7 +24,7 @@ module Backup puts "[FAILED]".red end - wiki = GollumWiki.new(project) + wiki = ProjectWiki.new(project) if File.exists?(path_to_repo(wiki)) print " * #{wiki.path_with_namespace} ... " @@ -59,7 +59,7 @@ module Backup puts "[FAILED]".red end - wiki = GollumWiki.new(project) + wiki = ProjectWiki.new(project) if File.exists?(path_to_bundle(wiki)) print " * #{wiki.path_with_namespace} ... " diff --git a/lib/redcarpet/render/gitlab_html.rb b/lib/redcarpet/render/gitlab_html.rb index 86d8b69b0ef0e7c426c41b9a76ecab4482c75403..7d9428ff27d4a311ed10ac3cbdd8d4ca5b9846d2 100644 --- a/lib/redcarpet/render/gitlab_html.rb +++ b/lib/redcarpet/render/gitlab_html.rb @@ -60,6 +60,8 @@ class Redcarpet::Render::GitlabHTML < Redcarpet::Render::HTML end def is_wiki? - @template.instance_variable_get("@wiki") + if @template.instance_variable_get("@project_wiki") + @template.instance_variable_get("@page") + end end end diff --git a/spec/models/gollum_wiki_spec.rb b/spec/models/project_wiki_spec.rb similarity index 94% rename from spec/models/gollum_wiki_spec.rb rename to spec/models/project_wiki_spec.rb index 9b9d15b4ff4ef974bbdac49f6c19d44aaa11be0d..32a82470e4fe2f4d3ed39a6826d0807bb149830a 100644 --- a/spec/models/gollum_wiki_spec.rb +++ b/spec/models/project_wiki_spec.rb @@ -1,6 +1,6 @@ require "spec_helper" -describe GollumWiki do +describe ProjectWiki do def remove_temp_repo(path) FileUtils.rm_rf path @@ -23,7 +23,7 @@ describe GollumWiki do let(:user) { project.owner } let(:gitlab_shell) { Gitlab::Shell.new } - subject { GollumWiki.new(project, user) } + subject { ProjectWiki.new(project, user) } before do create_temp_repo(subject.send(:path_to_repo)) @@ -68,15 +68,15 @@ describe GollumWiki do end it "creates a new wiki repo if one does not yet exist" do - wiki = GollumWiki.new(project, user) + wiki = ProjectWiki.new(project, user) wiki.create_page("index", "test content").should_not == false FileUtils.rm_rf wiki.send(:path_to_repo) end it "raises CouldNotCreateWikiError if it can't create the wiki repository" do - GollumWiki.any_instance.stub(:init_repo).and_return(false) - expect { GollumWiki.new(project, user).wiki }.to raise_exception(GollumWiki::CouldNotCreateWikiError) + ProjectWiki.any_instance.stub(:init_repo).and_return(false) + expect { ProjectWiki.new(project, user).wiki }.to raise_exception(ProjectWiki::CouldNotCreateWikiError) end end diff --git a/spec/models/wiki_page_spec.rb b/spec/models/wiki_page_spec.rb index 1c70edf0d4de5016a30c22df3701294cfa25bde3..2af164bd99b8a17d4a21519235eb6bfb91261f23 100644 --- a/spec/models/wiki_page_spec.rb +++ b/spec/models/wiki_page_spec.rb @@ -22,7 +22,7 @@ describe WikiPage do let(:project) { create(:project) } let(:repository) { project.repository } let(:user) { project.owner } - let(:wiki) { GollumWiki.new(project, user) } + let(:wiki) { ProjectWiki.new(project, user) } subject { WikiPage.new(wiki) } diff --git a/spec/services/projects/create_service_spec.rb b/spec/services/projects/create_service_spec.rb index f2a784df103e59d864b087f5eeaa19cb8a8ea95a..38aae452c3c56fb5f58374e2dec56fd5dae82c3f 100644 --- a/spec/services/projects/create_service_spec.rb +++ b/spec/services/projects/create_service_spec.rb @@ -42,7 +42,7 @@ describe Projects::CreateService do context 'wiki_enabled true creates wiki repository directory' do before do @project = create_project(@user, @opts) - @path = GollumWiki.new(@project, @user).send(:path_to_repo) + @path = ProjectWiki.new(@project, @user).send(:path_to_repo) end it { File.exists?(@path).should be_true } @@ -52,7 +52,7 @@ describe Projects::CreateService do before do @opts.merge!(wiki_enabled: false) @project = create_project(@user, @opts) - @path = GollumWiki.new(@project, @user).send(:path_to_repo) + @path = ProjectWiki.new(@project, @user).send(:path_to_repo) end it { File.exists?(@path).should be_false } diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb index d237f7ad094b65e5168b50dd283e7c480d338319..b1bb65a836e34fef5fc5680b60b87d387d140d52 100644 --- a/spec/support/test_env.rb +++ b/spec/support/test_env.rb @@ -52,7 +52,7 @@ module TestEnv def setup_stubs() # Use tmp dir for FS manipulations repos_path = testing_path() - GollumWiki.any_instance.stub(:init_repo) do |path| + ProjectWiki.any_instance.stub(:init_repo) do |path| create_temp_repo(File.join(repos_path, "#{path}.git")) end