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
a96e0ec5
Commit
a96e0ec5
authored
Mar 17, 2013
by
Dmitriy Zaporozhets
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #3240 from DanKnox/fix_wiki_migrator
Fix Wiki migration task and add more test coverage.
parents
c367cc5c
330fe416
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
154 additions
and
6 deletions
+154
-6
lib/tasks/gitlab/migrate_wiki.rake
lib/tasks/gitlab/migrate_wiki.rake
+22
-0
lib/wiki_to_gollum_migrator.rb
lib/wiki_to_gollum_migrator.rb
+27
-6
spec/lib/wiki_to_gollum_migrator_spec.rb
spec/lib/wiki_to_gollum_migrator_spec.rb
+105
-0
No files found.
lib/tasks/gitlab/migrate_wiki.rake
View file @
a96e0ec5
...
@@ -16,5 +16,27 @@ namespace :gitlab do
...
@@ -16,5 +16,27 @@ namespace :gitlab do
wiki_migrator
=
WikiToGollumMigrator
.
new
wiki_migrator
=
WikiToGollumMigrator
.
new
wiki_migrator
.
migrate!
wiki_migrator
.
migrate!
end
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
end
end
lib/wiki_to_gollum_migrator.rb
View file @
a96e0ec5
...
@@ -19,12 +19,30 @@ class WikiToGollumMigrator
...
@@ -19,12 +19,30 @@ class WikiToGollumMigrator
end
end
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
private
def
create_gollum_repo
(
project
)
def
create_gollum_repo
(
project
)
GollumWiki
.
new
(
project
,
nil
).
wiki
GollumWiki
.
new
(
project
,
nil
).
wiki
end
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
)
def
create_pages
(
project
,
wiki
)
pages
=
project
.
wikis
.
group
(
:slug
).
all
pages
=
project
.
wikis
.
group
(
:slug
).
all
...
@@ -45,8 +63,9 @@ class WikiToGollumMigrator
...
@@ -45,8 +63,9 @@ class WikiToGollumMigrator
wiki
=
GollumWiki
.
new
(
project
,
page
.
user
)
wiki
=
GollumWiki
.
new
(
project
,
page
.
user
)
wiki_page
=
WikiPage
.
new
(
wiki
)
wiki_page
=
WikiPage
.
new
(
wiki
)
attributes
=
extract_attributes_from_page
(
first_rev
)
attributes
=
extract_attributes_from_page
(
first_rev
,
project
)
log
" Creating page '
#{
first_rev
.
title
}
'..."
if
wiki_page
.
create
(
attributes
)
if
wiki_page
.
create
(
attributes
)
log
" Created page '
#{
wiki_page
.
title
}
' "
+
"[OK]"
.
green
log
" Created page '
#{
wiki_page
.
title
}
' "
+
"[OK]"
.
green
...
@@ -59,15 +78,15 @@ class WikiToGollumMigrator
...
@@ -59,15 +78,15 @@ class WikiToGollumMigrator
end
end
def
create_revisions
(
project
,
page
,
revisions
)
def
create_revisions
(
project
,
page
,
revisions
)
log
" Creating revisions..."
revisions
.
each
do
|
revision
|
revisions
.
each
do
|
revision
|
log
" Creating revisions..."
# Reinitialize a new GollumWiki instance for each page
# Reinitialize a new GollumWiki instance for each page
# and revision created so the correct User is shown in
# and revision created so the correct User is shown in
# the commit message.
# the commit message.
wiki
=
GollumWiki
.
new
(
project
,
revision
.
user
)
wiki
=
GollumWiki
.
new
(
project
,
revision
.
user
)
wiki_page
=
wiki
.
find_page
(
page
.
slug
)
wiki_page
=
wiki
.
find_page
(
page
.
slug
)
attributes
=
extract_attributes_from_page
(
revision
)
attributes
=
extract_attributes_from_page
(
revision
,
project
)
content
=
attributes
[
:content
]
content
=
attributes
[
:content
]
...
@@ -79,13 +98,15 @@ class WikiToGollumMigrator
...
@@ -79,13 +98,15 @@ class WikiToGollumMigrator
end
end
end
end
def
extract_attributes_from_page
(
page
)
def
extract_attributes_from_page
(
page
,
project
)
attributes
=
page
.
attributes
attributes
=
page
.
attributes
.
with_indifferent_access
.
with_indifferent_access
.
slice
(
:title
,
:content
)
.
slice
(
:title
,
:content
)
slug
=
page
.
slug
# Change 'index' pages to 'home' pages to match Gollum standards
# Change 'index' pages to 'home' pages to match Gollum standards
if
attributes
[
:title
]
.
downcase
==
"index"
if
slug
.
downcase
==
"index"
attributes
[
:title
]
=
"home"
unless
home_already_exists?
(
project
)
attributes
[
:title
]
=
"home"
unless
home_already_exists?
(
project
)
end
end
...
@@ -93,7 +114,7 @@ class WikiToGollumMigrator
...
@@ -93,7 +114,7 @@ class WikiToGollumMigrator
end
end
def
home_already_exists?
(
project
)
def
home_already_exists?
(
project
)
project
.
wikis
.
where
(
title:
'home'
).
any?
||
project
.
wikis
.
where
(
title
:
'Home'
).
any?
project
.
wikis
.
where
(
slug:
'home'
).
any?
||
project
.
wikis
.
where
(
slug
:
'Home'
).
any?
end
end
def
log
(
message
)
def
log
(
message
)
...
...
spec/lib/wiki_to_gollum_migrator_spec.rb
View file @
a96e0ec5
...
@@ -108,6 +108,111 @@ describe WikiToGollumMigrator do
...
@@ -108,6 +108,111 @@ describe WikiToGollumMigrator do
end
end
end
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