Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
iv
gitlab-ce
Commits
0415566b
Commit
0415566b
authored
Apr 10, 2013
by
Dmitriy Zaporozhets
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove wiki migrator. We dont need it any more. Users should migrate to 5.0 first
parent
86e368a8
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
0 additions
and
385 deletions
+0
-385
lib/tasks/migrate/migrate_wiki.rake
lib/tasks/migrate/migrate_wiki.rake
+0
-42
lib/wiki_to_gollum_migrator.rb
lib/wiki_to_gollum_migrator.rb
+0
-124
spec/lib/wiki_to_gollum_migrator_spec.rb
spec/lib/wiki_to_gollum_migrator_spec.rb
+0
-219
No files found.
lib/tasks/migrate/migrate_wiki.rake
deleted
100644 → 0
View file @
86e368a8
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
lib/wiki_to_gollum_migrator.rb
deleted
100644 → 0
View file @
86e368a8
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
"
\n
Migrating 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
"
\n
Beginning Wiki Migration Rollback..."
projects
.
each
do
|
project
|
destroy_gollum_repo
project
end
log
"
\n
Wiki 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
spec/lib/wiki_to_gollum_migrator_spec.rb
deleted
100644 → 0
View file @
86e368a8
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment