From 0415566b3796f500e7f694a0aee4882752d150c1 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 10 Apr 2013 20:48:21 +0300 Subject: [PATCH] Remove wiki migrator. We dont need it any more. Users should migrate to 5.0 first --- lib/tasks/migrate/migrate_wiki.rake | 42 ----- lib/wiki_to_gollum_migrator.rb | 124 ------------- spec/lib/wiki_to_gollum_migrator_spec.rb | 219 ----------------------- 3 files changed, 385 deletions(-) delete mode 100644 lib/tasks/migrate/migrate_wiki.rake delete mode 100644 lib/wiki_to_gollum_migrator.rb delete mode 100644 spec/lib/wiki_to_gollum_migrator_spec.rb diff --git a/lib/tasks/migrate/migrate_wiki.rake b/lib/tasks/migrate/migrate_wiki.rake deleted file mode 100644 index 5d9881e45db..00000000000 --- a/lib/tasks/migrate/migrate_wiki.rake +++ /dev/null @@ -1,42 +0,0 @@ -namespace :gitlab do - namespace :wiki do - - # This task will migrate all of the existing Wiki - # content stored in your database into the new - # Gollum Wiki system. A new repository named - # namespace/project.wiki.git will be created for - # each project that currently has Wiki pages in - # the database. - # - # Notes: - # * The existing Wiki content will remain in your - # database in-tact. - desc "GITLAB | Migrate Wiki content from database to Gollum repositories." - task :migrate => :environment do - wiki_migrator = WikiToGollumMigrator.new - wiki_migrator.migrate! - end - - # This task will destroy all of the Wiki repos - # that the Wiki migration task created. Run this - # to clean up your environment if you experienced - # problems during the original migration. After - # executing this task, you can attempt the original - # migration again. - # - # Notes: - # * This will not affect Wikis that have been created - # as Gollum Wikis only. It will only remove the wikis - # for the repositories that have old Wiki data in the - # dataabase. - # * If you have any repositories already named - # namespace/project.wiki that you do not wish - # to be removed you may want to perform a manual - # cleanup instead. - desc "GITLAB | Remove the Wiki repositories created by the `gitlab:wiki:migrate` task." - task :rollback => :environment do - wiki_migrator = WikiToGollumMigrator.new - wiki_migrator.rollback! - end - end -end diff --git a/lib/wiki_to_gollum_migrator.rb b/lib/wiki_to_gollum_migrator.rb deleted file mode 100644 index ed6a1700631..00000000000 --- a/lib/wiki_to_gollum_migrator.rb +++ /dev/null @@ -1,124 +0,0 @@ -class WikiToGollumMigrator - - attr_reader :projects - - def initialize - @projects = [] - - Project.find_in_batches(batch_size: 50) do |batch| - batch.each { |p| @projects << p if p.wikis.any? } - end - end - - def migrate! - projects.each do |project| - log "\nMigrating Wiki for '#{project.path_with_namespace}'" - wiki = create_gollum_repo(project) - create_pages project, wiki - log "Project '#{project.path_with_namespace}' migrated. " + "[OK]".green - end - end - - def rollback! - log "\nBeginning Wiki Migration Rollback..." - projects.each do |project| - destroy_gollum_repo project - end - log "\nWiki Rollback Complete." - end - - private - - def create_gollum_repo(project) - GollumWiki.new(project, nil).wiki - end - - def destroy_gollum_repo(project) - log " Removing Wiki repo for project: #{project.path_with_namespace}" - path = GollumWiki.new(project, nil).path_with_namespace - if Gitlab::Shell.new.remove_repository(path) - log " Wiki destroyed successfully. " + "[OK}".green - else - log " Problem destroying wiki. Please remove it manually. " + "[FAILED]".red - end - end - - def create_pages(project, wiki) - pages = project.wikis.group(:slug).all - - pages.each do |page| - create_page_and_revisions(project, page) - end - end - - def create_page_and_revisions(project, page) - # Grab all revisions of the page - revisions = project.wikis.where(slug: page.slug).ordered.all - - # Remove the first revision created from the array - # and use it to create the Gollum page. Each successive revision - # will then be applied to the new Gollum page as an update. - first_rev = revisions.pop - - wiki = GollumWiki.new(project, page.user) - wiki_page = WikiPage.new(wiki) - - attributes = extract_attributes_from_page(first_rev, project) - - log " Creating page '#{first_rev.title}'..." - if wiki_page.create(attributes) - log " Created page '#{wiki_page.title}' " + "[OK]".green - - # Reverse the revisions to create them in the correct - # chronological order. - create_revisions(project, wiki_page, revisions.reverse) - else - log " Failed to create page '#{wiki_page.title}' " + "[FAILED]".red - end - end - - def create_revisions(project, page, revisions) - log " Creating revisions..." - revisions.each do |revision| - # Reinitialize a new GollumWiki instance for each page - # and revision created so the correct User is shown in - # the commit message. - wiki = GollumWiki.new(project, revision.user) - wiki_page = wiki.find_page(page.slug) - - attributes = extract_attributes_from_page(revision, project) - - content = attributes[:content] - - if wiki_page.update(content) - log " Created revision " + "[OK]".green - else - log " Failed to create revision " + "[FAILED]".red - end - end - end - - def extract_attributes_from_page(page, project) - attributes = page.attributes - .with_indifferent_access - .slice(:title, :content) - - slug = page.slug - - # Change 'index' pages to 'home' pages to match Gollum standards - if slug.downcase == "index" - attributes[:title] = "home" unless home_already_exists?(project) - end - - attributes - end - - def home_already_exists?(project) - project.wikis.where(slug: 'home').any? || project.wikis.where(slug: 'Home').any? - end - - def log(message) - puts message - end - -end diff --git a/spec/lib/wiki_to_gollum_migrator_spec.rb b/spec/lib/wiki_to_gollum_migrator_spec.rb deleted file mode 100644 index f9b9c78ea01..00000000000 --- a/spec/lib/wiki_to_gollum_migrator_spec.rb +++ /dev/null @@ -1,219 +0,0 @@ -require "spec_helper" - -describe WikiToGollumMigrator do - - def create_wiki_for(project) - 3.times { @pages[project.id] << create_page(project) } - end - - def create_revisions_for(project) - @pages[project.id].each do |page| - create_revision(page) - end - end - - def create_page(project) - page = project.wikis.new(title: "Page #{rand(1000)}", content: "Content") - page.user = project.owner - page.slug = page.title.parameterize - page.save! - page - end - - def create_revision(page) - revision = page.dup - revision.content = "Updated Content" - revision.save! - end - - def create_temp_repo(path) - FileUtils.mkdir_p path - command = "git init --quiet --bare #{path};" - system(command) - end - - before do - @repo_path = "#{Rails.root}/tmp/test-git-base-path" - @projects = [] - @pages = Hash.new {|h,k| h[k] = Array.new } - - @projects << create(:project) - @projects << create(:project) - - @projects.each do |project| - create_wiki_for project - create_revisions_for project - end - - @project_without_wiki = create(:project) - end - - context "Before the migration" do - it "has two projects with valid wikis" do - @projects.each do |project| - pages = project.wikis.group(:slug).all - pages.count.should == 3 - end - end - - it "has two revision for each page" do - @projects.each do |project| - @pages[project.id].each do |page| - revisions = project.wikis.where(slug: page.slug) - revisions.count.should == 2 - end - end - end - end - - describe "#initialize" do - it "finds all projects that have existing wiki pages" do - Project.count.should == 3 - subject.projects.count.should == 2 - end - end - - context "#migrate!" do - before do - Gitlab::Shell.any_instance.stub(:add_repository) do |path| - create_temp_repo("#{@repo_path}/#{path}.git") - end - - subject.stub(:log).as_null_object - - subject.migrate! - end - - it "creates a new Gollum Wiki for each project" do - @projects.each do |project| - wiki_path = project.path_with_namespace + ".wiki.git" - full_path = @repo_path + "/" + wiki_path - File.exist?(full_path).should be_true - File.directory?(full_path).should be_true - end - end - - it "creates a gollum page for each unique Wiki page" do - @projects.each do |project| - wiki = GollumWiki.new(project, nil) - wiki.pages.count.should == 3 - end - end - - it "creates a new revision for each old revision of the page" do - @projects.each do |project| - wiki = GollumWiki.new(project, nil) - wiki.pages.each do |page| - page.versions.count.should == 2 - end - end - end - - context "wikis with pages that have titles that do not match the slugs" do - before do - project = @projects.last - @page = project.wikis.new(title: "test page", content: "Invalid Page") - @page.slug = "totally-incorrect-slug" - @page.user = project.owner - @page.save! - - create_revision(@page) - - subject.rollback! - subject.migrate! - end - - it "has a page with a title differing the slug" do - @page.slug.should_not == @page.title.parameterize - end - - it "creates a new revision for each old revision of the page" do - @projects.each do |project| - wiki = GollumWiki.new(project, nil) - wiki.pages.each do |page| - page.versions.count.should == 2 - end - end - end - end - - context "changing wiki title from index to home" do - before do - @project = @projects.last - @page = @project.wikis.new(title: "Index", content: "Home Page") - @page.slug = "index" - @page.user = @project.owner - @page.save! - - create_revision(@page) - - subject.rollback! - end - - it "creates a page called Home" do - subject.migrate! - wiki = GollumWiki.new(@project, nil) - page = wiki.find_page("home") - page.should be_present - end - - context "when a page called Home already exists" do - before do - @index_page = @project.wikis.new(title: "Index", content: "Index Page") - @index_page.slug = "index" - @index_page.user = @project.owner - @index_page.save! - - create_revision(@index_page) - - @home_page = @project.wikis.new(title: "Home", content: "Home Page") - @home_page.slug = "home" - @home_page.user = @project.owner - @home_page.save! - - create_revision(@home_page) - subject.migrate! - end - - it "creates the index page" do - wiki = GollumWiki.new(@project, nil) - page = wiki.find_page("index") - page.should be_present - end - - it "creates the home page" do - wiki = GollumWiki.new(@project, nil) - page = wiki.find_page("home") - page.should be_present - end - end - end - end - - context "#rollback!" do - before do - Gitlab::Shell.any_instance.stub(:add_repository) do |path| - create_temp_repo("#{@repo_path}/#{path}.git") - end - - Gitlab::Shell.any_instance.stub(:remove_repository) do |path| - FileUtils.rm_rf "#{@repo_path}/#{path}.git" - end - - subject.stub(:log).as_null_object - - subject.migrate! - subject.rollback! - end - - it "destroys all of the wiki repositories that were created during migrate!" do - @projects.each do |project| - wiki_path = project.path_with_namespace + ".wiki.git" - full_path = @repo_path + "/" + wiki_path - File.exist?(full_path).should be_false - end - end - end - - -end